Squashed 'modules/libjuju/' content from commit c50c361
authorAdam Israel <adam.israel@canonical.com>
Tue, 15 Aug 2017 19:26:43 +0000 (15:26 -0400)
committerAdam Israel <adam.israel@canonical.com>
Tue, 15 Aug 2017 19:26:43 +0000 (15:26 -0400)
git-subtree-dir: modules/libjuju
git-subtree-split: c50c361a8b9a3bbf1a33f5659e492b481f065cd2

130 files changed:
.gitignore [new file with mode: 0644]
.travis.yml [new file with mode: 0644]
CONTRIBUTORS [new file with mode: 0644]
LICENSE [new file with mode: 0644]
MANIFEST.in [new file with mode: 0644]
Makefile [new file with mode: 0644]
README.rst [new symlink]
TODO [new file with mode: 0644]
VERSION [new file with mode: 0644]
docs/Makefile [new file with mode: 0644]
docs/_extensions/automembersummary.py [new file with mode: 0644]
docs/_static/custom.css [new file with mode: 0644]
docs/api/juju.action.rst [new file with mode: 0644]
docs/api/juju.annotation.rst [new file with mode: 0644]
docs/api/juju.application.rst [new file with mode: 0644]
docs/api/juju.client.rst [new file with mode: 0644]
docs/api/juju.cloud.rst [new file with mode: 0644]
docs/api/juju.constraints.rst [new file with mode: 0644]
docs/api/juju.controller.rst [new file with mode: 0644]
docs/api/juju.delta.rst [new file with mode: 0644]
docs/api/juju.errors.rst [new file with mode: 0644]
docs/api/juju.exceptions.rst [new file with mode: 0644]
docs/api/juju.juju.rst [new file with mode: 0644]
docs/api/juju.loop.rst [new file with mode: 0644]
docs/api/juju.machine.rst [new file with mode: 0644]
docs/api/juju.model.rst [new file with mode: 0644]
docs/api/juju.placement.rst [new file with mode: 0644]
docs/api/juju.relation.rst [new file with mode: 0644]
docs/api/juju.tag.rst [new file with mode: 0644]
docs/api/juju.unit.rst [new file with mode: 0644]
docs/api/juju.utils.rst [new file with mode: 0644]
docs/api/modules.rst [new file with mode: 0644]
docs/changelog.rst [new file with mode: 0644]
docs/conf.py [new file with mode: 0644]
docs/index.rst [new file with mode: 0644]
docs/narrative/application.rst [new file with mode: 0644]
docs/narrative/controller.rst [new file with mode: 0644]
docs/narrative/index.rst [new file with mode: 0644]
docs/narrative/model.rst [new file with mode: 0644]
docs/narrative/unit.rst [new file with mode: 0644]
docs/readme.rst [new file with mode: 0644]
docs/requirements.txt [new file with mode: 0644]
docs/upstream-updates/index.rst [new file with mode: 0644]
examples/action.py [new file with mode: 0644]
examples/add_machine.py [new file with mode: 0755]
examples/add_model.py [new file with mode: 0644]
examples/allwatcher.py [new file with mode: 0644]
examples/config.py [new file with mode: 0644]
examples/controller.py [new file with mode: 0644]
examples/deploy.py [new file with mode: 0644]
examples/fullstatus.py [new file with mode: 0644]
examples/future.py [new file with mode: 0644]
examples/leadership.py [new file with mode: 0644]
examples/livemodel.py [new file with mode: 0644]
examples/localcharm.py [new file with mode: 0644]
examples/relate.py [new file with mode: 0644]
examples/unitrun.py [new file with mode: 0644]
juju/__init__.py [new file with mode: 0644]
juju/action.py [new file with mode: 0644]
juju/annotation.py [new file with mode: 0644]
juju/application.py [new file with mode: 0644]
juju/client/__init__.py [new file with mode: 0644]
juju/client/_client.py [new file with mode: 0644]
juju/client/_client1.py [new file with mode: 0644]
juju/client/_client2.py [new file with mode: 0644]
juju/client/_client3.py [new file with mode: 0644]
juju/client/_client4.py [new file with mode: 0644]
juju/client/_client5.py [new file with mode: 0644]
juju/client/_definitions.py [new file with mode: 0644]
juju/client/client.py [new file with mode: 0644]
juju/client/codegen.py [new file with mode: 0644]
juju/client/connection.py [new file with mode: 0644]
juju/client/facade.py [new file with mode: 0644]
juju/client/overrides.py [new file with mode: 0644]
juju/client/runner.py [new file with mode: 0644]
juju/client/schemas-juju-2.0.0.json [new file with mode: 0644]
juju/client/schemas-juju-2.0.1.json [new file with mode: 0644]
juju/client/schemas-juju-2.0.2.json [new file with mode: 0644]
juju/client/schemas-juju-2.0.3.json [new file with mode: 0644]
juju/client/schemas-juju-2.1.0.json [new file with mode: 0644]
juju/client/schemas-juju-2.1.1.json [new file with mode: 0644]
juju/client/schemas-juju-2.1.2.json [new file with mode: 0644]
juju/client/schemas-juju-2.2-alpha1.json [new file with mode: 0644]
juju/client/schemas-juju-2.2-beta1.json [new file with mode: 0644]
juju/client/schemas-juju-2.2-beta2.json [new file with mode: 0644]
juju/client/schemas-juju-2.2-rc1.json [new file with mode: 0644]
juju/client/schemas-juju-2.3-alpha1.json [new file with mode: 0644]
juju/client/schemas-juju-latest.json [new symlink]
juju/cloud.py [new file with mode: 0644]
juju/constraints.py [new file with mode: 0644]
juju/controller.py [new file with mode: 0644]
juju/credential.py [new file with mode: 0644]
juju/delta.py [new file with mode: 0644]
juju/errors.py [new file with mode: 0644]
juju/exceptions.py [new file with mode: 0644]
juju/juju.py [new file with mode: 0644]
juju/loop.py [new file with mode: 0644]
juju/machine.py [new file with mode: 0644]
juju/model.py [new file with mode: 0644]
juju/placement.py [new file with mode: 0644]
juju/relation.py [new file with mode: 0644]
juju/tag.py [new file with mode: 0644]
juju/unit.py [new file with mode: 0644]
juju/utils.py [new file with mode: 0644]
scripts/gendoc [new file with mode: 0755]
setup.py [new file with mode: 0644]
tests/__init__.py [new file with mode: 0644]
tests/base.py [new file with mode: 0644]
tests/bundle/bundle.yaml [new file with mode: 0644]
tests/charm/metadata.yaml [new file with mode: 0644]
tests/integration/__init__.py [new file with mode: 0644]
tests/integration/bundle/bundle.yaml [new file with mode: 0644]
tests/integration/charm/metadata.yaml [new file with mode: 0644]
tests/integration/test_application.py [new file with mode: 0644]
tests/integration/test_client.py [new file with mode: 0644]
tests/integration/test_connection.py [new file with mode: 0644]
tests/integration/test_controller.py [new file with mode: 0644]
tests/integration/test_errors.py [new file with mode: 0644]
tests/integration/test_machine.py [new file with mode: 0644]
tests/integration/test_model.py [new file with mode: 0644]
tests/integration/test_unit.py [new file with mode: 0644]
tests/unit/__init__.py [new file with mode: 0644]
tests/unit/test_client.py [new file with mode: 0644]
tests/unit/test_connection.py [new file with mode: 0644]
tests/unit/test_constraints.py [new file with mode: 0644]
tests/unit/test_loop.py [new file with mode: 0644]
tests/unit/test_model.py [new file with mode: 0644]
tests/unit/test_overrides.py [new file with mode: 0644]
tests/unit/test_placement.py [new file with mode: 0644]
tox.ini [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..866a785
--- /dev/null
@@ -0,0 +1,12 @@
+*.sw[mnop]
+.venv/
+*.pyc
+*.py~
+docs/_build/
+__pycache__/
+.tox/
+*.egg-info/
+.cache/
+.\#*
+dist/
+dev/
diff --git a/.travis.yml b/.travis.yml
new file mode 100644 (file)
index 0000000..0a57c38
--- /dev/null
@@ -0,0 +1,23 @@
+dist: trusty
+sudo: required
+language: python
+python:
+  - "3.5"
+before_install:
+  - sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable -y
+  - 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
+env:
+  - SNAP_CMD="sudo snap install juju --classic --stable"
+  - SNAP_CMD="sudo snap install juju --classic --edge"
+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
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
new file mode 100644 (file)
index 0000000..3895eaa
--- /dev/null
@@ -0,0 +1,4 @@
+Benjamin Saller
+Tim Van Steenburgh
+Cory Johns
+Pete VanderGiessen
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..8dada3e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   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.
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644 (file)
index 0000000..c14d3fc
--- /dev/null
@@ -0,0 +1,5 @@
+include *.py CONTRIBUTORS LICENSE README.rst VERSION
+recursive-include juju *.py
+recursive-include examples *.py
+recursive-include docs *.rst
+exclude Makefile
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..2e59306
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,40 @@
+BIN := .tox/py35/bin
+PY := $(BIN)/python3.5
+PIP := $(BIN)/pip
+SCHEMAGEN := $(shell which schemagen)
+VERSION=$(shell cat VERSION)
+
+clean:
+       find . -name __pycache__ -type d -exec rm -r {} +
+       find . -name *.pyc -delete
+       rm -rf .tox
+       rm -rf docs/_build/
+
+.tox:
+       tox -r --notest
+
+client:
+ifndef SCHEMAGEN
+       $(error "schemagen is not available, please install from https://github.com/juju/schemagen")
+endif
+       $(PY) -m juju.client.facade -s "juju/client/schemas*" -o juju/client/
+
+test:
+       tox
+
+docs: .tox
+       $(PIP) install -r docs/requirements.txt
+       rm -rf docs/_build/
+       $(BIN)/sphinx-build -b html docs/  docs/_build/
+       cd docs/_build/ && zip -r docs.zip *
+
+release:
+       git remote | xargs -L1 git fetch --tags
+       $(PY) setup.py sdist upload
+       git tag ${VERSION}
+       git remote | xargs -L1 git push --tags
+
+upload: release
+
+
+.PHONY: clean client test docs upload release
diff --git a/README.rst b/README.rst
new file mode 120000 (symlink)
index 0000000..c750ce5
--- /dev/null
@@ -0,0 +1 @@
+docs/readme.rst
\ No newline at end of file
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..94fc342
--- /dev/null
+++ b/TODO
@@ -0,0 +1,5 @@
+TODO
+====
+
+- Add a LogWatcher coroutine that yields from debug-log api
+- Add a way to exit the event loop when a Model matches a bundle yaml
diff --git a/VERSION b/VERSION
new file mode 100644 (file)
index 0000000..a918a2a
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.6.0
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644 (file)
index 0000000..2869eb4
--- /dev/null
@@ -0,0 +1,230 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# User-friendly check for sphinx-build
+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
+       $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don\'t have Sphinx installed, grab it from http://sphinx-doc.org/)
+endif
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help
+help:
+       @echo "Please use \`make <target>' where <target> is one of"
+       @echo "  html       to make standalone HTML files"
+       @echo "  dirhtml    to make HTML files named index.html in directories"
+       @echo "  singlehtml to make a single large HTML file"
+       @echo "  pickle     to make pickle files"
+       @echo "  json       to make JSON files"
+       @echo "  htmlhelp   to make HTML files and a HTML help project"
+       @echo "  qthelp     to make HTML files and a qthelp project"
+       @echo "  applehelp  to make an Apple Help Book"
+       @echo "  devhelp    to make HTML files and a Devhelp project"
+       @echo "  epub       to make an epub"
+       @echo "  epub3      to make an epub3"
+       @echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+       @echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+       @echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
+       @echo "  text       to make text files"
+       @echo "  man        to make manual pages"
+       @echo "  texinfo    to make Texinfo files"
+       @echo "  info       to make Texinfo files and run them through makeinfo"
+       @echo "  gettext    to make PO message catalogs"
+       @echo "  changes    to make an overview of all changed/added/deprecated items"
+       @echo "  xml        to make Docutils-native XML files"
+       @echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
+       @echo "  linkcheck  to check all external links for integrity"
+       @echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+       @echo "  coverage   to run coverage check of the documentation (if enabled)"
+       @echo "  dummy      to check syntax errors of document sources"
+
+.PHONY: clean
+clean:
+       rm -rf $(BUILDDIR)/*
+
+.PHONY: html
+html:
+       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+.PHONY: dirhtml
+dirhtml:
+       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+.PHONY: singlehtml
+singlehtml:
+       $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+       @echo
+       @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+.PHONY: pickle
+pickle:
+       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+       @echo
+       @echo "Build finished; now you can process the pickle files."
+
+.PHONY: json
+json:
+       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+       @echo
+       @echo "Build finished; now you can process the JSON files."
+
+.PHONY: htmlhelp
+htmlhelp:
+       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+       @echo
+       @echo "Build finished; now you can run HTML Help Workshop with the" \
+             ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+.PHONY: qthelp
+qthelp:
+       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+       @echo
+       @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+             ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+       @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/libjuju.qhcp"
+       @echo "To view the help file:"
+       @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/libjuju.qhc"
+
+.PHONY: applehelp
+applehelp:
+       $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
+       @echo
+       @echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
+       @echo "N.B. You won't be able to view it unless you put it in" \
+             "~/Library/Documentation/Help or install it in your application" \
+             "bundle."
+
+.PHONY: devhelp
+devhelp:
+       $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+       @echo
+       @echo "Build finished."
+       @echo "To view the help file:"
+       @echo "# mkdir -p $$HOME/.local/share/devhelp/libjuju"
+       @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/libjuju"
+       @echo "# devhelp"
+
+.PHONY: epub
+epub:
+       $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+       @echo
+       @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+.PHONY: epub3
+epub3:
+       $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
+       @echo
+       @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
+
+.PHONY: latex
+latex:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo
+       @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+       @echo "Run \`make' in that directory to run these through (pdf)latex" \
+             "(use \`make latexpdf' here to do that automatically)."
+
+.PHONY: latexpdf
+latexpdf:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through pdflatex..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+.PHONY: latexpdfja
+latexpdfja:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through platex and dvipdfmx..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+.PHONY: text
+text:
+       $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+       @echo
+       @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+.PHONY: man
+man:
+       $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+       @echo
+       @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+.PHONY: texinfo
+texinfo:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo
+       @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+       @echo "Run \`make' in that directory to run these through makeinfo" \
+             "(use \`make info' here to do that automatically)."
+
+.PHONY: info
+info:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo "Running Texinfo files through makeinfo..."
+       make -C $(BUILDDIR)/texinfo info
+       @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+.PHONY: gettext
+gettext:
+       $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+       @echo
+       @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+.PHONY: changes
+changes:
+       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+       @echo
+       @echo "The overview file is in $(BUILDDIR)/changes."
+
+.PHONY: linkcheck
+linkcheck:
+       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+       @echo
+       @echo "Link check complete; look for any errors in the above output " \
+             "or in $(BUILDDIR)/linkcheck/output.txt."
+
+.PHONY: doctest
+doctest:
+       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+       @echo "Testing of doctests in the sources finished, look at the " \
+             "results in $(BUILDDIR)/doctest/output.txt."
+
+.PHONY: coverage
+coverage:
+       $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
+       @echo "Testing of coverage in the sources finished, look at the " \
+             "results in $(BUILDDIR)/coverage/python.txt."
+
+.PHONY: xml
+xml:
+       $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
+       @echo
+       @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+
+.PHONY: pseudoxml
+pseudoxml:
+       $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
+       @echo
+       @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
+
+.PHONY: dummy
+dummy:
+       $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
+       @echo
+       @echo "Build finished. Dummy builder generates no files."
diff --git a/docs/_extensions/automembersummary.py b/docs/_extensions/automembersummary.py
new file mode 100644 (file)
index 0000000..898da62
--- /dev/null
@@ -0,0 +1,114 @@
+# Copyright 2014-2015 Canonical Limited.
+#
+# This file is part of charm-helpers.
+#
+# 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.
+#
+# 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/>.
+
+
+import importlib
+import inspect
+import textwrap
+
+from docutils import nodes
+from docutils.statemachine import ViewList
+from sphinx.errors import SphinxError
+from sphinx.util.compat import Directive
+from sphinx.util.nodes import nested_parse_with_titles
+
+
+class AutoMemberSummary(Directive):
+    required_arguments = 1
+
+    def run(self):
+        module_name = self.arguments[0]
+
+        try:
+            module = importlib.import_module(module_name)
+        except ImportError:
+            raise SphinxError("Unable to generate reference docs for %s, "
+                              "could not import" % (module_name))
+
+        divider = '+{:-<80}+'.format('')
+        row = '| {:<78} |'.format
+        lines = []
+        for member_name, member in inspect.getmembers(module):
+            if not self._filter(module_name, member_name, member):
+                continue
+            summary = textwrap.wrap(self._get_summary(member), 78) or ['']
+            link = '`{} <#{}>`_'.format(member_name,
+                                        '.'.join([module_name,
+                                                  member_name]))
+            methods = ['* `{} <#{}>`_'.format(n,
+                                              '.'.join([module_name,
+                                                        member_name,
+                                                        n]))
+                       for n, m in inspect.getmembers(member)
+                       if not n.startswith('_') and inspect.isfunction(m)]
+
+            lines.append(divider)
+            lines.append(row(link))
+            lines.append(divider)
+            for line in summary:
+                lines.append(row(line))
+            if methods:
+                lines.append(row(''))
+                lines.append(row('Methods:'))
+                lines.append(row(''))
+                for i, method in enumerate(methods):
+                    lines.append(row(method))
+        lines.append(divider)
+        content = '\n'.join(lines)
+
+        result = self._parse(content, '<automembersummary>')
+        return result
+
+    def _get_summary(self, member):
+        doc = (member.__doc__ or '').splitlines()
+
+        # strip any leading blank lines
+        while doc and not doc[0].strip():
+            doc.pop(0)
+
+        # strip anything after the first blank line
+        for i, piece in enumerate(doc):
+            if not piece.strip():
+                doc = doc[:i]
+                break
+
+        return " ".join(doc).strip()
+
+    def _filter(self, module_name, member_name, member):
+        if member_name.startswith('_'):
+            return False
+        if hasattr(member, '__module__'):
+            # skip imported classes & functions
+            return member.__module__.startswith(module_name)
+        elif hasattr(member, '__name__'):
+            # skip imported modules
+            return member.__name__.startswith(module_name)
+        else:
+            return False  # skip instances
+        return True
+
+    def _parse(self, rst_text, annotation):
+        result = ViewList()
+        for line in rst_text.split("\n"):
+            result.append(line, annotation)
+        node = nodes.paragraph()
+        node.document = self.state.document
+        nested_parse_with_titles(self.state, result, node)
+        return node.children
+
+
+def setup(app):
+    app.add_directive('automembersummary', AutoMemberSummary)
diff --git a/docs/_static/custom.css b/docs/_static/custom.css
new file mode 100644 (file)
index 0000000..333cd74
--- /dev/null
@@ -0,0 +1,5 @@
+.wy-table-responsive table td,
+.wy-table-responsive table th
+{
+    white-space: normal !important;
+}
diff --git a/docs/api/juju.action.rst b/docs/api/juju.action.rst
new file mode 100644 (file)
index 0000000..cc86af2
--- /dev/null
@@ -0,0 +1,13 @@
+juju.action
+===========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.action
+
+.. rubric:: Reference
+
+.. automodule:: juju.action
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.annotation.rst b/docs/api/juju.annotation.rst
new file mode 100644 (file)
index 0000000..ec31344
--- /dev/null
@@ -0,0 +1,13 @@
+juju.annotation
+===============
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.annotation
+
+.. rubric:: Reference
+
+.. automodule:: juju.annotation
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.application.rst b/docs/api/juju.application.rst
new file mode 100644 (file)
index 0000000..dba9177
--- /dev/null
@@ -0,0 +1,13 @@
+juju.application
+================
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.application
+
+.. rubric:: Reference
+
+.. automodule:: juju.application
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.client.rst b/docs/api/juju.client.rst
new file mode 100644 (file)
index 0000000..6a699c0
--- /dev/null
@@ -0,0 +1,120 @@
+juju\.client package
+====================
+
+These packages are for internal use in communicating with the low-level
+API.  You should use the object oriented API instead.  They are documented
+here for developer reference.
+
+
+juju\.client\.client module
+---------------------------
+
+.. automodule:: juju.client.client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._definitions module
+---------------------------------
+
+.. automodule:: juju.client._definitions
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._client module
+----------------------------
+
+.. automodule:: juju.client._client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._client1 module
+-----------------------------
+
+.. automodule:: juju.client._client1
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._client2 module
+-----------------------------
+
+.. automodule:: juju.client._client2
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._client3 module
+-----------------------------
+
+.. automodule:: juju.client._client3
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._client4 module
+-----------------------------
+
+.. automodule:: juju.client._client4
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\._client5 module
+-----------------------------
+
+.. automodule:: juju.client._client5
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\.codegen module
+----------------------------
+
+.. automodule:: juju.client.codegen
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\.connection module
+-------------------------------
+
+.. automodule:: juju.client.connection
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\.facade module
+---------------------------
+
+.. automodule:: juju.client.facade
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\.overrides module
+------------------------------
+
+.. automodule:: juju.client.overrides
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+juju\.client\.runner module
+---------------------------
+
+.. automodule:: juju.client.runner
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: juju.client
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.cloud.rst b/docs/api/juju.cloud.rst
new file mode 100644 (file)
index 0000000..39021e0
--- /dev/null
@@ -0,0 +1,13 @@
+juju.cloud
+==========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.cloud
+
+.. rubric:: Reference
+
+.. automodule:: juju.cloud
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.constraints.rst b/docs/api/juju.constraints.rst
new file mode 100644 (file)
index 0000000..5fcbd31
--- /dev/null
@@ -0,0 +1,13 @@
+juju.constraints
+================
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.constraints
+
+.. rubric:: Reference
+
+.. automodule:: juju.constraints
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.controller.rst b/docs/api/juju.controller.rst
new file mode 100644 (file)
index 0000000..4484fd5
--- /dev/null
@@ -0,0 +1,13 @@
+juju.controller
+===============
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.controller
+
+.. rubric:: Reference
+
+.. automodule:: juju.controller
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.delta.rst b/docs/api/juju.delta.rst
new file mode 100644 (file)
index 0000000..9924f8c
--- /dev/null
@@ -0,0 +1,13 @@
+juju.delta
+==========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.delta
+
+.. rubric:: Reference
+
+.. automodule:: juju.delta
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.errors.rst b/docs/api/juju.errors.rst
new file mode 100644 (file)
index 0000000..7c77574
--- /dev/null
@@ -0,0 +1,13 @@
+juju.errors
+===========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.errors
+
+.. rubric:: Reference
+
+.. automodule:: juju.errors
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.exceptions.rst b/docs/api/juju.exceptions.rst
new file mode 100644 (file)
index 0000000..85be2fb
--- /dev/null
@@ -0,0 +1,13 @@
+juju.exceptions
+===============
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.exceptions
+
+.. rubric:: Reference
+
+.. automodule:: juju.exceptions
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.juju.rst b/docs/api/juju.juju.rst
new file mode 100644 (file)
index 0000000..68698c3
--- /dev/null
@@ -0,0 +1,13 @@
+juju.juju
+=========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.juju
+
+.. rubric:: Reference
+
+.. automodule:: juju.juju
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.loop.rst b/docs/api/juju.loop.rst
new file mode 100644 (file)
index 0000000..4f175e9
--- /dev/null
@@ -0,0 +1,13 @@
+juju.loop
+=========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.loop
+
+.. rubric:: Reference
+
+.. automodule:: juju.loop
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.machine.rst b/docs/api/juju.machine.rst
new file mode 100644 (file)
index 0000000..edb5b6c
--- /dev/null
@@ -0,0 +1,13 @@
+juju.machine
+============
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.machine
+
+.. rubric:: Reference
+
+.. automodule:: juju.machine
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.model.rst b/docs/api/juju.model.rst
new file mode 100644 (file)
index 0000000..dfb735d
--- /dev/null
@@ -0,0 +1,13 @@
+juju.model
+==========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.model
+
+.. rubric:: Reference
+
+.. automodule:: juju.model
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.placement.rst b/docs/api/juju.placement.rst
new file mode 100644 (file)
index 0000000..67cde0c
--- /dev/null
@@ -0,0 +1,13 @@
+juju.placement
+==============
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.placement
+
+.. rubric:: Reference
+
+.. automodule:: juju.placement
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.relation.rst b/docs/api/juju.relation.rst
new file mode 100644 (file)
index 0000000..90e3130
--- /dev/null
@@ -0,0 +1,13 @@
+juju.relation
+=============
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.relation
+
+.. rubric:: Reference
+
+.. automodule:: juju.relation
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.tag.rst b/docs/api/juju.tag.rst
new file mode 100644 (file)
index 0000000..9b3a29f
--- /dev/null
@@ -0,0 +1,13 @@
+juju.tag
+========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.tag
+
+.. rubric:: Reference
+
+.. automodule:: juju.tag
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.unit.rst b/docs/api/juju.unit.rst
new file mode 100644 (file)
index 0000000..4a7d167
--- /dev/null
@@ -0,0 +1,13 @@
+juju.unit
+=========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.unit
+
+.. rubric:: Reference
+
+.. automodule:: juju.unit
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/juju.utils.rst b/docs/api/juju.utils.rst
new file mode 100644 (file)
index 0000000..9220a1b
--- /dev/null
@@ -0,0 +1,13 @@
+juju.utils
+==========
+
+.. rubric:: Summary
+
+.. automembersummary:: juju.utils
+
+.. rubric:: Reference
+
+.. automodule:: juju.utils
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/api/modules.rst b/docs/api/modules.rst
new file mode 100644 (file)
index 0000000..bf06f26
--- /dev/null
@@ -0,0 +1,31 @@
+juju
+====
+
+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`.
+
+.. toctree::
+
+    juju.action
+    juju.annotation
+    juju.application
+    juju.cloud
+    juju.constraints
+    juju.controller
+    juju.delta
+    juju.errors
+    juju.exceptions
+    juju.juju
+    juju.loop
+    juju.machine
+    juju.model
+    juju.placement
+    juju.relation
+    juju.tag
+    juju.unit
+    juju.utils
+
+.. automodule:: juju
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/docs/changelog.rst b/docs/changelog.rst
new file mode 100644 (file)
index 0000000..9da0cdc
--- /dev/null
@@ -0,0 +1,130 @@
+Change Log
+----------
+
+0.6.0
+^^^^^
+Thu June 29 2017
+
+* Implement scp functionality (#149)
+* Add Unit.public_address property (#153)
+* Adds support for getting/setting config on a model (#152)
+
+0.5.3
+^^^^^
+Thu June 22 2017
+
+* Improve handling of closed connections (#148)
+* Configurable and larger max message size (#146)
+
+0.5.2
+^^^^^
+Wed June 14 2017
+
+* Fix deploying non-stable channels and explicit revs (#144)
+
+0.5.1
+^^^^^
+Tue June 13 2017
+
+* Update schema for Juju 2.3 alpha1 (#142)
+* Improve API doc navigation and coverage (#141)
+* Add type info to Model.add_machine docs (#138)
+
+0.5.0
+^^^^^
+Thu June 8 2017
+
+* Add machine status properties (#133)
+* Add model context manager (#128)
+* Implement Application.upgrade_charm method (#132)
+
+0.4.3
+^^^^^
+Thu June 1 2017
+
+* Accept new / unknown API fields gracefully (#131)
+* Add support for new agent-version field in ModelInfo (#131)
+* Replace pip with pip3 in install instructions (#129)
+* Strip local:-prefix from local charm urls (#121)
+
+0.4.2
+^^^^^
+Wed May 10 2017
+
+* Support (and prefer) per-controller macaroon files (#125)
+
+0.4.1
+^^^^^
+Wed Apr 27 2017
+
+* Remove VERSION_MAP and rely on facade list from controller (#118)
+* Refactor connection task management to avoid cancels (#117)
+* Refactored login code to better handle redirects (#116)
+
+0.4.0
+^^^^^
+Wed Apr 19 2017
+
+* Feature/api version support (#109)
+* Expanding controller.py with basic user functions, get_models and
+  destroy (#89)
+* Added Monitor class to Connection. (#105)
+* Support placement lists (#103)
+* Include resources from store when deploying (#102)
+* Allow underscore to dash translation when accessing model
+  attributes (#101)
+* Added controller to ssh fix. (#100)
+* Regen schema to pick up missing APIs
+* Improve error handling
+* Fix issue where we do not check to make sure that we are receiving the
+  correct response.
+* Retry calls to charmstore and increase timeout to 5s
+* Make connect_model and deploy a bit more friendly
+* Fix model name not including user
+* Implement Model.get_status
+* Add integration tests.
+
+0.3.0
+^^^^^
+Mon Feb 27 2017
+
+* Fix docstrings for placement directives.
+* Implement Model.add_machine()
+* Bug fix - "to" parameter to Model.deploy() was broken
+* Add docs and examples for adding machines and containers and deploying
+  charms to them.
+* Make Machine.destroy() block the current coroutine, returning only after
+  the machine is actually removed from the remote model. This is more
+  consistent with the way the other apis work (e.g. Model.deploy(),
+  Application.add_unit(), etc).
+* Raise NotImplementedError in all unimplemented method stubs instead of
+  silently passing.
+
+0.2.0
+^^^^^
+Thu Feb 16 2017
+
+* Add default ssh key to newly created model.
+* Add loop helpers and simplify examples/deploy.py
+* Add support for deploying local charms, and bundles containing local charm paths.
+* Add ability to get cloud name for controller.
+* Bug fix - fix wrong api used in Model.destroy_unit()
+* Add error detection in bundle deploy.
+
+0.1.2
+^^^^^
+Thu Dec 22 2016
+
+* Bug fix - Include docs in package
+
+0.1.1
+^^^^^
+Thu Dec 22 2016
+
+* Bug fix - Include VERSION file in package
+
+0.1.0
+^^^^^
+Wed Dec 21 2016
+
+* Initial Release
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644 (file)
index 0000000..a95ec04
--- /dev/null
@@ -0,0 +1,303 @@
+# -*- coding: utf-8 -*-
+#
+# libjuju documentation build configuration file, created by
+# sphinx-quickstart on Thu May 19 11:21:38 2016.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+
+from pathlib import Path
+
+here = Path(__file__).absolute().parent
+version = (here.parent / 'VERSION').read_text().strip()
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.insert(0, os.path.abspath('..'))
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+sys.path.append(os.path.abspath('_extensions/'))
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.autosummary',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx.ext.viewcode',
+    'sphinxcontrib.asyncio',
+    'automembersummary',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'juju'
+copyright = u'2016, Canonical Ltd.'
+author = u'Canonical'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = version
+# The full version, including alpha/beta/rc tags.
+release = version
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This patterns also effect to html_static_path and html_extra_path
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'sphinx_rtd_theme'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.
+# "<project> v<release> documentation" by default.
+#html_title = u'libjuju v0.0.0'
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (relative to this directory) to use as a favicon of
+# the docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not None, a 'Last updated on:' timestamp is inserted at every page
+# bottom, using the given strftime format.
+# The empty string is equivalent to '%b %d, %Y'.
+#html_last_updated_fmt = None
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh'
+#html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# 'ja' uses this config value.
+# 'zh' user can custom change `jieba` dictionary path.
+#html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+#html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'libjujudoc'
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+
+# Latex figure (float) alignment
+#'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+    (master_doc, 'libjuju.tex', u'libjuju Documentation',
+     u'Canonical', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'libjuju', u'libjuju Documentation',
+     [author], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+    (master_doc, 'libjuju', u'libjuju Documentation',
+     author, 'libjuju', 'One line description of project.',
+     'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
+
+def setup(app):
+    app.add_stylesheet('custom.css')
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644 (file)
index 0000000..b4b075f
--- /dev/null
@@ -0,0 +1,32 @@
+.. libjuju documentation master file, created by
+   sphinx-quickstart on Thu May 19 11:21:38 2016.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+
+.. include:: readme.rst
+
+
+Table of Contents
+-----------------
+
+.. toctree::
+   :glob:
+   :maxdepth: 3
+
+   narrative/index
+   API Docs <api/modules>
+   Internal API Docs <api/juju.client>
+   upstream-updates/index
+
+
+.. include:: changelog.rst
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/docs/narrative/application.rst b/docs/narrative/application.rst
new file mode 100644 (file)
index 0000000..1565e5f
--- /dev/null
@@ -0,0 +1,136 @@
+Applications
+============
+For api docs, see :class:`juju.application.Application`.
+
+
+Deploying
+---------
+To deploy a new application, connect a model and then call its
+:meth:`~juju.model.Model.deploy` method. An
+:class:`~juju.application.Application` instance is returned.
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+  await model.connect_current()
+
+  mysql_app = await model.deploy(
+      # If a revision number is not included in the charm url,
+      # the latest revision from the Charm Store will be used.
+      'cs:mysql-55',
+      application_name='mysql',
+      series='trusty',
+      channel='stable',
+      config={
+          'tuning-level': 'safest',
+      },
+      constraints={
+          'mem': 256 * MB,
+      },
+  )
+
+
+Deploying a Local Charm
+-----------------------
+To deploy a local charm, pass the charm directory path to
+`Model.deploy()`.
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+  await model.connect_current()
+
+  # Deploy a local charm using a path to the charm directory
+  await model.deploy(
+      '/home/tvansteenburgh/src/charms/ubuntu',
+      application_name='ubuntu',
+      series='trusty',
+  )
+
+
+Adding Units
+------------
+To add units to a deployed application, use the
+:meth:`juju.application.Application.add_units` method. A list of the newly
+added units (:class:`~juju.unit.Unit` objects) is returned.
+
+.. code:: python
+
+  ubuntu_app = await model.deploy(
+      'ubuntu',
+      application_name='ubuntu',
+      series='trusty',
+      channel='stable',
+  )
+
+  unit_a, unit_b = await ubuntu_app.add_units(count=2)
+
+
+Updating Config and Constraints
+-------------------------------
+Example showing how to update configuration and constraints on a deployed
+application. The `mysql_app` object is an instance of
+:class:`juju.application.Application`.
+
+.. code:: python
+
+  MB = 1024 * 1024
+
+  # Update and check app config
+  await mysql_app.set_config({'tuning-level': 'fast'})
+  config = await mysql_app.get_config()
+
+  assert(config['tuning-level']['value'] == 'fast')
+
+  # update and check app constraints
+  await mysql_app.set_constraints({'mem': 512 * MB})
+  constraints = await mysql_app.get_constraints()
+
+  assert(constraints['mem'] == 512 * MB)
+
+
+Adding and Removing Relations
+-----------------------------
+The :meth:`juju.application.Application.add_relation` method returns a
+:class:`juju.relation.Relation` instance.
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+  await model.connect_current()
+
+  # Deploy mysql-master application
+  mysql_master = await model.deploy(
+      'cs:mysql-55',
+      application_name='mysql-master',
+      series='trusty',
+      channel='stable',
+  )
+
+  # Deploy mysql-slave application
+  mysql_slave = await model.deploy(
+      'cs:mysql-55',
+      application_name='mysql-slave',
+      series='trusty',
+      channel='stable',
+  )
+
+  # Add the master-slave relation
+  relation = await mysql_master.add_relation(
+      # Name of the relation on the local (mysql-master) side
+      'master',
+      # Name of the app:relation on the remote side
+      'mysql-slave:slave',
+  )
+
+  # Remove the relation
+  await mysql_master.remove_relation(
+      'master',
+      'mysql-slave:slave',
+  )
diff --git a/docs/narrative/controller.rst b/docs/narrative/controller.rst
new file mode 100644 (file)
index 0000000..2da0e7b
--- /dev/null
@@ -0,0 +1,100 @@
+Controllers
+===========
+A Juju controller provides websocket endpoints for itself and each of its
+models. In order to do anything useful, the juju lib must connect to one of
+these endpoints.
+
+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`).
+
+For api docs, see :class:`juju.controller.Controller`.
+
+
+Connecting to the Current Controller
+------------------------------------
+Connect to the currently active Juju controller (the one returned by
+`juju switch`). This only works if you have the Juju CLI client installed.
+
+.. code:: python
+
+  from juju.controller import Controller
+
+  controller = Controller()
+  await controller.connect_current()
+
+
+Connecting to a Named Controller
+--------------------------------
+Connect to a controller by name.
+
+.. code:: python
+
+  from juju.controller import Controller
+
+  controller = Controller()
+  await controller.connect_controller('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.
+
+.. code:: python
+
+  from juju.controller import Controller
+
+  controller = Controller()
+
+  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.
+
+.. 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,
+  )
diff --git a/docs/narrative/index.rst b/docs/narrative/index.rst
new file mode 100644 (file)
index 0000000..eb77e4c
--- /dev/null
@@ -0,0 +1,11 @@
+Narrative Docs
+==============
+
+.. toctree::
+   :glob:
+   :maxdepth: 2
+
+   controller
+   model
+   application
+   unit
diff --git a/docs/narrative/model.rst b/docs/narrative/model.rst
new file mode 100644 (file)
index 0000000..57dbc81
--- /dev/null
@@ -0,0 +1,306 @@
+Models
+======
+A Juju controller provides websocket endpoints for each of its
+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`.
+
+
+Connecting to the Current Model
+-------------------------------
+Connect to the currently active Juju model (the one returned by
+`juju switch`). This only works if you have the Juju CLI client installed.
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+  await model.connect_current()
+
+
+Connecting to a Named Model
+---------------------------
+Connect to a model by name, using the same format as that returned from the
+`juju switch` command. The accepted format is '[controller:][user/]model'.
+This only works if you have the Juju CLI client installed.
+
+.. 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')
+
+
+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.
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+
+  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,
+  )
+
+
+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.
+
+.. 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.
+
+.. 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,
+  )
+
+
+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.
+
+.. code:: python
+
+  from juju.controller import Controller
+
+  controller = Controller()
+  await controller.connect_current()
+
+  # Create our new model
+  model = await controller.add_model(
+      'mymodel',  # name of your new model
+  )
+
+  # Do stuff with our model...
+
+  # Destroy the model
+  await model.disconnect()
+  await controller.destroy_model(model.info.uuid)
+  model = None
+
+
+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
+can be used to deploy a charm to a specific machine or container.
+
+.. code:: python
+
+  from juju.model import Model
+
+  MB = 1
+  GB = 1024
+
+
+  model = Model()
+  await model.connect_current()
+
+  # add a new default machine
+  machine1 = await model.add_machine()
+
+  # add a machine with constraints, disks, and series specified
+  machine2 = await model.add_machine(
+      constraints={
+          'mem': 256 * MB,
+      },
+      disks=[{
+          'pool': 'rootfs',
+          'size': 10 * GB,
+          'count': 1,
+      }],
+      series='xenial',
+  )
+
+  # add a lxd container to machine2
+  machine3 = await model.add_machine(
+      'lxd:{}'.format(machine2.id))
+
+  # deploy charm to the lxd container
+  application = await model.deploy(
+      'ubuntu-10',
+      application_name='ubuntu',
+      series='xenial',
+      channel='stable',
+      to=machine3.id
+  )
+
+  # remove application
+  await application.remove()
+
+  # destroy machines - note that machine3 must be destroyed before machine2
+  # since it's a container on machine2
+  await machine3.destroy(force=True)
+  await machine2.destroy(force=True)
+  await machine1.destroy(force=True)
+
+
+Reacting to Changes in a Model
+------------------------------
+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.
+
+.. code:: python
+
+  from juju.model import Model, ModelObserver
+
+  class MyModelObserver(ModelObserver):
+      async def on_change(self, delta, old, new, model):
+          # The raw change data (dict) from the websocket.
+          print(delta.data)
+
+          # The entity type (str) affected by this change.
+          # One of ('action', 'application', 'annotation', 'machine',
+          # 'unit', 'relation')
+          print(delta.entity)
+
+          # The type (str) of change.
+          # One of ('add', 'change', 'remove')
+          print(delta.type)
+
+          # The 'old' and 'new' parameters are juju.model.ModelEntity
+          # instances which represent an entity in the model both before
+          # this change was applied (old) and after (new).
+
+          # If an entity is being added to the model, the 'old' param
+          # will be None.
+          if delta.type == 'add':
+              assert(old is None)
+
+          # If an entity is being removed from the model, the 'new' param
+          # will be None.
+          if delta.type == 'remove':
+              assert(new is None)
+
+          # The 'old' and 'new' parameters, when not None, will be instances
+          # of a juju.model.ModelEntity subclass. The type of the subclass
+          # depends on the value of 'delta.entity', for example:
+          #
+          # delta.entity     type
+          # ------------     ----
+          # 'action'      -> juju.action.Action
+          # 'application' -> juju.application.Application
+          # 'annotation'  -> juju.annotation.Annotation
+          # 'machine'     -> juju.machine.Machine
+          # 'unit'        -> juju.unit.Unit
+          # 'relation'    -> juju.relation.Relation
+
+          # Finally, the 'model' parameter is a reference to the
+          # juju.model.Model instance to which this observer is attached.
+          print(id(model))
+
+
+  model = Model()
+  await model.connect_current()
+
+  model.add_observer(MyModelObserver())
+
+
+Every change in the model will result in a call to the `on_change()`
+method of your observer(s).
+
+To target your code more precisely, define method names that correspond
+to the entity and type of change that you wish to handle.
+
+.. code:: python
+
+  from juju.model import Model, ModelObserver
+
+  class MyModelObserver(ModelObserver):
+      async def on_application_change(self, delta, old, new, model):
+          # Both 'old' and 'new' params will be instances of
+          # juju.application.Application
+          pass
+
+      async def on_unit_remove(self, delta, old, new, model):
+          # Since a unit is being removed, the 'new' param will always
+          # be None in this handler. The 'old' param will be an instance
+          # of juju.unit.Unit - the state of the unit before it was removed.
+          pass
+
+      async def on_machine_add(self, delta, old, new, model):
+          # Since a machine is being added, the 'old' param will always be
+          # None in this handler. The 'new' param will be an instance of
+          # juju.machine.Machine.
+          pass
+
+      async def on_change(self, delta, old, new, model):
+          # The catch-all handler - will be called whenever a more
+          # specific handler method is not defined.
+
+
+Any :class:`juju.model.ModelEntity` object can be observed directly by
+registering callbacks on the object itself.
+
+.. code:: python
+
+  import logging
+
+  async def on_app_change(delta, old, new, model):
+      logging.debug('App changed: %r', new)
+
+  async def on_app_remove(delta, old, new, model):
+      logging.debug('App removed: %r', old)
+
+  ubuntu_app = await model.deploy(
+      'ubuntu',
+      application_name='ubuntu',
+      series='trusty',
+      channel='stable',
+  )
+  ubuntu_app.on_change(on_app_change)
+  ubuntu_app.on_remove(on_app_remove)
diff --git a/docs/narrative/unit.rst b/docs/narrative/unit.rst
new file mode 100644 (file)
index 0000000..5d6b48d
--- /dev/null
@@ -0,0 +1,65 @@
+Units
+=====
+For api docs, see :class:`juju.unit.Unit`.
+
+
+Running Commands
+----------------
+Run arbitrary commands on a unit with the
+:meth:`juju.unit.Unit.run` method. This method blocks
+the current coroutine until a result is available, and
+returns a :class:`juju.action.Action` instance.
+
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+  await model.connect_current()
+
+  app = await model.deploy(
+      'ubuntu',
+      application_name='ubuntu',
+      series='trusty',
+      channel='stable',
+  )
+
+  for unit in app.units:
+      action = await unit.run('unit-get public-address')
+      print(action.results)
+
+      action = await unit.run('uname -a')
+      print(action.results)
+
+
+Running Actions
+---------------
+Run actions on a unit with the
+:meth:`juju.unit.Unit.run_action` method. This method
+returns a :class:`juju.action.Action` instance immediately. To block until
+the action completes, use the :meth:`juju.action.Action.wait` method, as
+in the example below.
+
+
+.. code:: python
+
+  from juju.model import Model
+
+  model = Model()
+  await model.connect_current()
+
+  app = await model.deploy(
+      'git',
+      application_name='git',
+      series='trusty',
+      channel='stable',
+  )
+
+  for unit in app.units:
+      # run the 'add-repo' action, passing a 'repo' param
+      action = await unit.run_action('add-repo', repo='myrepo')
+      # wait for the action to complete
+      action = await action.wait()
+
+      print(action.results)
diff --git a/docs/readme.rst b/docs/readme.rst
new file mode 100644 (file)
index 0000000..ecfbc5a
--- /dev/null
@@ -0,0 +1,95 @@
+A Python library for Juju
+=========================
+
+Source code: https://github.com/juju/python-libjuju
+
+Bug reports: https://github.com/juju/python-libjuju/issues
+
+Documentation: https://pythonlibjuju.readthedocs.io/en/latest/
+
+
+Requirements
+------------
+
+* Python 3.5+
+* Juju 2.0+
+
+
+Design Notes
+------------
+
+* Asynchronous - uses asyncio and async/await features of python 3.5
+* Websocket-level bindings are programmatically generated (indirectly) from the
+  Juju golang code, ensuring full api coverage
+* Provides an OO layer which encapsulates much of the websocket api and
+  provides familiar nouns and verbs (e.g. Model.deploy(), Application.add_unit(),
+  etc.)
+
+
+Installation
+------------
+
+.. code:: bash
+
+  pip3 install juju
+
+
+Quickstart
+----------
+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.
+
+
+.. code:: python
+
+  #!/usr/bin/python3.5
+
+  import asyncio
+  import logging
+
+  from juju import loop
+  from juju.model import Model
+
+
+  async def deploy():
+      # Create a Model instance. We need to connect our Model to a Juju api
+      # server before we can use it.
+      model = 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',
+      )
+
+      # Disconnect from the api server and cleanup.
+      model.disconnect()
+
+
+  def main():
+      # Set logging level to debug so we can see verbose output from the
+      # juju library.
+      logging.basicConfig(level=logging.DEBUG)
+
+      # Quiet logging from the websocket library. 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)
+
+      # Run the deploy coroutine in an asyncio event loop, using a helper
+      # that abstracts loop creation and teardown.
+      loop.run(deploy())
+
+
+  if __name__ == '__main__':
+      main()
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644 (file)
index 0000000..06377bf
--- /dev/null
@@ -0,0 +1,7 @@
+websockets
+pyyaml
+theblues
+python-dateutil
+sphinx
+sphinxcontrib-asyncio
+sphinx_rtd_theme
diff --git a/docs/upstream-updates/index.rst b/docs/upstream-updates/index.rst
new file mode 100644 (file)
index 0000000..52099e6
--- /dev/null
@@ -0,0 +1,66 @@
+Upstream Updates
+================
+
+Updating the facade and definitions code generated from the schema
+to reflect changes in upstream Juju consists of two steps:
+
+* Creating a new `schemas-juju-<version>.json` file from the Juju code-base
+* Generating the libjuju Python code from that schema
+
+Rarely, you may also have to add or update an override.
+
+
+Creating a Schema File
+----------------------
+
+First, you will need to fetch SchemaGen_ and a copy of the Juju source.
+Once your copy of the Juju source is at the version you want to update to
+(probably the `develop` branch, or a release tag) and you have updated
+and reinstalled SchemaGen to reflect those changes, you just need to send
+the output into a file in the libjuju repository:
+
+.. code:: bash
+
+  schemagen > juju/client/schemas-juju-2.2-rc1.json
+
+The version number you use in the filename should match the upstream
+version of Juju.  You should then also move the `latest` pointer to
+the new file:
+
+.. code:: bash
+
+  rm juju/client/schemas-juju-latest.json
+  ln -s schemas-juju-2.2-rc1.json juju/client/schemas-juju-latest.json
+
+
+Generating the Python Code
+--------------------------
+
+Once you have a new schema file, you can update the Python code
+using the `client` make target:
+
+.. code:: bash
+
+  make client
+
+You should expect to see updates to the `juju/client/_definitions.py` file,
+as well as one or more of the `juju/client/_clientX.py` files, depending on
+which facades were touched.
+
+
+Overrides
+---------
+
+It should be quite rare, but occasionally the generated Python code does
+not capture all of the logic needed to properly parse the output from the API
+or may otherwise need some small amount of tweaking.  This is what the
+`juju/client/overrides.py` file is for.  An example of this is the `Number`
+type, which isn't standard JSON and must be parsed slightly differently.
+
+At the top of that file are two lists, `__all__` and `__patches__`.  The
+former replaces entire class implementations, while the latter patches
+the attributes of the override classes into the matching generated class,
+leaving the rest of the generated class untouched.
+
+
+.. _SchemaGen: https://github.com/juju/schemagen
diff --git a/examples/action.py b/examples/action.py
new file mode 100644 (file)
index 0000000..0f25647
--- /dev/null
@@ -0,0 +1,50 @@
+"""
+This example:
+
+1. Connects to current model and resets it.
+2. Deploys a git unit.
+3. Runs an action against the unit.
+4. Waits for the action results to come back, then exits.
+
+"""
+import asyncio
+import logging
+
+from juju import loop
+from juju.model import Model
+
+
+async def run_action(unit):
+    logging.debug('Running action on unit %s', unit.name)
+
+    # unit.run() returns a juju.action.Action instance
+    action = await unit.run_action('add-repo', repo='myrepo')
+    # wait for the action to complete
+    action = await action.wait()
+
+    logging.debug("Action results: %s", action.results)
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+    await model.reset(force=True)
+
+    app = await model.deploy(
+        'git',
+        application_name='git',
+        series='trusty',
+        channel='stable',
+    )
+
+    for unit in app.units:
+        await run_action(unit)
+
+    await model.disconnect()
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/examples/add_machine.py b/examples/add_machine.py
new file mode 100755 (executable)
index 0000000..8ae2d40
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/env python3.5
+
+"""
+This example:
+
+1. Connects to the current model
+2. Creates two machines and a lxd container
+3. Deploys charm to the lxd container
+
+"""
+import logging
+
+from juju import loop
+from juju.model import Model
+
+MB = 1
+GB = 1024
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+
+    try:
+        # add a new default machine
+        machine1 = await model.add_machine()
+        # add a machine with constraints, disks, and series
+        machine2 = await model.add_machine(
+            constraints={
+                'mem': 256 * MB,
+            },
+            disks=[{
+                'pool': 'rootfs',
+                'size': 10 * GB,
+                'count': 1,
+            }],
+            series='xenial',
+        )
+        # add a lxd container to machine2
+        machine3 = await model.add_machine(
+            'lxd:{}'.format(machine2.id))
+
+        # deploy charm to the lxd container
+        application = await model.deploy(
+            'ubuntu-10',
+            application_name='ubuntu',
+            series='xenial',
+            channel='stable',
+            to=machine3.id
+        )
+
+        await model.block_until(
+            lambda: all(unit.workload_status == 'active'
+                        for unit in application.units))
+
+        await application.remove()
+
+        await machine3.destroy(force=True)
+        await machine2.destroy(force=True)
+        await machine1.destroy(force=True)
+    finally:
+        await model.disconnect()
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+
+    loop.run(main())
diff --git a/examples/add_model.py b/examples/add_model.py
new file mode 100644 (file)
index 0000000..3e46490
--- /dev/null
@@ -0,0 +1,66 @@
+"""
+This example:
+
+1. Creates a model on the current controller
+2. Deploys a charm to it.
+3. Attempts to ssh into the charm
+
+"""
+from juju import loop
+from juju import utils
+from juju.controller import Controller
+import asyncio
+from logging import getLogger
+import uuid
+
+LOG = getLogger(__name__)
+
+
+async def main():
+    controller = Controller()
+    print("Connecting to controller")
+    await controller.connect_current()
+
+    try:
+        model_name = "addmodeltest-{}".format(uuid.uuid4())
+        print("Adding model {}".format(model_name))
+        model = await controller.add_model(model_name)
+
+        print('Deploying ubuntu')
+        application = await model.deploy(
+            'ubuntu-10',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+
+        print('Waiting for active')
+        await asyncio.sleep(10)
+        await model.block_until(
+            lambda: all(unit.workload_status == 'active'
+                        for unit in application.units))
+
+        print("Verifying that we can ssh into the created model")
+        ret = await utils.execute_process(
+            'juju', 'ssh', '-m', model_name, 'ubuntu/0', 'ls /', log=LOG)
+        assert ret
+
+        print('Removing ubuntu')
+        await application.remove()
+
+        print("Destroying model")
+        await controller.destroy_model(model.info.uuid)
+
+    except Exception:
+        LOG.exception(
+            "Test failed! Model {} may not be cleaned up".format(model_name))
+
+    finally:
+        print('Disconnecting from controller')
+        if model:
+            await model.disconnect()
+        await controller.disconnect()
+
+
+if __name__ == '__main__':
+    loop.run(main())
diff --git a/examples/allwatcher.py b/examples/allwatcher.py
new file mode 100644 (file)
index 0000000..c78d689
--- /dev/null
@@ -0,0 +1,31 @@
+"""
+This example:
+
+1. Connects to the current model
+2. Starts an AllWatcher
+3. Prints all changes received from the AllWatcher
+4. Runs forever (kill with Ctrl-C)
+
+"""
+import asyncio
+import logging
+
+from juju.client.connection import Connection
+from juju.client import client
+from juju import loop
+
+
+async def watch():
+    conn = await Connection.connect_current()
+    allwatcher = client.AllWatcherFacade.from_connection(conn)
+    while True:
+        change = await allwatcher.Next()
+        for delta in change.deltas:
+            print(delta.deltas)
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    # Run loop until the process is manually stopped (watch will loop
+    # forever).
+    loop.run(watch())
diff --git a/examples/config.py b/examples/config.py
new file mode 100644 (file)
index 0000000..bacc840
--- /dev/null
@@ -0,0 +1,55 @@
+"""
+This example:
+
+1. Connects to the current model
+2. Resets it
+3. Deploys a charm and prints its config and constraints
+
+"""
+import asyncio
+import logging
+
+from juju.model import Model
+from juju import loop
+
+log = logging.getLogger(__name__)
+
+MB = 1
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+    await model.reset(force=True)
+
+    ubuntu_app = await model.deploy(
+        'mysql',
+        application_name='mysql',
+        series='trusty',
+        channel='stable',
+        config={
+            'tuning-level': 'safest',
+        },
+        constraints={
+            'mem': 256 * MB,
+        },
+    )
+
+    # update and check app config
+    await ubuntu_app.set_config({'tuning-level': 'fast'})
+    config = await ubuntu_app.get_config()
+    assert(config['tuning-level']['value'] == 'fast')
+
+    # update and check app constraints
+    await ubuntu_app.set_constraints({'mem': 512 * MB})
+    constraints = await ubuntu_app.get_constraints()
+    assert(constraints['mem'] == 512 * MB)
+
+    await model.disconnect()
+
+    
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/examples/controller.py b/examples/controller.py
new file mode 100644 (file)
index 0000000..6002f68
--- /dev/null
@@ -0,0 +1,41 @@
+"""
+This example:
+
+1. Connects to current controller.
+2. Creates a new model.
+3. Deploys an application on the new model.
+4. Disconnects from the model
+5. Destroys the model
+
+"""
+import asyncio
+import logging
+
+from juju.controller import Controller
+from juju import loop
+
+
+async def main():
+    controller = Controller()
+    await controller.connect_current()
+    model = await controller.add_model(
+        'my-test-model',
+        'aws',
+        'aws-tim',
+    )
+    await model.deploy(
+        'ubuntu-0',
+        application_name='ubuntu',
+        series='trusty',
+        channel='stable',
+    )
+    await model.disconnect()
+    await controller.destroy_model(model.info.uuid)
+    await controller.disconnect()
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/examples/deploy.py b/examples/deploy.py
new file mode 100644 (file)
index 0000000..e6c306a
--- /dev/null
@@ -0,0 +1,40 @@
+"""
+This example:
+
+1. Connects to the current model
+2. Deploy a charm and waits until it reports itself active
+3. Destroys the unit and application
+
+"""
+from juju import loop
+from juju.model import Model
+
+
+async def main():
+    model = Model()
+    print('Connecting to model')
+    await model.connect_current()
+
+    try:
+        print('Deploying ubuntu')
+        application = await model.deploy(
+            'ubuntu-10',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+
+        print('Waiting for active')
+        await model.block_until(
+            lambda: all(unit.workload_status == 'active'
+                        for unit in application.units))
+
+        print('Removing ubuntu')
+        await application.remove()
+    finally:
+        print('Disconnecting from model')
+        await model.disconnect()
+
+
+if __name__ == '__main__':
+    loop.run(main())
diff --git a/examples/fullstatus.py b/examples/fullstatus.py
new file mode 100644 (file)
index 0000000..cdaf51d
--- /dev/null
@@ -0,0 +1,23 @@
+import asyncio
+
+from juju.client.connection import Connection
+from juju.client.client import ClientFacade
+from juju import loop
+
+async def status():
+    conn = await Connection.connect_current()
+    client = ClientFacade.from_connection(conn)
+
+    patterns = None
+    status = await client.FullStatus(patterns)
+    await conn.close()
+
+    print('Applications:', list(status.applications.keys()))
+    print('Machines:', list(status.machines.keys()))
+    print('Relations:', status.relations)
+
+    return status
+
+if __name__ == '__main__':
+    loop.run(status())
+
diff --git a/examples/future.py b/examples/future.py
new file mode 100644 (file)
index 0000000..0180325
--- /dev/null
@@ -0,0 +1,48 @@
+"""
+This example doesn't work - it demonstrates features that don't exist yet.
+
+"""
+import asyncio
+import logging
+
+from juju.model import Model
+from juju import loop
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+    await model.reset(force=True)
+
+    goal_state = Model.from_yaml('bundle-like-thing')
+    ubuntu_app = await model.deploy(
+        'ubuntu-0',
+        application_name='ubuntu',
+        series='trusty',
+        channel='stable',
+    )
+    ubuntu_app.on_unit_added(callback=lambda unit: True)
+
+    await model.deploy(
+        'nrpe-11',
+        application_name='nrpe',
+        series='trusty',
+        channel='stable',
+        num_units=0,
+    )
+    await model.add_relation(
+        'ubuntu',
+        'nrpe',
+    )
+
+    result, ok = await model.block_until(
+        lambda: model.matches(goal_state),
+        timeout=600
+    )
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/examples/leadership.py b/examples/leadership.py
new file mode 100644 (file)
index 0000000..b231003
--- /dev/null
@@ -0,0 +1,28 @@
+"""
+This example:
+
+1. Connects to the current model.
+2. Prints out leadership status for all deployed units in the model.
+3. Cleanly disconnects.
+
+"""
+import asyncio
+
+from juju.model import Model
+from juju import loop
+
+async def report_leadership():
+    model = Model()
+    await model.connect_current()
+
+    print("Leadership: ")
+    for app in model.applications.values():
+        for unit in app.units:
+            print("{}: {}".format(
+                unit.name, await unit.is_leader_from_status()))
+
+    await model.disconnect()
+
+
+if __name__ == '__main__':
+    loop.run(report_leadership())
diff --git a/examples/livemodel.py b/examples/livemodel.py
new file mode 100644 (file)
index 0000000..47eb999
--- /dev/null
@@ -0,0 +1,32 @@
+"""
+This example:
+
+1. Connects to the current model
+2. Watches the model and prints all changes
+3. Runs forever (kill with Ctrl-C)
+
+"""
+import asyncio
+
+from juju.model import Model
+from juju import loop
+
+
+async def on_model_change(delta, old, new, model):
+    print(delta.entity, delta.type, delta.data)
+    print(old)
+    print(new)
+    print(model)
+
+
+async def watch_model():
+    model = Model()
+    await model.connect_current()
+
+    model.add_observer(on_model_change)
+
+
+if __name__ == '__main__':
+    # Run loop until the process is manually stopped (watch_model will loop
+    # forever).
+    loop.run(watch_model())
diff --git a/examples/localcharm.py b/examples/localcharm.py
new file mode 100644 (file)
index 0000000..978703e
--- /dev/null
@@ -0,0 +1,34 @@
+"""
+This example shows how to deploy a local charm. It:
+
+1. Connects to current model.
+2. Uploads a local charm (directory on filesystem) to the model.
+3. Deploys the uploaded charm.
+
+"""
+import asyncio
+import logging
+
+from juju.model import Model
+from juju import loop
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+
+    # Deploy a local charm using a path to the charm directory
+    await model.deploy(
+        '/home/tvansteenburgh/src/charms/ubuntu',
+        application_name='ubuntu',
+        series='trusty',
+    )
+
+    await model.disconnect()
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/examples/relate.py b/examples/relate.py
new file mode 100644 (file)
index 0000000..8f1e708
--- /dev/null
@@ -0,0 +1,98 @@
+"""
+This example:
+
+1. Connects to the current model
+2. Resets it
+3. Deploys two charms and relates them
+4. Waits for units to be idle, then exits
+
+"""
+import asyncio
+import logging
+
+from juju.model import Model, ModelObserver
+from juju import loop
+
+
+class MyRemoveObserver(ModelObserver):
+    async def on_change(self, delta, old, new, model):
+        if delta.type == 'remove':
+            assert(new.latest() == new)
+            assert(new.next() is None)
+            assert(new.dead)
+            assert(new.current)
+            assert(new.connected)
+            assert(new.previous().dead)
+            assert(not new.previous().current)
+            assert(not new.previous().connected)
+
+
+class MyModelObserver(ModelObserver):
+    _shutting_down = False
+
+    async def on_change(self, delta, old, new, model):
+        if model.units and model.all_units_idle() and not self._shutting_down:
+            self._shutting_down = True
+            logging.debug('All units idle, disconnecting')
+            await model.reset(force=True)
+            await model.disconnect()
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+
+    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))
+    ))
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/examples/unitrun.py b/examples/unitrun.py
new file mode 100644 (file)
index 0000000..3dfacd6
--- /dev/null
@@ -0,0 +1,47 @@
+"""
+This example:
+
+1. Connects to current model and resets it.
+2. Deploys one ubuntu unit.
+3. Runs an action against the unit.
+4. Waits for the action results to come back, then exits.
+
+"""
+import asyncio
+import logging
+
+from juju.model import Model
+from juju import loop
+
+
+async def run_command(unit):
+    logging.debug('Running command on unit %s', unit.name)
+
+    # unit.run() returns a juju.action.Action instance
+    action = await unit.run('unit-get public-address')
+    logging.debug("Action results: %s", action.results)
+
+
+async def main():
+    model = Model()
+    await model.connect_current()
+    await model.reset(force=True)
+
+    app = await model.deploy(
+        'ubuntu-0',
+        application_name='ubuntu',
+        series='trusty',
+        channel='stable',
+    )
+
+    for unit in app.units:
+        await run_command(unit)
+
+    await model.disconnect()
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+    ws_logger = logging.getLogger('websockets.protocol')
+    ws_logger.setLevel(logging.INFO)
+    loop.run(main())
diff --git a/juju/__init__.py b/juju/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/juju/action.py b/juju/action.py
new file mode 100644 (file)
index 0000000..7a136a7
--- /dev/null
@@ -0,0 +1,10 @@
+from . import model
+
+
+class Action(model.ModelEntity):
+    @property
+    def status(self):
+        return self.data['status']
+
+    async def wait(self):
+        return await self.model.wait_for_action(self.id)
diff --git a/juju/annotation.py b/juju/annotation.py
new file mode 100644 (file)
index 0000000..73c9b1c
--- /dev/null
@@ -0,0 +1,9 @@
+import logging
+
+from . import model
+
+log = logging.getLogger(__name__)
+
+
+class Annotation(model.ModelEntity):
+    pass
diff --git a/juju/application.py b/juju/application.py
new file mode 100644 (file)
index 0000000..8719a62
--- /dev/null
@@ -0,0 +1,391 @@
+import asyncio
+import logging
+
+from . import model
+from .client import client
+from .errors import JujuError
+from .placement import parse as parse_placement
+
+log = logging.getLogger(__name__)
+
+
+class Application(model.ModelEntity):
+    @property
+    def _unit_match_pattern(self):
+        return r'^{}.*$'.format(self.entity_id)
+
+    def on_unit_add(self, callable_):
+        """Add a "unit added" observer to this entity, which will be called
+        whenever a unit is added to this application.
+
+        """
+        self.model.add_observer(
+            callable_, 'unit', 'add', self._unit_match_pattern)
+
+    def on_unit_remove(self, callable_):
+        """Add a "unit removed" observer to this entity, which will be called
+        whenever a unit is removed from this application.
+
+        """
+        self.model.add_observer(
+            callable_, 'unit', 'remove', self._unit_match_pattern)
+
+    @property
+    def units(self):
+        return [
+            unit for unit in self.model.units.values()
+            if unit.application == self.name
+        ]
+
+    @property
+    def status(self):
+        """Get the application status, as set by the charm's leader.
+
+        """
+        return self.safe_data['status']['current']
+
+    @property
+    def status_message(self):
+        """Get the application status message, as set by the charm's leader.
+
+        """
+        return self.safe_data['status']['message']
+
+    @property
+    def tag(self):
+        return 'application-%s' % self.name
+
+    async def add_relation(self, local_relation, remote_relation):
+        """Add a relation to another application.
+
+        :param str local_relation: Name of relation on this application
+        :param str remote_relation: Name of relation on the other
+            application in the form '<application>[:<relation_name>]'
+
+        """
+        if ':' not in local_relation:
+            local_relation = '{}:{}'.format(self.name, local_relation)
+
+        return await self.model.add_relation(local_relation, remote_relation)
+
+    async def add_unit(self, count=1, to=None):
+        """Add one or more units to this application.
+
+        :param int count: Number of units to add
+        :param str to: Placement directive, e.g.::
+            '23' - machine 23
+            'lxc:7' - new lxc container on machine 7
+            '24/lxc/3' - lxc container 3 or machine 24
+
+            If None, a new machine is provisioned.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Adding %s unit%s to %s',
+            count, '' if count == 1 else 's', self.name)
+
+        result = await app_facade.AddUnits(
+            application=self.name,
+            placement=parse_placement(to) if to else None,
+            num_units=count,
+        )
+
+        return await asyncio.gather(*[
+            asyncio.ensure_future(self.model._wait_for_new('unit', unit_id))
+            for unit_id in result.units
+        ])
+
+    add_units = add_unit
+
+    def allocate(self, budget, value):
+        """Allocate budget to this application.
+
+        :param str budget: Name of budget
+        :param int value: Budget limit
+
+        """
+        raise NotImplementedError()
+
+    def attach(self, resource_name, file_path):
+        """Upload a file as a resource for this application.
+
+        :param str resource: Name of the resource
+        :param str file_path: Path to the file to upload
+
+        """
+        raise NotImplementedError()
+
+    def collect_metrics(self):
+        """Collect metrics on this application.
+
+        """
+        raise NotImplementedError()
+
+    async def destroy_relation(self, local_relation, remote_relation):
+        """Remove a relation to another application.
+
+        :param str local_relation: Name of relation on this application
+        :param str remote_relation: Name of relation on the other
+            application in the form '<application>[:<relation_name>]'
+
+        """
+        if ':' not in local_relation:
+            local_relation = '{}:{}'.format(self.name, local_relation)
+
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Destroying relation %s <-> %s', local_relation, remote_relation)
+
+        return await app_facade.DestroyRelation([
+            local_relation, remote_relation])
+    remove_relation = destroy_relation
+
+    async def destroy_unit(self, *unit_names):
+        """Destroy units by name.
+
+        """
+        return await self.model.destroy_units(*unit_names)
+    destroy_units = destroy_unit
+
+    async def destroy(self):
+        """Remove this application from the model.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Destroying %s', self.name)
+
+        return await app_facade.Destroy(self.name)
+    remove = destroy
+
+    async def expose(self):
+        """Make this application publicly available over the network.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Exposing %s', self.name)
+
+        return await app_facade.Expose(self.name)
+
+    async def get_config(self):
+        """Return the configuration settings dict for this application.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Getting config for %s', self.name)
+
+        return (await app_facade.Get(self.name)).config
+
+    async def get_constraints(self):
+        """Return the machine constraints dict for this application.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Getting constraints for %s', self.name)
+
+        result = (await app_facade.Get(self.name)).constraints
+        return vars(result) if result else result
+
+    def get_actions(self, schema=False):
+        """Get actions defined for this application.
+
+        :param bool schema: Return the full action schema
+
+        """
+        raise NotImplementedError()
+
+    def get_resources(self, details=False):
+        """Return resources for this application.
+
+        :param bool details: Include detailed info about resources used by each
+            unit
+
+        """
+        raise NotImplementedError()
+
+    async def run(self, command, timeout=None):
+        """Run command on all units for this application.
+
+        :param str command: The command to run
+        :param int timeout: Time to wait before command is considered failed
+
+        """
+        action = client.ActionFacade.from_connection(self.connection)
+
+        log.debug(
+            'Running `%s` on all units of %s', command, self.name)
+
+        # TODO this should return a list of Actions
+        return await action.Run(
+            [self.name],
+            command,
+            [],
+            timeout,
+            [],
+        )
+
+    async def set_annotations(self, annotations):
+        """Set annotations on this application.
+
+        :param annotations map[string]string: the annotations as key/value
+            pairs.
+
+        """
+        log.debug('Updating annotations on application %s', self.name)
+
+        self.ann_facade = client.AnnotationsFacade.from_connection(
+            self.connection)
+
+        ann = client.EntityAnnotations(
+            entity=self.tag,
+            annotations=annotations,
+        )
+        return await self.ann_facade.Set([ann])
+
+    async def set_config(self, config, to_default=False):
+        """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)
+
+        log.debug(
+            'Setting config for %s: %s', self.name, config)
+
+        return await app_facade.Set(self.name, config)
+
+    async def set_constraints(self, constraints):
+        """Set machine constraints for this application.
+
+        :param dict constraints: Dict of machine constraints
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Setting constraints for %s: %s', self.name, constraints)
+
+        return await app_facade.SetConstraints(self.name, constraints)
+
+    def set_meter_status(self, status, info=None):
+        """Set the meter status on this status.
+
+        :param str status: Meter status, e.g. 'RED', 'AMBER'
+        :param str info: Extra info message
+
+        """
+        raise NotImplementedError()
+
+    def set_plan(self, plan_name):
+        """Set the plan for this application, effective immediately.
+
+        :param str plan_name: Name of plan
+
+        """
+        raise NotImplementedError()
+
+    async def unexpose(self):
+        """Remove public availability over the network for this application.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Unexposing %s', self.name)
+
+        return await app_facade.Unexpose(self.name)
+
+    def update_allocation(self, allocation):
+        """Update existing allocation for this application.
+
+        :param int allocation: The allocation to set
+
+        """
+        raise NotImplementedError()
+
+    async def upgrade_charm(
+            self, channel=None, force_series=False, force_units=False,
+            path=None, resources=None, revision=None, switch=None):
+        """Upgrade the charm for this application.
+
+        :param str channel: Channel to use when getting the charm from the
+            charm store, e.g. 'development'
+        :param bool force_series: Upgrade even if series of deployed
+            application is not supported by the new charm
+        :param bool force_units: Upgrade all units immediately, even if in
+            error state
+        :param str path: Uprade to a charm located at path
+        :param dict resources: Dictionary of resource name/filepath pairs
+        :param int revision: Explicit upgrade revision
+        :param str switch: Crossgrade charm url
+
+        """
+        # TODO: Support local upgrades
+        if path is not None:
+            raise NotImplementedError("path option is not implemented")
+        if resources is not None:
+            raise NotImplementedError("resources option is not implemented")
+
+        if switch is not None and revision is not None:
+            raise ValueError("switch and revision are mutually exclusive")
+
+        client_facade = client.ClientFacade.from_connection(self.connection)
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        if switch is not None:
+            charm_url = switch
+            if not charm_url.startswith('cs:'):
+                charm_url = 'cs:' + charm_url
+        else:
+            charm_url = self.data['charm-url']
+            charm_url = charm_url.rpartition('-')[0]
+            if revision is not None:
+                charm_url = "%s-%d" % (charm_url, revision)
+            else:
+                charmstore = self.model.charmstore
+                entity = await charmstore.entity(charm_url, channel=channel)
+                charm_url = entity['Id']
+
+        if charm_url == self.data['charm-url']:
+            raise JujuError('already running charm "%s"' % charm_url)
+
+        await client_facade.AddCharm(
+            url=charm_url,
+            channel=channel
+        )
+
+        await app_facade.SetCharm(
+            application=self.entity_id,
+            channel=channel,
+            charm_url=charm_url,
+            config_settings=None,
+            config_settings_yaml=None,
+            force_series=force_series,
+            force_units=force_units,
+            resource_ids=None,
+            storage_constraints=None
+        )
+
+        await self.model.block_until(
+            lambda: self.data['charm-url'] == charm_url
+        )
+
+    async def get_metrics(self):
+        """Get metrics for this application's units.
+
+        :return: Dictionary of unit_name:metrics
+
+        """
+        return await self.model.get_metrics(self.tag)
diff --git a/juju/client/__init__.py b/juju/client/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/juju/client/_client.py b/juju/client/_client.py
new file mode 100644 (file)
index 0000000..d510e11
--- /dev/null
@@ -0,0 +1,367 @@
+# DO NOT CHANGE THIS FILE! This file is auto-generated by facade.py.
+# Changes will be overwritten/lost when the file is regenerated.
+
+from juju.client._definitions import *
+
+from juju.client import _client1, _client2, _client3, _client4, _client5
+
+
+CLIENTS = {
+    "1": _client1,
+    "2": _client2,
+    "3": _client3,
+    "4": _client4,
+    "5": _client5
+}
+
+
+
+def lookup_facade(name, version):
+        """
+        Given a facade name and version, attempt to pull that facade out
+        of the correct client<version>.py file.
+
+        """
+        try:
+            facade = getattr(CLIENTS[str(version)], name)
+        except KeyError:
+            raise ImportError("No facades found for version {}".format(version))
+        except AttributeError:
+            raise ImportError(
+                "No facade with name '{}' in version {}".format(name, version))
+        return facade
+
+
+
+class TypeFactory:
+    @classmethod
+    def from_connection(cls, connection):
+        """
+        Given a connected Connection object, return an initialized and
+        connected instance of an API Interface matching the name of
+        this class.
+
+        @param connection: initialized Connection object.
+
+        """
+        version = connection.facades[cls.__name__[:-6]]
+
+        c = lookup_facade(cls.__name__, version)
+        c = c()
+        c.connect(connection)
+
+        return c
+
+
+class ActionFacade(TypeFactory):
+    pass
+
+
+class AgentFacade(TypeFactory):
+    pass
+
+
+class AgentToolsFacade(TypeFactory):
+    pass
+
+
+class AllModelWatcherFacade(TypeFactory):
+    pass
+
+
+class AllWatcherFacade(TypeFactory):
+    pass
+
+
+class AnnotationsFacade(TypeFactory):
+    pass
+
+
+class ApplicationFacade(TypeFactory):
+    pass
+
+
+class ApplicationRelationsWatcherFacade(TypeFactory):
+    pass
+
+
+class ApplicationScalerFacade(TypeFactory):
+    pass
+
+
+class BackupsFacade(TypeFactory):
+    pass
+
+
+class BlockFacade(TypeFactory):
+    pass
+
+
+class BundleFacade(TypeFactory):
+    pass
+
+
+class CharmRevisionUpdaterFacade(TypeFactory):
+    pass
+
+
+class CharmsFacade(TypeFactory):
+    pass
+
+
+class CleanerFacade(TypeFactory):
+    pass
+
+
+class ClientFacade(TypeFactory):
+    pass
+
+
+class CloudFacade(TypeFactory):
+    pass
+
+
+class ControllerFacade(TypeFactory):
+    pass
+
+
+class DeployerFacade(TypeFactory):
+    pass
+
+
+class DiscoverSpacesFacade(TypeFactory):
+    pass
+
+
+class DiskManagerFacade(TypeFactory):
+    pass
+
+
+class EntityWatcherFacade(TypeFactory):
+    pass
+
+
+class FilesystemAttachmentsWatcherFacade(TypeFactory):
+    pass
+
+
+class FirewallerFacade(TypeFactory):
+    pass
+
+
+class HighAvailabilityFacade(TypeFactory):
+    pass
+
+
+class HostKeyReporterFacade(TypeFactory):
+    pass
+
+
+class ImageManagerFacade(TypeFactory):
+    pass
+
+
+class ImageMetadataFacade(TypeFactory):
+    pass
+
+
+class InstancePollerFacade(TypeFactory):
+    pass
+
+
+class KeyManagerFacade(TypeFactory):
+    pass
+
+
+class KeyUpdaterFacade(TypeFactory):
+    pass
+
+
+class LeadershipServiceFacade(TypeFactory):
+    pass
+
+
+class LifeFlagFacade(TypeFactory):
+    pass
+
+
+class LogForwardingFacade(TypeFactory):
+    pass
+
+
+class LoggerFacade(TypeFactory):
+    pass
+
+
+class MachineActionsFacade(TypeFactory):
+    pass
+
+
+class MachineManagerFacade(TypeFactory):
+    pass
+
+
+class MachineUndertakerFacade(TypeFactory):
+    pass
+
+
+class MachinerFacade(TypeFactory):
+    pass
+
+
+class MeterStatusFacade(TypeFactory):
+    pass
+
+
+class MetricsAdderFacade(TypeFactory):
+    pass
+
+
+class MetricsDebugFacade(TypeFactory):
+    pass
+
+
+class MetricsManagerFacade(TypeFactory):
+    pass
+
+
+class MigrationFlagFacade(TypeFactory):
+    pass
+
+
+class MigrationMasterFacade(TypeFactory):
+    pass
+
+
+class MigrationMinionFacade(TypeFactory):
+    pass
+
+
+class MigrationStatusWatcherFacade(TypeFactory):
+    pass
+
+
+class MigrationTargetFacade(TypeFactory):
+    pass
+
+
+class ModelConfigFacade(TypeFactory):
+    pass
+
+
+class ModelManagerFacade(TypeFactory):
+    pass
+
+
+class NotifyWatcherFacade(TypeFactory):
+    pass
+
+
+class PayloadsFacade(TypeFactory):
+    pass
+
+
+class PayloadsHookContextFacade(TypeFactory):
+    pass
+
+
+class PingerFacade(TypeFactory):
+    pass
+
+
+class ProvisionerFacade(TypeFactory):
+    pass
+
+
+class ProxyUpdaterFacade(TypeFactory):
+    pass
+
+
+class RebootFacade(TypeFactory):
+    pass
+
+
+class RelationUnitsWatcherFacade(TypeFactory):
+    pass
+
+
+class RemoteApplicationWatcherFacade(TypeFactory):
+    pass
+
+
+class RemoteRelationsWatcherFacade(TypeFactory):
+    pass
+
+
+class ResourcesFacade(TypeFactory):
+    pass
+
+
+class ResourcesHookContextFacade(TypeFactory):
+    pass
+
+
+class ResumerFacade(TypeFactory):
+    pass
+
+
+class RetryStrategyFacade(TypeFactory):
+    pass
+
+
+class SSHClientFacade(TypeFactory):
+    pass
+
+
+class SingularFacade(TypeFactory):
+    pass
+
+
+class SpacesFacade(TypeFactory):
+    pass
+
+
+class StatusHistoryFacade(TypeFactory):
+    pass
+
+
+class StorageFacade(TypeFactory):
+    pass
+
+
+class StorageProvisionerFacade(TypeFactory):
+    pass
+
+
+class StringsWatcherFacade(TypeFactory):
+    pass
+
+
+class SubnetsFacade(TypeFactory):
+    pass
+
+
+class UndertakerFacade(TypeFactory):
+    pass
+
+
+class UnitAssignerFacade(TypeFactory):
+    pass
+
+
+class UniterFacade(TypeFactory):
+    pass
+
+
+class UpgraderFacade(TypeFactory):
+    pass
+
+
+class UserManagerFacade(TypeFactory):
+    pass
+
+
+class VolumeAttachmentsWatcherFacade(TypeFactory):
+    pass
+
+
diff --git a/juju/client/_client1.py b/juju/client/_client1.py
new file mode 100644 (file)
index 0000000..3774056
--- /dev/null
@@ -0,0 +1,6645 @@
+# 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 AgentToolsFacade(Type):
+    name = 'AgentTools'
+    version = 1
+    schema =     {'properties': {'UpdateToolsAvailable': {'type': 'object'}}, 'type': 'object'}
+    
+
+    @ReturnMapping(None)
+    async def UpdateToolsAvailable(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='AgentTools', request='UpdateToolsAvailable', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class AllWatcherFacade(Type):
+    name = 'AllWatcher'
+    version = 1
+    schema =     {'definitions': {'AllWatcherNextResults': {'additionalProperties': False,
+                                               'properties': {'deltas': {'items': {'$ref': '#/definitions/Delta'},
+                                                                         'type': 'array'}},
+                                               'required': ['deltas'],
+                                               'type': 'object'},
+                     'Delta': {'additionalProperties': False,
+                               'properties': {'entity': {'additionalProperties': True,
+                                                         'type': 'object'},
+                                              'removed': {'type': 'boolean'}},
+                               'required': ['removed', 'entity'],
+                               'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherNextResults'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AllWatcherNextResults)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~Delta]<~Delta>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='AllWatcher', request='Next', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='AllWatcher', request='Stop', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ApplicationRelationsWatcherFacade(Type):
+    name = 'ApplicationRelationsWatcher'
+    version = 1
+    schema =     {'definitions': {'ApplicationRelationsChange': {'additionalProperties': False,
+                                                    'properties': {'changed': {'items': {'$ref': '#/definitions/RelationChange'},
+                                                                               'type': 'array'},
+                                                                   'removed': {'items': {'type': 'integer'},
+                                                                               'type': 'array'}},
+                                                    'type': 'object'},
+                     'ApplicationRelationsWatchResult': {'additionalProperties': False,
+                                                         'properties': {'ApplicationRelationsWatcherId': {'type': 'string'},
+                                                                        'changes': {'$ref': '#/definitions/ApplicationRelationsChange'},
+                                                                        'error': {'$ref': '#/definitions/Error'}},
+                                                         'required': ['ApplicationRelationsWatcherId'],
+                                                         'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'RelationChange': {'additionalProperties': False,
+                                        'properties': {'changedunits': {'patternProperties': {'.*': {'$ref': '#/definitions/RelationUnitChange'}},
+                                                                        'type': 'object'},
+                                                       'departedunits': {'items': {'type': 'string'},
+                                                                         'type': 'array'},
+                                                       'id': {'type': 'integer'},
+                                                       'life': {'type': 'string'}},
+                                        'required': ['id', 'life'],
+                                        'type': 'object'},
+                     'RelationUnitChange': {'additionalProperties': False,
+                                            'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                     'type': 'object'}},
+                                                                        'type': 'object'}},
+                                            'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/ApplicationRelationsWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ApplicationRelationsWatchResult)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('ApplicationRelationsChange'), _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ApplicationRelationsWatcher', request='Next', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ApplicationRelationsWatcher', request='Stop', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ApplicationScalerFacade(Type):
+    name = 'ApplicationScaler'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'}},
+     'properties': {'Rescale': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'Watch': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+                              'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def Rescale(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ApplicationScaler', request='Rescale', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResult)
+    async def Watch(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ApplicationScaler', request='Watch', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class BackupsFacade(Type):
+    name = 'Backups'
+    version = 1
+    schema =     {'definitions': {'BackupsCreateArgs': {'additionalProperties': False,
+                                           'properties': {'notes': {'type': 'string'}},
+                                           'required': ['notes'],
+                                           'type': 'object'},
+                     'BackupsInfoArgs': {'additionalProperties': False,
+                                         'properties': {'id': {'type': 'string'}},
+                                         'required': ['id'],
+                                         'type': 'object'},
+                     'BackupsListArgs': {'additionalProperties': False,
+                                         'type': 'object'},
+                     'BackupsListResult': {'additionalProperties': False,
+                                           'properties': {'list': {'items': {'$ref': '#/definitions/BackupsMetadataResult'},
+                                                                   'type': 'array'}},
+                                           'required': ['list'],
+                                           'type': 'object'},
+                     'BackupsMetadataResult': {'additionalProperties': False,
+                                               'properties': {'ca-cert': {'type': 'string'},
+                                                              'ca-private-key': {'type': 'string'},
+                                                              'checksum': {'type': 'string'},
+                                                              'checksum-format': {'type': 'string'},
+                                                              'finished': {'format': 'date-time',
+                                                                           'type': 'string'},
+                                                              'hostname': {'type': 'string'},
+                                                              'id': {'type': 'string'},
+                                                              'machine': {'type': 'string'},
+                                                              'model': {'type': 'string'},
+                                                              'notes': {'type': 'string'},
+                                                              'series': {'type': 'string'},
+                                                              'size': {'type': 'integer'},
+                                                              'started': {'format': 'date-time',
+                                                                          'type': 'string'},
+                                                              'stored': {'format': 'date-time',
+                                                                         'type': 'string'},
+                                                              'version': {'$ref': '#/definitions/Number'}},
+                                               'required': ['id',
+                                                            'checksum',
+                                                            'checksum-format',
+                                                            'size',
+                                                            'stored',
+                                                            'started',
+                                                            'finished',
+                                                            'notes',
+                                                            'model',
+                                                            'machine',
+                                                            'hostname',
+                                                            'version',
+                                                            'series',
+                                                            'ca-cert',
+                                                            'ca-private-key'],
+                                               'type': 'object'},
+                     'BackupsRemoveArgs': {'additionalProperties': False,
+                                           'properties': {'id': {'type': 'string'}},
+                                           'required': ['id'],
+                                           'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'RestoreArgs': {'additionalProperties': False,
+                                     'properties': {'backup-id': {'type': 'string'}},
+                                     'required': ['backup-id'],
+                                     'type': 'object'}},
+     'properties': {'Create': {'properties': {'Params': {'$ref': '#/definitions/BackupsCreateArgs'},
+                                              'Result': {'$ref': '#/definitions/BackupsMetadataResult'}},
+                               'type': 'object'},
+                    'FinishRestore': {'type': 'object'},
+                    'Info': {'properties': {'Params': {'$ref': '#/definitions/BackupsInfoArgs'},
+                                            'Result': {'$ref': '#/definitions/BackupsMetadataResult'}},
+                             'type': 'object'},
+                    'List': {'properties': {'Params': {'$ref': '#/definitions/BackupsListArgs'},
+                                            'Result': {'$ref': '#/definitions/BackupsListResult'}},
+                             'type': 'object'},
+                    'PrepareRestore': {'type': 'object'},
+                    'Remove': {'properties': {'Params': {'$ref': '#/definitions/BackupsRemoveArgs'}},
+                               'type': 'object'},
+                    'Restore': {'properties': {'Params': {'$ref': '#/definitions/RestoreArgs'}},
+                                'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(BackupsMetadataResult)
+    async def Create(self, notes):
+        '''
+        notes : str
+        Returns -> typing.Union[str, int, _ForwardRef('Number')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='Create', version=1, params=_params)
+        _params['notes'] = notes
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def FinishRestore(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='FinishRestore', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BackupsMetadataResult)
+    async def Info(self, id_):
+        '''
+        id_ : str
+        Returns -> typing.Union[str, int, _ForwardRef('Number')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='Info', version=1, params=_params)
+        _params['id'] = id_
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BackupsListResult)
+    async def List(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='List', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def PrepareRestore(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='PrepareRestore', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Remove(self, id_):
+        '''
+        id_ : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='Remove', version=1, params=_params)
+        _params['id'] = id_
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Restore(self, backup_id):
+        '''
+        backup_id : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Backups', request='Restore', version=1, params=_params)
+        _params['backup-id'] = backup_id
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class BundleFacade(Type):
+    name = 'Bundle'
+    version = 1
+    schema =     {'definitions': {'BundleChange': {'additionalProperties': False,
+                                      'properties': {'args': {'items': {'additionalProperties': True,
+                                                                        'type': 'object'},
+                                                              'type': 'array'},
+                                                     'id': {'type': 'string'},
+                                                     'method': {'type': 'string'},
+                                                     'requires': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                      'required': ['id',
+                                                   'method',
+                                                   'args',
+                                                   'requires'],
+                                      'type': 'object'},
+                     'BundleChangesParams': {'additionalProperties': False,
+                                             'properties': {'yaml': {'type': 'string'}},
+                                             'required': ['yaml'],
+                                             'type': 'object'},
+                     'BundleChangesResults': {'additionalProperties': False,
+                                              'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'},
+                                                                         'type': 'array'},
+                                                             'errors': {'items': {'type': 'string'},
+                                                                        'type': 'array'}},
+                                              'type': 'object'}},
+     'properties': {'GetChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'},
+                                                  'Result': {'$ref': '#/definitions/BundleChangesResults'}},
+                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(BundleChangesResults)
+    async def GetChanges(self, yaml):
+        '''
+        yaml : str
+        Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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'
+    version = 1
+    schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+                                            'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+                                                                                 'type': 'array'},
+                                                                       'type': 'array'}},
+                                            'required': ['servers'],
+                                            'type': 'object'},
+                     'AddCharm': {'additionalProperties': False,
+                                  'properties': {'channel': {'type': 'string'},
+                                                 'url': {'type': 'string'}},
+                                  'required': ['url', 'channel'],
+                                  'type': 'object'},
+                     'AddCharmWithAuthorization': {'additionalProperties': False,
+                                                   'properties': {'channel': {'type': 'string'},
+                                                                  'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                                  'url': {'type': 'string'}},
+                                                   'required': ['url',
+                                                                'channel',
+                                                                'macaroon'],
+                                                   'type': 'object'},
+                     'AddMachineParams': {'additionalProperties': False,
+                                          'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+                                                                       'type': 'array'},
+                                                         'constraints': {'$ref': '#/definitions/Value'},
+                                                         'container-type': {'type': 'string'},
+                                                         'disks': {'items': {'$ref': '#/definitions/Constraints'},
+                                                                   'type': 'array'},
+                                                         'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'jobs': {'items': {'type': 'string'},
+                                                                  'type': 'array'},
+                                                         'nonce': {'type': 'string'},
+                                                         'parent-id': {'type': 'string'},
+                                                         'placement': {'$ref': '#/definitions/Placement'},
+                                                         'series': {'type': 'string'}},
+                                          'required': ['series',
+                                                       'constraints',
+                                                       'jobs',
+                                                       'parent-id',
+                                                       'container-type',
+                                                       'instance-id',
+                                                       'nonce',
+                                                       'hardware-characteristics',
+                                                       'addresses'],
+                                          'type': 'object'},
+                     'AddMachines': {'additionalProperties': False,
+                                     'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'},
+                                                               'type': 'array'}},
+                                     'required': ['params'],
+                                     'type': 'object'},
+                     'AddMachinesResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'machine': {'type': 'string'}},
+                                           'required': ['machine'],
+                                           'type': 'object'},
+                     'AddMachinesResults': {'additionalProperties': False,
+                                            'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'},
+                                                                        'type': 'array'}},
+                                            'required': ['machines'],
+                                            'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'AgentVersionResult': {'additionalProperties': False,
+                                            'properties': {'version': {'$ref': '#/definitions/Number'}},
+                                            'required': ['version'],
+                                            'type': 'object'},
+                     'AllWatcherId': {'additionalProperties': False,
+                                      'properties': {'watcher-id': {'type': 'string'}},
+                                      'required': ['watcher-id'],
+                                      'type': 'object'},
+                     'ApplicationStatus': {'additionalProperties': False,
+                                           'properties': {'can-upgrade-to': {'type': 'string'},
+                                                          'charm': {'type': 'string'},
+                                                          'err': {'additionalProperties': True,
+                                                                  'type': 'object'},
+                                                          'exposed': {'type': 'boolean'},
+                                                          'life': {'type': 'string'},
+                                                          'meter-statuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}},
+                                                                             'type': 'object'},
+                                                          'relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
+                                                                                                     'type': 'array'}},
+                                                                        'type': 'object'},
+                                                          'series': {'type': 'string'},
+                                                          'status': {'$ref': '#/definitions/DetailedStatus'},
+                                                          'subordinate-to': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                          'units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
+                                                                    'type': 'object'},
+                                                          'workload-version': {'type': 'string'}},
+                                           'required': ['charm',
+                                                        'series',
+                                                        'exposed',
+                                                        'life',
+                                                        'relations',
+                                                        'can-upgrade-to',
+                                                        'subordinate-to',
+                                                        'units',
+                                                        'meter-statuses',
+                                                        'status',
+                                                        'workload-version'],
+                                           'type': 'object'},
+                     'Binary': {'additionalProperties': False,
+                                'properties': {'Arch': {'type': 'string'},
+                                               'Number': {'$ref': '#/definitions/Number'},
+                                               'Series': {'type': 'string'}},
+                                'required': ['Number', 'Series', 'Arch'],
+                                'type': 'object'},
+                     'BundleChange': {'additionalProperties': False,
+                                      'properties': {'args': {'items': {'additionalProperties': True,
+                                                                        'type': 'object'},
+                                                              'type': 'array'},
+                                                     'id': {'type': 'string'},
+                                                     'method': {'type': 'string'},
+                                                     'requires': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                      'required': ['id',
+                                                   'method',
+                                                   'args',
+                                                   'requires'],
+                                      'type': 'object'},
+                     'BundleChangesParams': {'additionalProperties': False,
+                                             'properties': {'yaml': {'type': 'string'}},
+                                             'required': ['yaml'],
+                                             'type': 'object'},
+                     'BundleChangesResults': {'additionalProperties': False,
+                                              'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'},
+                                                                         'type': 'array'},
+                                                             'errors': {'items': {'type': 'string'},
+                                                                        'type': 'array'}},
+                                              'type': 'object'},
+                     'BytesResult': {'additionalProperties': False,
+                                     'properties': {'result': {'items': {'type': 'integer'},
+                                                               'type': 'array'}},
+                                     'required': ['result'],
+                                     'type': 'object'},
+                     'ConfigValue': {'additionalProperties': False,
+                                     'properties': {'source': {'type': 'string'},
+                                                    'value': {'additionalProperties': True,
+                                                              'type': 'object'}},
+                                     'required': ['value', 'source'],
+                                     'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'DestroyMachines': {'additionalProperties': False,
+                                         'properties': {'force': {'type': 'boolean'},
+                                                        'machine-names': {'items': {'type': 'string'},
+                                                                          'type': 'array'}},
+                                         'required': ['machine-names', 'force'],
+                                         'type': 'object'},
+                     'DetailedStatus': {'additionalProperties': False,
+                                        'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                             'type': 'object'}},
+                                                                'type': 'object'},
+                                                       'err': {'additionalProperties': True,
+                                                               'type': 'object'},
+                                                       'info': {'type': 'string'},
+                                                       'kind': {'type': 'string'},
+                                                       'life': {'type': 'string'},
+                                                       'since': {'format': 'date-time',
+                                                                 'type': 'string'},
+                                                       'status': {'type': 'string'},
+                                                       'version': {'type': 'string'}},
+                                        'required': ['status',
+                                                     'info',
+                                                     'data',
+                                                     'since',
+                                                     'kind',
+                                                     'version',
+                                                     'life'],
+                                        'type': 'object'},
+                     'EndpointStatus': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'name': {'type': 'string'},
+                                                       'role': {'type': 'string'},
+                                                       'subordinate': {'type': 'boolean'}},
+                                        'required': ['application',
+                                                     'name',
+                                                     'role',
+                                                     'subordinate'],
+                                        'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatus': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'info': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['status', 'info', 'since'],
+                                      'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'FindToolsParams': {'additionalProperties': False,
+                                         'properties': {'arch': {'type': 'string'},
+                                                        'major': {'type': 'integer'},
+                                                        'minor': {'type': 'integer'},
+                                                        'number': {'$ref': '#/definitions/Number'},
+                                                        'series': {'type': 'string'}},
+                                         'required': ['number',
+                                                      'major',
+                                                      'minor',
+                                                      'arch',
+                                                      'series'],
+                                         'type': 'object'},
+                     'FindToolsResult': {'additionalProperties': False,
+                                         'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                        'list': {'items': {'$ref': '#/definitions/Tools'},
+                                                                 'type': 'array'}},
+                                         'required': ['list'],
+                                         'type': 'object'},
+                     'FullStatus': {'additionalProperties': False,
+                                    'properties': {'applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}},
+                                                                    'type': 'object'},
+                                                   'machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
+                                                                'type': 'object'},
+                                                   'model': {'$ref': '#/definitions/ModelStatusInfo'},
+                                                   'relations': {'items': {'$ref': '#/definitions/RelationStatus'},
+                                                                 'type': 'array'},
+                                                   'remote-applications': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteApplicationStatus'}},
+                                                                           'type': 'object'}},
+                                    'required': ['model',
+                                                 'machines',
+                                                 'applications',
+                                                 'remote-applications',
+                                                 'relations'],
+                                    'type': 'object'},
+                     'GetConstraintsResults': {'additionalProperties': False,
+                                               'properties': {'constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['constraints'],
+                                               'type': 'object'},
+                     'HardwareCharacteristics': {'additionalProperties': False,
+                                                 'properties': {'arch': {'type': 'string'},
+                                                                'availability-zone': {'type': 'string'},
+                                                                'cpu-cores': {'type': 'integer'},
+                                                                'cpu-power': {'type': 'integer'},
+                                                                'mem': {'type': 'integer'},
+                                                                'root-disk': {'type': 'integer'},
+                                                                'tags': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                                 'type': 'object'},
+                     'History': {'additionalProperties': False,
+                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                'statuses': {'items': {'$ref': '#/definitions/DetailedStatus'},
+                                                             'type': 'array'}},
+                                 'required': ['statuses'],
+                                 'type': 'object'},
+                     'HostPort': {'additionalProperties': False,
+                                  'properties': {'Address': {'$ref': '#/definitions/Address'},
+                                                 'port': {'type': 'integer'}},
+                                  'required': ['Address', 'port'],
+                                  'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineHardware': {'additionalProperties': False,
+                                         'properties': {'arch': {'type': 'string'},
+                                                        'availability-zone': {'type': 'string'},
+                                                        'cores': {'type': 'integer'},
+                                                        'cpu-power': {'type': 'integer'},
+                                                        'mem': {'type': 'integer'},
+                                                        'root-disk': {'type': 'integer'},
+                                                        'tags': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                         'type': 'object'},
+                     'MachineStatus': {'additionalProperties': False,
+                                       'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'},
+                                                      'constraints': {'type': 'string'},
+                                                      'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
+                                                                     'type': 'object'},
+                                                      'dns-name': {'type': 'string'},
+                                                      'hardware': {'type': 'string'},
+                                                      'has-vote': {'type': 'boolean'},
+                                                      'id': {'type': 'string'},
+                                                      'instance-id': {'type': 'string'},
+                                                      'instance-status': {'$ref': '#/definitions/DetailedStatus'},
+                                                      'ip-addresses': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                      'jobs': {'items': {'type': 'string'},
+                                                               'type': 'array'},
+                                                      'network-interfaces': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInterface'}},
+                                                                             'type': 'object'},
+                                                      'series': {'type': 'string'},
+                                                      'wants-vote': {'type': 'boolean'}},
+                                       'required': ['agent-status',
+                                                    'instance-status',
+                                                    'dns-name',
+                                                    'instance-id',
+                                                    'series',
+                                                    'id',
+                                                    'containers',
+                                                    'constraints',
+                                                    'hardware',
+                                                    'jobs',
+                                                    'has-vote',
+                                                    'wants-vote'],
+                                       'type': 'object'},
+                     'MeterStatus': {'additionalProperties': False,
+                                     'properties': {'color': {'type': 'string'},
+                                                    'message': {'type': 'string'}},
+                                     'required': ['color', 'message'],
+                                     'type': 'object'},
+                     'ModelConfigResults': {'additionalProperties': False,
+                                            'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
+                                                                      'type': 'object'}},
+                                            'required': ['config'],
+                                            'type': 'object'},
+                     'ModelInfo': {'additionalProperties': False,
+                                   'properties': {'agent-version': {'$ref': '#/definitions/Number'},
+                                                  'cloud-credential-tag': {'type': 'string'},
+                                                  'cloud-region': {'type': 'string'},
+                                                  'cloud-tag': {'type': 'string'},
+                                                  'controller-uuid': {'type': 'string'},
+                                                  'default-series': {'type': 'string'},
+                                                  'life': {'type': 'string'},
+                                                  'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+                                                               'type': 'array'},
+                                                  'migration': {'$ref': '#/definitions/ModelMigrationStatus'},
+                                                  'name': {'type': 'string'},
+                                                  'owner-tag': {'type': 'string'},
+                                                  'provider-type': {'type': 'string'},
+                                                  'sla': {'$ref': '#/definitions/ModelSLAInfo'},
+                                                  'status': {'$ref': '#/definitions/EntityStatus'},
+                                                  'users': {'items': {'$ref': '#/definitions/ModelUserInfo'},
+                                                            'type': 'array'},
+                                                  'uuid': {'type': 'string'}},
+                                   'required': ['name',
+                                                'uuid',
+                                                'controller-uuid',
+                                                'cloud-tag',
+                                                'owner-tag',
+                                                'life',
+                                                'users',
+                                                'machines',
+                                                'sla',
+                                                'agent-version'],
+                                   'type': 'object'},
+                     'ModelMachineInfo': {'additionalProperties': False,
+                                          'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'},
+                                                         'has-vote': {'type': 'boolean'},
+                                                         'id': {'type': 'string'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'wants-vote': {'type': 'boolean'}},
+                                          'required': ['id'],
+                                          'type': 'object'},
+                     'ModelMigrationStatus': {'additionalProperties': False,
+                                              'properties': {'end': {'format': 'date-time',
+                                                                     'type': 'string'},
+                                                             'start': {'format': 'date-time',
+                                                                       'type': 'string'},
+                                                             'status': {'type': 'string'}},
+                                              'required': ['status', 'start'],
+                                              'type': 'object'},
+                     'ModelSLA': {'additionalProperties': False,
+                                  'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'},
+                                                 'creds': {'items': {'type': 'integer'},
+                                                           'type': 'array'}},
+                                  'required': ['ModelSLAInfo', 'creds'],
+                                  'type': 'object'},
+                     'ModelSLAInfo': {'additionalProperties': False,
+                                      'properties': {'level': {'type': 'string'},
+                                                     'owner': {'type': 'string'}},
+                                      'required': ['level', 'owner'],
+                                      'type': 'object'},
+                     'ModelSet': {'additionalProperties': False,
+                                  'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                         'type': 'object'}},
+                                                            'type': 'object'}},
+                                  'required': ['config'],
+                                  'type': 'object'},
+                     'ModelStatusInfo': {'additionalProperties': False,
+                                         'properties': {'available-version': {'type': 'string'},
+                                                        'cloud-tag': {'type': 'string'},
+                                                        'meter-status': {'$ref': '#/definitions/MeterStatus'},
+                                                        'model-status': {'$ref': '#/definitions/DetailedStatus'},
+                                                        'name': {'type': 'string'},
+                                                        'region': {'type': 'string'},
+                                                        'sla': {'type': 'string'},
+                                                        'version': {'type': 'string'}},
+                                         'required': ['name',
+                                                      'cloud-tag',
+                                                      'version',
+                                                      'available-version',
+                                                      'model-status',
+                                                      'meter-status',
+                                                      'sla'],
+                                         'type': 'object'},
+                     'ModelUnset': {'additionalProperties': False,
+                                    'properties': {'keys': {'items': {'type': 'string'},
+                                                            'type': 'array'}},
+                                    'required': ['keys'],
+                                    'type': 'object'},
+                     'ModelUserInfo': {'additionalProperties': False,
+                                       'properties': {'access': {'type': 'string'},
+                                                      'display-name': {'type': 'string'},
+                                                      'last-connection': {'format': 'date-time',
+                                                                          'type': 'string'},
+                                                      'user': {'type': 'string'}},
+                                       'required': ['user',
+                                                    'display-name',
+                                                    'last-connection',
+                                                    'access'],
+                                       'type': 'object'},
+                     'ModelUserInfoResult': {'additionalProperties': False,
+                                             'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                            'result': {'$ref': '#/definitions/ModelUserInfo'}},
+                                             'type': 'object'},
+                     'ModelUserInfoResults': {'additionalProperties': False,
+                                              'properties': {'results': {'items': {'$ref': '#/definitions/ModelUserInfoResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['results'],
+                                              'type': 'object'},
+                     'NetworkInterface': {'additionalProperties': False,
+                                          'properties': {'dns-nameservers': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                         'gateway': {'type': 'string'},
+                                                         'ip-addresses': {'items': {'type': 'string'},
+                                                                          'type': 'array'},
+                                                         'is-up': {'type': 'boolean'},
+                                                         'mac-address': {'type': 'string'},
+                                                         'space': {'type': 'string'}},
+                                          'required': ['ip-addresses',
+                                                       'mac-address',
+                                                       'is-up'],
+                                          'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'PrivateAddress': {'additionalProperties': False,
+                                        'properties': {'target': {'type': 'string'}},
+                                        'required': ['target'],
+                                        'type': 'object'},
+                     'PrivateAddressResults': {'additionalProperties': False,
+                                               'properties': {'private-address': {'type': 'string'}},
+                                               'required': ['private-address'],
+                                               'type': 'object'},
+                     'ProvisioningScriptParams': {'additionalProperties': False,
+                                                  'properties': {'data-dir': {'type': 'string'},
+                                                                 'disable-package-commands': {'type': 'boolean'},
+                                                                 'machine-id': {'type': 'string'},
+                                                                 'nonce': {'type': 'string'}},
+                                                  'required': ['machine-id',
+                                                               'nonce',
+                                                               'data-dir',
+                                                               'disable-package-commands'],
+                                                  'type': 'object'},
+                     'ProvisioningScriptResult': {'additionalProperties': False,
+                                                  'properties': {'script': {'type': 'string'}},
+                                                  'required': ['script'],
+                                                  'type': 'object'},
+                     'PublicAddress': {'additionalProperties': False,
+                                       'properties': {'target': {'type': 'string'}},
+                                       'required': ['target'],
+                                       'type': 'object'},
+                     'PublicAddressResults': {'additionalProperties': False,
+                                              'properties': {'public-address': {'type': 'string'}},
+                                              'required': ['public-address'],
+                                              'type': 'object'},
+                     'RelationStatus': {'additionalProperties': False,
+                                        'properties': {'endpoints': {'items': {'$ref': '#/definitions/EndpointStatus'},
+                                                                     'type': 'array'},
+                                                       'id': {'type': 'integer'},
+                                                       'interface': {'type': 'string'},
+                                                       'key': {'type': 'string'},
+                                                       'scope': {'type': 'string'}},
+                                        'required': ['id',
+                                                     'key',
+                                                     'interface',
+                                                     'scope',
+                                                     'endpoints'],
+                                        'type': 'object'},
+                     'RemoteApplicationStatus': {'additionalProperties': False,
+                                                 'properties': {'application-name': {'type': 'string'},
+                                                                'application-url': {'type': 'string'},
+                                                                'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'},
+                                                                              'type': 'array'},
+                                                                'err': {'additionalProperties': True,
+                                                                        'type': 'object'},
+                                                                'life': {'type': 'string'},
+                                                                'relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
+                                                                                                           'type': 'array'}},
+                                                                              'type': 'object'},
+                                                                'status': {'$ref': '#/definitions/DetailedStatus'}},
+                                                 'required': ['application-url',
+                                                              'application-name',
+                                                              'endpoints',
+                                                              'life',
+                                                              'relations',
+                                                              'status'],
+                                                 'type': 'object'},
+                     'RemoteEndpoint': {'additionalProperties': False,
+                                        'properties': {'interface': {'type': 'string'},
+                                                       'limit': {'type': 'integer'},
+                                                       'name': {'type': 'string'},
+                                                       'role': {'type': 'string'},
+                                                       'scope': {'type': 'string'}},
+                                        'required': ['name',
+                                                     'role',
+                                                     'interface',
+                                                     'limit',
+                                                     'scope'],
+                                        'type': 'object'},
+                     'ResolveCharmResult': {'additionalProperties': False,
+                                            'properties': {'error': {'type': 'string'},
+                                                           'url': {'type': 'string'}},
+                                            'type': 'object'},
+                     'ResolveCharmResults': {'additionalProperties': False,
+                                             'properties': {'urls': {'items': {'$ref': '#/definitions/ResolveCharmResult'},
+                                                                     'type': 'array'}},
+                                             'required': ['urls'],
+                                             'type': 'object'},
+                     'ResolveCharms': {'additionalProperties': False,
+                                       'properties': {'references': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                       'required': ['references'],
+                                       'type': 'object'},
+                     'Resolved': {'additionalProperties': False,
+                                  'properties': {'retry': {'type': 'boolean'},
+                                                 'unit-name': {'type': 'string'}},
+                                  'required': ['unit-name', 'retry'],
+                                  'type': 'object'},
+                     'SetConstraints': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['application', 'constraints'],
+                                        'type': 'object'},
+                     'SetModelAgentVersion': {'additionalProperties': False,
+                                              'properties': {'version': {'$ref': '#/definitions/Number'}},
+                                              'required': ['version'],
+                                              'type': 'object'},
+                     'StatusHistoryFilter': {'additionalProperties': False,
+                                             'properties': {'date': {'format': 'date-time',
+                                                                     'type': 'string'},
+                                                            'delta': {'type': 'integer'},
+                                                            'exclude': {'items': {'type': 'string'},
+                                                                        'type': 'array'},
+                                                            'size': {'type': 'integer'}},
+                                             'required': ['size',
+                                                          'date',
+                                                          'delta',
+                                                          'exclude'],
+                                             'type': 'object'},
+                     'StatusHistoryRequest': {'additionalProperties': False,
+                                              'properties': {'filter': {'$ref': '#/definitions/StatusHistoryFilter'},
+                                                             'historyKind': {'type': 'string'},
+                                                             'size': {'type': 'integer'},
+                                                             'tag': {'type': 'string'}},
+                                              'required': ['historyKind',
+                                                           'size',
+                                                           'filter',
+                                                           'tag'],
+                                              'type': 'object'},
+                     'StatusHistoryRequests': {'additionalProperties': False,
+                                               'properties': {'requests': {'items': {'$ref': '#/definitions/StatusHistoryRequest'},
+                                                                           'type': 'array'}},
+                                               'required': ['requests'],
+                                               'type': 'object'},
+                     'StatusHistoryResult': {'additionalProperties': False,
+                                             'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                            'history': {'$ref': '#/definitions/History'}},
+                                             'required': ['history'],
+                                             'type': 'object'},
+                     'StatusHistoryResults': {'additionalProperties': False,
+                                              'properties': {'results': {'items': {'$ref': '#/definitions/StatusHistoryResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['results'],
+                                              'type': 'object'},
+                     'StatusParams': {'additionalProperties': False,
+                                      'properties': {'patterns': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                      'required': ['patterns'],
+                                      'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'Tools': {'additionalProperties': False,
+                               'properties': {'sha256': {'type': 'string'},
+                                              'size': {'type': 'integer'},
+                                              'url': {'type': 'string'},
+                                              'version': {'$ref': '#/definitions/Binary'}},
+                               'required': ['version', 'url', 'size'],
+                               'type': 'object'},
+                     'UnitStatus': {'additionalProperties': False,
+                                    'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'},
+                                                   'charm': {'type': 'string'},
+                                                   'leader': {'type': 'boolean'},
+                                                   'machine': {'type': 'string'},
+                                                   'opened-ports': {'items': {'type': 'string'},
+                                                                    'type': 'array'},
+                                                   'public-address': {'type': 'string'},
+                                                   'subordinates': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
+                                                                    'type': 'object'},
+                                                   'workload-status': {'$ref': '#/definitions/DetailedStatus'},
+                                                   'workload-version': {'type': 'string'}},
+                                    'required': ['agent-status',
+                                                 'workload-status',
+                                                 'workload-version',
+                                                 'machine',
+                                                 'opened-ports',
+                                                 'public-address',
+                                                 'charm',
+                                                 'subordinates'],
+                                    'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+                                     'type': 'object'},
+                    'AbortCurrentUpgrade': {'type': 'object'},
+                    'AddCharm': {'properties': {'Params': {'$ref': '#/definitions/AddCharm'}},
+                                 'type': 'object'},
+                    'AddCharmWithAuthorization': {'properties': {'Params': {'$ref': '#/definitions/AddCharmWithAuthorization'}},
+                                                  'type': 'object'},
+                    'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+                                                   'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+                                    'type': 'object'},
+                    'AddMachinesV2': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+                                                     'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+                                      'type': 'object'},
+                    'AgentVersion': {'properties': {'Result': {'$ref': '#/definitions/AgentVersionResult'}},
+                                     'type': 'object'},
+                    'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+                               'type': 'object'},
+                    'DestroyMachines': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachines'}},
+                                        'type': 'object'},
+                    'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'},
+                                                 'Result': {'$ref': '#/definitions/FindToolsResult'}},
+                                  'type': 'object'},
+                    'FullStatus': {'properties': {'Params': {'$ref': '#/definitions/StatusParams'},
+                                                  'Result': {'$ref': '#/definitions/FullStatus'}},
+                                   'type': 'object'},
+                    'GetBundleChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'},
+                                                        'Result': {'$ref': '#/definitions/BundleChangesResults'}},
+                                         'type': 'object'},
+                    'GetModelConstraints': {'properties': {'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+                                            'type': 'object'},
+                    'InjectMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+                                                      'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+                                       'type': 'object'},
+                    'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}},
+                                 'type': 'object'},
+                    'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelInfo'}},
+                                  'type': 'object'},
+                    'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}},
+                                 'type': 'object'},
+                    'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}},
+                                   'type': 'object'},
+                    'ModelUserInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelUserInfoResults'}},
+                                      'type': 'object'},
+                    'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/PrivateAddress'},
+                                                      'Result': {'$ref': '#/definitions/PrivateAddressResults'}},
+                                       'type': 'object'},
+                    'ProvisioningScript': {'properties': {'Params': {'$ref': '#/definitions/ProvisioningScriptParams'},
+                                                          'Result': {'$ref': '#/definitions/ProvisioningScriptResult'}},
+                                           'type': 'object'},
+                    'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/PublicAddress'},
+                                                     'Result': {'$ref': '#/definitions/PublicAddressResults'}},
+                                      'type': 'object'},
+                    'ResolveCharms': {'properties': {'Params': {'$ref': '#/definitions/ResolveCharms'},
+                                                     'Result': {'$ref': '#/definitions/ResolveCharmResults'}},
+                                      'type': 'object'},
+                    'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Resolved'}},
+                                 'type': 'object'},
+                    'RetryProvisioning': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                         'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                          'type': 'object'},
+                    'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                 'type': 'object'},
+                    'SetModelAgentVersion': {'properties': {'Params': {'$ref': '#/definitions/SetModelAgentVersion'}},
+                                             'type': 'object'},
+                    'SetModelConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+                                            'type': 'object'},
+                    'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}},
+                                    'type': 'object'},
+                    'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryRequests'},
+                                                     'Result': {'$ref': '#/definitions/StatusHistoryResults'}},
+                                      'type': 'object'},
+                    'WatchAll': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}},
+                                 'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(APIHostPortsResult)
+    async def APIHostPorts(self):
+        '''
+
+        Returns -> typing.Sequence<+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):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[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<+T_co>[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<+T_co>[~Tools]<~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<+T_co>[str]
+        Returns -> typing.Union[_ForwardRef('ModelStatusInfo'), typing.Sequence<+T_co>[~RelationStatus]<~RelationStatus>, typing.Mapping<~KT, +VT_co>[str, ~RemoteApplicationStatus]<~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.Sequence<+T_co>[~BundleChange]<~BundleChange>
+        '''
+        # 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<+T_co>[~AddMachineParams]<~AddMachineParams>
+        Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Client', request='InjectMachines', version=1, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResults)
+    async def ModelGet(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~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'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~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<~KT, +VT_co>[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<+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>
+        '''
+        # 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<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[~ResolveCharmResult]<~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<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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<+T_co>[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<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest>
+        Returns -> typing.Sequence<+T_co>[~StatusHistoryResult]<~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'},
+                     '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<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~CloudResult]<~CloudResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Cloud', request='Cloud', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(CloudsResult)
+    async def Clouds(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~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<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~CloudCredentialResult]<~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<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint>
+        Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~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<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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<+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):
+        '''
+        user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud>
+        Returns -> typing.Sequence<+T_co>[~StringsResult]<~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 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'},
+                     '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,
+                                  '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'},
+                    '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'}},
+     '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):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='APIHostPorts', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BytesResult)
+    async def CACert(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[int]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='CACert', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(DeployerConnectionValues)
+    async def ConnectionInfo(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='ConnectionInfo', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @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='Deployer', 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='Deployer', request='ModelUUID', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def Remove(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='Remove', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @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
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetStatus(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='SetStatus', 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):
+        '''
+        entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='UpdateStatus', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchAPIHostPorts(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Deployer', request='WatchAPIHostPorts', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResults)
+    async def WatchUnits(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~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 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 ReportKeys(self, entity_keys):
+        '''
+        entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='HostKeyReporter', request='ReportKeys', version=1, params=_params)
+        _params['entity-keys'] = entity_keys
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class KeyManagerFacade(Type):
+    name = 'KeyManager'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ListSSHKeys': {'additionalProperties': False,
+                                     'properties': {'entities': {'$ref': '#/definitions/Entities'},
+                                                    'mode': {'type': 'boolean'}},
+                                     'required': ['entities', 'mode'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModifyUserSSHKeys': {'additionalProperties': False,
+                                           'properties': {'ssh-keys': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                          'user': {'type': 'string'}},
+                                           'required': ['user', 'ssh-keys'],
+                                           'type': 'object'},
+                     'StringsResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'result': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                       'type': 'object'},
+                     'StringsResults': {'additionalProperties': False,
+                                        'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
+                                                                   'type': 'array'}},
+                                        'required': ['results'],
+                                        'type': 'object'}},
+     'properties': {'AddKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'DeleteKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'ImportKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'ListKeys': {'properties': {'Params': {'$ref': '#/definitions/ListSSHKeys'},
+                                                'Result': {'$ref': '#/definitions/StringsResults'}},
+                                 'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def AddKeys(self, ssh_keys, user):
+        '''
+        ssh_keys : typing.Sequence<+T_co>[str]
+        user : str
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # 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
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def DeleteKeys(self, ssh_keys, user):
+        '''
+        ssh_keys : typing.Sequence<+T_co>[str]
+        user : str
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def ImportKeys(self, ssh_keys, user):
+        '''
+        ssh_keys : typing.Sequence<+T_co>[str]
+        user : str
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsResults)
+    async def ListKeys(self, entities, mode):
+        '''
+        entities : Entities
+        mode : bool
+        Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='KeyManager', request='ListKeys', version=1, params=_params)
+        _params['entities'] = entities
+        _params['mode'] = mode
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+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):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='KeyUpdater', request='AuthorisedKeys', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchAuthorisedKeys(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='KeyUpdater', request='WatchAuthorisedKeys', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class LifeFlagFacade(Type):
+    name = 'LifeFlag'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'}},
+     'properties': {'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                              'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(LifeResults)
+    async def Life(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+        '''
+        # 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(LogForwardingGetLastSentResults)
+    async def GetLastSent(self, ids):
+        '''
+        ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID>
+        Returns -> typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='LogForwarding', request='GetLastSent', version=1, params=_params)
+        _params['ids'] = ids
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetLastSent(self, params):
+        '''
+        params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='LogForwarding', request='SetLastSent', version=1, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class LoggerFacade(Type):
+    name = 'Logger'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'}},
+     'properties': {'LoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/StringResults'}},
+                                      'type': 'object'},
+                    'WatchLoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                           'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(StringResults)
+    async def LoggingConfig(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~StringResult]<~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):
+        '''
+        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='Logger', request='WatchLoggingConfig', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MachineActionsFacade(Type):
+    name = 'MachineActions'
+    version = 1
+    schema =     {'definitions': {'Action': {'additionalProperties': False,
+                                'properties': {'name': {'type': 'string'},
+                                               'parameters': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                               'receiver': {'type': 'string'},
+                                               'tag': {'type': 'string'}},
+                                'required': ['tag', 'receiver', 'name'],
+                                'type': 'object'},
+                     'ActionExecutionResult': {'additionalProperties': False,
+                                               'properties': {'action-tag': {'type': 'string'},
+                                                              'message': {'type': 'string'},
+                                                              'results': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'},
+                                                              'status': {'type': 'string'}},
+                                               'required': ['action-tag', 'status'],
+                                               'type': 'object'},
+                     'ActionExecutionResults': {'additionalProperties': False,
+                                                'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'},
+                                                                           'type': 'array'}},
+                                                'type': 'object'},
+                     'ActionResult': {'additionalProperties': False,
+                                      'properties': {'action': {'$ref': '#/definitions/Action'},
+                                                     'completed': {'format': 'date-time',
+                                                                   'type': 'string'},
+                                                     'enqueued': {'format': 'date-time',
+                                                                  'type': 'string'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'message': {'type': 'string'},
+                                                     'output': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                             'type': 'object'}},
+                                                                'type': 'object'},
+                                                     'started': {'format': 'date-time',
+                                                                 'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'type': 'object'},
+                     'ActionResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'ActionsByReceiver': {'additionalProperties': False,
+                                           'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                      'type': 'array'},
+                                                          'error': {'$ref': '#/definitions/Error'},
+                                                          'receiver': {'type': 'string'}},
+                                           'type': 'object'},
+                     'ActionsByReceivers': {'additionalProperties': False,
+                                            'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'},
+                     'StringsWatchResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'}},
+     'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'RunningActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                       'type': 'object'},
+                    'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                                 'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ActionResults)
+    async def Actions(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineActions', request='Actions', version=1, 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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineActions', request='BeginActions', version=1, params=_params)
+        _params['entities'] = entities
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineActions', request='FinishActions', version=1, params=_params)
+        _params['results'] = results
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionsByReceivers)
+    async def RunningActions(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineActions', request='RunningActions', version=1, params=_params)
+        _params['entities'] = entities
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineActions', request='WatchActionNotifications', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MachineUndertakerFacade(Type):
+    name = 'MachineUndertaker'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'EntitiesResult': {'additionalProperties': False,
+                                        'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                                    'type': 'array'},
+                                                       'error': {'$ref': '#/definitions/Error'}},
+                                        'required': ['entities'],
+                                        'type': 'object'},
+                     'EntitiesResults': {'additionalProperties': False,
+                                         'properties': {'results': {'items': {'$ref': '#/definitions/EntitiesResult'},
+                                                                    'type': 'array'}},
+                                         'required': ['results'],
+                                         'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'ProviderInterfaceInfo': {'additionalProperties': False,
+                                               'properties': {'interface-name': {'type': 'string'},
+                                                              'mac-address': {'type': 'string'},
+                                                              'provider-id': {'type': 'string'}},
+                                               'required': ['interface-name',
+                                                            'mac-address',
+                                                            'provider-id'],
+                                               'type': 'object'},
+                     'ProviderInterfaceInfoResult': {'additionalProperties': False,
+                                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                    'interfaces': {'items': {'$ref': '#/definitions/ProviderInterfaceInfo'},
+                                                                                   'type': 'array'},
+                                                                    'machine-tag': {'type': 'string'}},
+                                                     'required': ['machine-tag',
+                                                                  'interfaces'],
+                                                     'type': 'object'},
+                     'ProviderInterfaceInfoResults': {'additionalProperties': False,
+                                                      'properties': {'results': {'items': {'$ref': '#/definitions/ProviderInterfaceInfoResult'},
+                                                                                 'type': 'array'}},
+                                                      'required': ['results'],
+                                                      'type': 'object'}},
+     'properties': {'AllMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/EntitiesResults'}},
+                                           'type': 'object'},
+                    'CompleteMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}},
+                                                'type': 'object'},
+                    'GetMachineProviderInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                       'Result': {'$ref': '#/definitions/ProviderInterfaceInfoResults'}},
+                                                        'type': 'object'},
+                    'WatchMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                            'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                             'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(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):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineUndertaker', request='GetMachineProviderInterfaceInfo', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchMachineRemovals(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='MachineUndertaker', request='WatchMachineRemovals', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MachinerFacade(Type):
+    name = 'Machiner'
+    version = 1
+    schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+                                            'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+                                                                                 'type': 'array'},
+                                                                       'type': 'array'}},
+                                            'required': ['servers'],
+                                            'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'BytesResult': {'additionalProperties': False,
+                                     'properties': {'result': {'items': {'type': 'integer'},
+                                                               'type': 'array'}},
+                                     'required': ['result'],
+                                     'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'HostPort': {'additionalProperties': False,
+                                  'properties': {'Address': {'$ref': '#/definitions/Address'},
+                                                 'port': {'type': 'integer'}},
+                                  'required': ['Address', 'port'],
+                                  'type': 'object'},
+                     'JobsResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'jobs': {'items': {'type': 'string'},
+                                                            'type': 'array'}},
+                                    'required': ['jobs'],
+                                    'type': 'object'},
+                     'JobsResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/JobsResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineAddresses': {'additionalProperties': False,
+                                          'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+                                                                       'type': 'array'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag', 'addresses'],
+                                          'type': 'object'},
+                     'NetworkConfig': {'additionalProperties': False,
+                                       'properties': {'address': {'type': 'string'},
+                                                      'cidr': {'type': 'string'},
+                                                      'config-type': {'type': 'string'},
+                                                      'device-index': {'type': 'integer'},
+                                                      'disabled': {'type': 'boolean'},
+                                                      'dns-search-domains': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                      'dns-servers': {'items': {'type': 'string'},
+                                                                      'type': 'array'},
+                                                      'gateway-address': {'type': 'string'},
+                                                      'interface-name': {'type': 'string'},
+                                                      'interface-type': {'type': 'string'},
+                                                      'mac-address': {'type': 'string'},
+                                                      'mtu': {'type': 'integer'},
+                                                      'no-auto-start': {'type': 'boolean'},
+                                                      'parent-interface-name': {'type': 'string'},
+                                                      'provider-address-id': {'type': 'string'},
+                                                      'provider-id': {'type': 'string'},
+                                                      'provider-space-id': {'type': 'string'},
+                                                      'provider-subnet-id': {'type': 'string'},
+                                                      'provider-vlan-id': {'type': 'string'},
+                                                      'routes': {'items': {'$ref': '#/definitions/NetworkRoute'},
+                                                                 'type': 'array'},
+                                                      'vlan-tag': {'type': 'integer'}},
+                                       'required': ['device-index',
+                                                    'mac-address',
+                                                    'cidr',
+                                                    'mtu',
+                                                    'provider-id',
+                                                    'provider-subnet-id',
+                                                    'provider-space-id',
+                                                    'provider-address-id',
+                                                    'provider-vlan-id',
+                                                    'vlan-tag',
+                                                    'interface-name',
+                                                    'parent-interface-name',
+                                                    'interface-type',
+                                                    'disabled'],
+                                       'type': 'object'},
+                     'NetworkRoute': {'additionalProperties': False,
+                                      'properties': {'destination-cidr': {'type': 'string'},
+                                                     'gateway-ip': {'type': 'string'},
+                                                     'metric': {'type': 'integer'}},
+                                      'required': ['destination-cidr',
+                                                   'gateway-ip',
+                                                   'metric'],
+                                      'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'SetMachineNetworkConfig': {'additionalProperties': False,
+                                                 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'},
+                                                                           'type': 'array'},
+                                                                'tag': {'type': 'string'}},
+                                                 'required': ['tag', 'config'],
+                                                 'type': 'object'},
+                     'SetMachinesAddresses': {'additionalProperties': False,
+                                              'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'},
+                                                                                   'type': 'array'}},
+                                              'required': ['machine-addresses'],
+                                              'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringsResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'result': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                       'type': 'object'}},
+     'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
+                                     'type': 'object'},
+                    'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+                                     'type': 'object'},
+                    'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+                               'type': 'object'},
+                    'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'Jobs': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/JobsResults'}},
+                             'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                  'type': 'object'},
+                    'SetMachineAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'},
+                                                           'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                            'type': 'object'},
+                    'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}},
+                                                 'type': 'object'},
+                    'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                 'type': 'object'},
+                    'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                              'type': 'object'},
+                    'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                          'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(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='Machiner', request='APIAddresses', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(APIHostPortsResult)
+    async def APIHostPorts(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Machiner', request='APIHostPorts', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BytesResult)
+    async def CACert(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[int]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Machiner', request='CACert', 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>
+        '''
+        # 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>
+        '''
+        # 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
+
+
+
+    @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):
+        '''
+
+        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):
+        '''
+        machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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<+T_co>[~NetworkConfig]<~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 SetProviderNetworkConfig(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Machiner', request='SetProviderNetworkConfig', version=1, 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>
+        '''
+        # 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>
+        '''
+        # 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
+
+
+
+    @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):
+        '''
+
+        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'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MeterStatusResult': {'additionalProperties': False,
+                                           'properties': {'code': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'},
+                                                          'info': {'type': 'string'}},
+                                           'required': ['code', 'info'],
+                                           'type': 'object'},
+                     'MeterStatusResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/MeterStatusResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'}},
+     'properties': {'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/MeterStatusResults'}},
+                                       'type': 'object'},
+                    'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                         'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(MeterStatusResults)
+    async def GetMeterStatus(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~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
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def CleanupOldMetrics(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MetricsManager', request='CleanupOldMetrics', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SendMetrics(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MetricsManager', request='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'}},
+                                           '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'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(PhaseResults)
+    async def Phase(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~PhaseResult]<~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<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~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'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MasterMigrationStatus': {'additionalProperties': False,
+                                               'properties': {'migration-id': {'type': 'string'},
+                                                              'phase': {'type': 'string'},
+                                                              'phase-changed-time': {'format': 'date-time',
+                                                                                     'type': 'string'},
+                                                              'spec': {'$ref': '#/definitions/MigrationSpec'}},
+                                               'required': ['spec',
+                                                            'migration-id',
+                                                            'phase',
+                                                            'phase-changed-time'],
+                                               'type': 'object'},
+                     'MigrationModelInfo': {'additionalProperties': False,
+                                            'properties': {'agent-version': {'$ref': '#/definitions/Number'},
+                                                           'controller-agent-version': {'$ref': '#/definitions/Number'},
+                                                           'name': {'type': 'string'},
+                                                           'owner-tag': {'type': 'string'},
+                                                           'uuid': {'type': 'string'}},
+                                            'required': ['uuid',
+                                                         'name',
+                                                         'owner-tag',
+                                                         'agent-version',
+                                                         'controller-agent-version'],
+                                            'type': 'object'},
+                     'MigrationSpec': {'additionalProperties': False,
+                                       'properties': {'model-tag': {'type': 'string'},
+                                                      'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}},
+                                       'required': ['model-tag', 'target-info'],
+                                       'type': 'object'},
+                     'MigrationTargetInfo': {'additionalProperties': False,
+                                             'properties': {'addrs': {'items': {'type': 'string'},
+                                                                      'type': 'array'},
+                                                            'auth-tag': {'type': 'string'},
+                                                            'ca-cert': {'type': 'string'},
+                                                            'controller-tag': {'type': 'string'},
+                                                            'macaroons': {'type': 'string'},
+                                                            'password': {'type': 'string'}},
+                                             'required': ['controller-tag',
+                                                          'addrs',
+                                                          'ca-cert',
+                                                          'auth-tag'],
+                                             'type': 'object'},
+                     'MinionReports': {'additionalProperties': False,
+                                       'properties': {'failed': {'items': {'type': 'string'},
+                                                                 'type': 'array'},
+                                                      'migration-id': {'type': 'string'},
+                                                      'phase': {'type': 'string'},
+                                                      'success-count': {'type': 'integer'},
+                                                      'unknown-count': {'type': 'integer'},
+                                                      'unknown-sample': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                       'required': ['migration-id',
+                                                    'phase',
+                                                    'success-count',
+                                                    'unknown-count',
+                                                    'unknown-sample',
+                                                    'failed'],
+                                       'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'SerializedModel': {'additionalProperties': False,
+                                         'properties': {'bytes': {'items': {'type': 'integer'},
+                                                                  'type': 'array'},
+                                                        'charms': {'items': {'type': 'string'},
+                                                                   'type': 'array'},
+                                                        'resources': {'items': {'$ref': '#/definitions/SerializedModelResource'},
+                                                                      'type': 'array'},
+                                                        'tools': {'items': {'$ref': '#/definitions/SerializedModelTools'},
+                                                                  'type': 'array'}},
+                                         'required': ['bytes',
+                                                      'charms',
+                                                      'tools',
+                                                      'resources'],
+                                         'type': 'object'},
+                     'SerializedModelResource': {'additionalProperties': False,
+                                                 'properties': {'application': {'type': 'string'},
+                                                                'application-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
+                                                                'charmstore-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
+                                                                'name': {'type': 'string'},
+                                                                'unit-revisions': {'patternProperties': {'.*': {'$ref': '#/definitions/SerializedModelResourceRevision'}},
+                                                                                   'type': 'object'}},
+                                                 'required': ['application',
+                                                              'name',
+                                                              'application-revision',
+                                                              'charmstore-revision',
+                                                              'unit-revisions'],
+                                                 'type': 'object'},
+                     'SerializedModelResourceRevision': {'additionalProperties': False,
+                                                         'properties': {'description': {'type': 'string'},
+                                                                        'fingerprint': {'type': 'string'},
+                                                                        'origin': {'type': 'string'},
+                                                                        'path': {'type': 'string'},
+                                                                        'revision': {'type': 'integer'},
+                                                                        'size': {'type': 'integer'},
+                                                                        'timestamp': {'format': 'date-time',
+                                                                                      'type': 'string'},
+                                                                        'type': {'type': 'string'},
+                                                                        'username': {'type': 'string'}},
+                                                         'required': ['revision',
+                                                                      'type',
+                                                                      'path',
+                                                                      'description',
+                                                                      'origin',
+                                                                      'fingerprint',
+                                                                      'size',
+                                                                      'timestamp'],
+                                                         'type': 'object'},
+                     'SerializedModelTools': {'additionalProperties': False,
+                                              'properties': {'uri': {'type': 'string'},
+                                                             'version': {'type': 'string'}},
+                                              'required': ['version', 'uri'],
+                                              'type': 'object'},
+                     'SetMigrationPhaseArgs': {'additionalProperties': False,
+                                               'properties': {'phase': {'type': 'string'}},
+                                               'required': ['phase'],
+                                               'type': 'object'},
+                     'SetMigrationStatusMessageArgs': {'additionalProperties': False,
+                                                       'properties': {'message': {'type': 'string'}},
+                                                       'required': ['message'],
+                                                       'type': 'object'}},
+     'properties': {'Export': {'properties': {'Result': {'$ref': '#/definitions/SerializedModel'}},
+                               'type': 'object'},
+                    'MigrationStatus': {'properties': {'Result': {'$ref': '#/definitions/MasterMigrationStatus'}},
+                                        'type': 'object'},
+                    'MinionReports': {'properties': {'Result': {'$ref': '#/definitions/MinionReports'}},
+                                      'type': 'object'},
+                    'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/MigrationModelInfo'}},
+                                  'type': 'object'},
+                    'Prechecks': {'type': 'object'},
+                    'Reap': {'type': 'object'},
+                    'SetPhase': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationPhaseArgs'}},
+                                 'type': 'object'},
+                    'SetStatusMessage': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationStatusMessageArgs'}},
+                                         'type': 'object'},
+                    'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                              'type': 'object'},
+                    'WatchMinionReports': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                           'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(SerializedModel)
+    async def Export(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='Export', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(MasterMigrationStatus)
+    async def MigrationStatus(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('MigrationSpec')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='MigrationStatus', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(MinionReports)
+    async def MinionReports(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], int]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='MinionReports', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(MigrationModelInfo)
+    async def ModelInfo(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Number'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='ModelInfo', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Prechecks(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='Prechecks', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Reap(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='Reap', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetPhase(self, phase):
+        '''
+        phase : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='SetPhase', version=1, params=_params)
+        _params['phase'] = phase
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetStatusMessage(self, message):
+        '''
+        message : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='SetStatusMessage', version=1, params=_params)
+        _params['message'] = message
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def Watch(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='Watch', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchMinionReports(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMaster', request='WatchMinionReports', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MigrationMinionFacade(Type):
+    name = 'MigrationMinion'
+    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'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(None)
+    async def Report(self, migration_id, phase, success):
+        '''
+        migration_id : str
+        phase : str
+        success : bool
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMinion', request='Report', version=1, params=_params)
+        _params['migration-id'] = migration_id
+        _params['phase'] = phase
+        _params['success'] = success
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def Watch(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationMinion', request='Watch', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MigrationStatusWatcherFacade(Type):
+    name = 'MigrationStatusWatcher'
+    version = 1
+    schema =     {'definitions': {'MigrationStatus': {'additionalProperties': False,
+                                         'properties': {'attempt': {'type': 'integer'},
+                                                        'migration-id': {'type': 'string'},
+                                                        'phase': {'type': 'string'},
+                                                        'source-api-addrs': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                        'source-ca-cert': {'type': 'string'},
+                                                        'target-api-addrs': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                        'target-ca-cert': {'type': 'string'}},
+                                         'required': ['migration-id',
+                                                      'attempt',
+                                                      'phase',
+                                                      'source-api-addrs',
+                                                      'source-ca-cert',
+                                                      'target-api-addrs',
+                                                      'target-ca-cert'],
+                                         'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MigrationStatus'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(MigrationStatus)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Union[int, typing.Sequence<+T_co>[str]]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MigrationStatusWatcher', 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
+        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<+T_co>[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(None)
+    async def Import(self, bytes_, charms, tools):
+        '''
+        bytes_ : typing.Sequence<+T_co>[int]
+        charms : typing.Sequence<+T_co>[str]
+        tools : typing.Sequence<+T_co>[~SerializedModelTools]<~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'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelConfigResults': {'additionalProperties': False,
+                                            'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
+                                                                      'type': 'object'}},
+                                            'required': ['config'],
+                                            'type': 'object'},
+                     'ModelSLA': {'additionalProperties': False,
+                                  'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'},
+                                                 'creds': {'items': {'type': 'integer'},
+                                                           'type': 'array'}},
+                                  'required': ['ModelSLAInfo', 'creds'],
+                                  'type': 'object'},
+                     'ModelSLAInfo': {'additionalProperties': False,
+                                      'properties': {'level': {'type': 'string'},
+                                                     'owner': {'type': 'string'}},
+                                      'required': ['level', 'owner'],
+                                      'type': 'object'},
+                     'ModelSet': {'additionalProperties': False,
+                                  'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                         'type': 'object'}},
+                                                            'type': 'object'}},
+                                  'required': ['config'],
+                                  'type': 'object'},
+                     'ModelUnset': {'additionalProperties': False,
+                                    'properties': {'keys': {'items': {'type': 'string'},
+                                                            'type': 'array'}},
+                                    'required': ['keys'],
+                                    'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'}},
+     'properties': {'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}},
+                                 'type': 'object'},
+                    'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}},
+                                 'type': 'object'},
+                    'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}},
+                                   'type': 'object'},
+                    'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                 'type': 'object'},
+                    'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}},
+                                    'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ModelConfigResults)
+    async def ModelGet(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelConfig', request='ModelGet', 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
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelConfig', request='ModelSet', version=1, params=_params)
+        _params['config'] = config
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def ModelUnset(self, keys):
+        '''
+        keys : typing.Sequence<+T_co>[str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelConfig', request='ModelUnset', version=1, params=_params)
+        _params['keys'] = keys
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(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=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetSLALevel(self, creds, level):
+        '''
+        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
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class NotifyWatcherFacade(Type):
+    name = 'NotifyWatcher'
+    version = 1
+    schema =     {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(None)
+    async def Next(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='NotifyWatcher', request='Next', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='NotifyWatcher', request='Stop', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+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):
+        '''
+        patterns : typing.Sequence<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[~Payload]<~Payload>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Payloads', request='List', version=1, params=_params)
+        _params['patterns'] = patterns
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+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):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='PayloadsHookContext', request='List', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(PayloadResults)
+    async def LookUp(self, args):
+        '''
+        args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg>
+        Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='PayloadsHookContext', request='LookUp', version=1, params=_params)
+        _params['args'] = args
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(PayloadResults)
+    async def SetStatus(self, args):
+        '''
+        args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg>
+        Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='PayloadsHookContext', request='SetStatus', version=1, params=_params)
+        _params['args'] = args
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(PayloadResults)
+    async def Track(self, payloads):
+        '''
+        payloads : typing.Sequence<+T_co>[~Payload]<~Payload>
+        Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='PayloadsHookContext', request='Track', version=1, params=_params)
+        _params['payloads'] = payloads
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(PayloadResults)
+    async def Untrack(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='PayloadsHookContext', request='Untrack', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class PingerFacade(Type):
+    name = 'Pinger'
+    version = 1
+    schema =     {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(None)
+    async def Ping(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Pinger', request='Ping', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Pinger', request='Stop', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+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):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ProxyUpdater', request='ProxyConfig', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchForProxyConfigAndAPIHostPortChanges(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='ProxyUpdater', request='WatchForProxyConfigAndAPIHostPortChanges', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class RelationUnitsWatcherFacade(Type):
+    name = 'RelationUnitsWatcher'
+    version = 1
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'RelationUnitsChange': {'additionalProperties': False,
+                                             'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
+                                                                        'type': 'object'},
+                                                            'departed': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                             'required': ['changed'],
+                                             'type': 'object'},
+                     'RelationUnitsWatchResult': {'additionalProperties': False,
+                                                  'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'},
+                                                                 'error': {'$ref': '#/definitions/Error'},
+                                                                 'watcher-id': {'type': 'string'}},
+                                                  'required': ['watcher-id',
+                                                               'changes'],
+                                                  'type': 'object'},
+                     'UnitSettings': {'additionalProperties': False,
+                                      'properties': {'version': {'type': 'integer'}},
+                                      'required': ['version'],
+                                      'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationUnitsWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(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):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='RelationUnitsWatcher', request='Stop', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class RemoteApplicationWatcherFacade(Type):
+    name = 'RemoteApplicationWatcher'
+    version = 1
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'RemoteApplicationChange': {'additionalProperties': False,
+                                                 'properties': {'application-tag': {'type': 'string'},
+                                                                'life': {'type': 'string'},
+                                                                'relations': {'$ref': '#/definitions/RemoteRelationsChange'}},
+                                                 'required': ['application-tag',
+                                                              'life',
+                                                              'relations'],
+                                                 'type': 'object'},
+                     'RemoteApplicationWatchResult': {'additionalProperties': False,
+                                                      'properties': {'change': {'$ref': '#/definitions/RemoteApplicationChange'},
+                                                                     'error': {'$ref': '#/definitions/Error'},
+                                                                     'id': {'type': 'string'}},
+                                                      'required': ['id'],
+                                                      'type': 'object'},
+                     'RemoteEntityId': {'additionalProperties': False,
+                                        'properties': {'model-uuid': {'type': 'string'},
+                                                       'token': {'type': 'string'}},
+                                        'required': ['model-uuid', 'token'],
+                                        'type': 'object'},
+                     'RemoteRelationChange': {'additionalProperties': False,
+                                              'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}},
+                                                                               'type': 'object'},
+                                                             'departed-units': {'items': {'type': 'string'},
+                                                                                'type': 'array'},
+                                                             'id': {'type': 'integer'},
+                                                             'life': {'type': 'string'}},
+                                              'required': ['id', 'life'],
+                                              'type': 'object'},
+                     'RemoteRelationUnitChange': {'additionalProperties': False,
+                                                  'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                           'type': 'object'}},
+                                                                              'type': 'object'},
+                                                                 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}},
+                                                  'required': ['unit-id'],
+                                                  'type': 'object'},
+                     'RemoteRelationsChange': {'additionalProperties': False,
+                                               'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'},
+                                                                          'type': 'array'},
+                                                              'initial': {'type': 'boolean'},
+                                                              'removed': {'items': {'type': 'integer'},
+                                                                          'type': 'array'}},
+                                               'required': ['initial'],
+                                               'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteApplicationWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(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):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='RemoteApplicationWatcher', request='Stop', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class RemoteRelationsWatcherFacade(Type):
+    name = 'RemoteRelationsWatcher'
+    version = 1
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'RemoteEntityId': {'additionalProperties': False,
+                                        'properties': {'model-uuid': {'type': 'string'},
+                                                       'token': {'type': 'string'}},
+                                        'required': ['model-uuid', 'token'],
+                                        'type': 'object'},
+                     'RemoteRelationChange': {'additionalProperties': False,
+                                              'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}},
+                                                                               'type': 'object'},
+                                                             'departed-units': {'items': {'type': 'string'},
+                                                                                'type': 'array'},
+                                                             'id': {'type': 'integer'},
+                                                             'life': {'type': 'string'}},
+                                              'required': ['id', 'life'],
+                                              'type': 'object'},
+                     'RemoteRelationUnitChange': {'additionalProperties': False,
+                                                  'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                           'type': 'object'}},
+                                                                              'type': 'object'},
+                                                                 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}},
+                                                  'required': ['unit-id'],
+                                                  'type': 'object'},
+                     'RemoteRelationsChange': {'additionalProperties': False,
+                                               'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'},
+                                                                          'type': 'array'},
+                                                              'initial': {'type': 'boolean'},
+                                                              'removed': {'items': {'type': 'integer'},
+                                                                          'type': 'array'}},
+                                               'required': ['initial'],
+                                               'type': 'object'},
+                     'RemoteRelationsWatchResult': {'additionalProperties': False,
+                                                    'properties': {'RemoteRelationsWatcherId': {'type': 'string'},
+                                                                   'change': {'$ref': '#/definitions/RemoteRelationsChange'},
+                                                                   'error': {'$ref': '#/definitions/Error'}},
+                                                    'required': ['RemoteRelationsWatcherId'],
+                                                    'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteRelationsWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(RemoteRelationsWatchResult)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='RemoteRelationsWatcher', request='Next', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='RemoteRelationsWatcher', request='Stop', version=1, params=_params)
+
+        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'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddPendingResourcesResult)
+    async def AddPendingResources(self, addcharmwithauthorization, entity, resources):
+        '''
+        addcharmwithauthorization : AddCharmWithAuthorization
+        entity : Entity
+        resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
+        Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[str]]
+        '''
+        # 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
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ResourcesResults)
+    async def ListResources(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Resources', request='ListResources', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ResourcesHookContextFacade(Type):
+    name = 'ResourcesHookContext'
+    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,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ListUnitResourcesArgs': {'additionalProperties': False,
+                                               'properties': {'resource-names': {'items': {'type': 'string'},
+                                                                                 'type': 'array'}},
+                                               'required': ['resource-names'],
+                                               'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Resource': {'additionalProperties': False,
+                                  'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'},
+                                                 'application': {'type': 'string'},
+                                                 'id': {'type': 'string'},
+                                                 'pending-id': {'type': 'string'},
+                                                 'timestamp': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                 'username': {'type': 'string'}},
+                                  'required': ['CharmResource',
+                                               'id',
+                                               'pending-id',
+                                               'application',
+                                               'username',
+                                               'timestamp'],
+                                  'type': 'object'},
+                     'UnitResourceResult': {'additionalProperties': False,
+                                            'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
+                                                           'resource': {'$ref': '#/definitions/Resource'}},
+                                            'required': ['ErrorResult', 'resource'],
+                                            'type': 'object'},
+                     'UnitResourcesResult': {'additionalProperties': False,
+                                             'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
+                                                            'resources': {'items': {'$ref': '#/definitions/UnitResourceResult'},
+                                                                          'type': 'array'}},
+                                             'required': ['ErrorResult',
+                                                          'resources'],
+                                             'type': 'object'}},
+     'properties': {'GetResourceInfo': {'properties': {'Params': {'$ref': '#/definitions/ListUnitResourcesArgs'},
+                                                       'Result': {'$ref': '#/definitions/UnitResourcesResult'}},
+                                        'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(UnitResourcesResult)
+    async def GetResourceInfo(self, resource_names):
+        '''
+        resource_names : typing.Sequence<+T_co>[str]
+        Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ResourcesHookContext', request='GetResourceInfo', version=1, params=_params)
+        _params['resource-names'] = resource_names
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class RetryStrategyFacade(Type):
+    name = 'RetryStrategy'
+    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'},
+                     '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(RetryStrategyResults)
+    async def RetryStrategy(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='RetryStrategy', request='RetryStrategy', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchRetryStrategy(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='RetryStrategy', request='WatchRetryStrategy', version=1, params=_params)
+        _params['entities'] = entities
+        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):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~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 -> bool
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='SSHClient', request='Proxy', version=1, 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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='SSHClient', request='PublicKeys', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class SingularFacade(Type):
+    name = 'Singular'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'SingularClaim': {'additionalProperties': False,
+                                       'properties': {'controller-tag': {'type': 'string'},
+                                                      'duration': {'type': 'integer'},
+                                                      'model-tag': {'type': 'string'}},
+                                       'required': ['model-tag',
+                                                    'controller-tag',
+                                                    'duration'],
+                                       'type': 'object'},
+                     'SingularClaims': {'additionalProperties': False,
+                                        'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'},
+                                                                  'type': 'array'}},
+                                        'required': ['claims'],
+                                        'type': 'object'}},
+     'properties': {'Claim': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'},
+                                             'Result': {'$ref': '#/definitions/ErrorResults'}},
+                              'type': 'object'},
+                    'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                             'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def Claim(self, claims):
+        '''
+        claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Singular', request='Claim', version=1, params=_params)
+        _params['claims'] = claims
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def Wait(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Singular', request='Wait', 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):
+        '''
+
+        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': {'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'UndertakerModelInfo': {'additionalProperties': False,
+                                             'properties': {'global-name': {'type': 'string'},
+                                                            'is-system': {'type': 'boolean'},
+                                                            'life': {'type': 'string'},
+                                                            'name': {'type': 'string'},
+                                                            'uuid': {'type': 'string'}},
+                                             'required': ['uuid',
+                                                          'name',
+                                                          'global-name',
+                                                          'is-system',
+                                                          'life'],
+                                             'type': 'object'},
+                     'UndertakerModelInfoResult': {'additionalProperties': False,
+                                                   'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                  'result': {'$ref': '#/definitions/UndertakerModelInfo'}},
+                                                   'required': ['result'],
+                                                   'type': 'object'}},
+     'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/UndertakerModelInfoResult'}},
+                                  'type': 'object'},
+                    'ProcessDyingModel': {'type': 'object'},
+                    'RemoveModel': {'type': 'object'},
+                    'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'WatchModelResources': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                            'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', request='ModelConfig', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(UndertakerModelInfoResult)
+    async def ModelInfo(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', request='ModelInfo', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def ProcessDyingModel(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', request='ProcessDyingModel', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def RemoveModel(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', request='RemoveModel', version=1, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', 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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', request='UpdateStatus', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchModelResources(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Undertaker', request='WatchModelResources', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class UnitAssignerFacade(Type):
+    name = 'UnitAssigner'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     '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):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='UnitAssigner', request='AssignUnits', version=1, 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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='UnitAssigner', request='SetAgentStatus', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResult)
+    async def WatchUnitAssignments(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='UnitAssigner', request='WatchUnitAssignments', version=1, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class UpgraderFacade(Type):
+    name = 'Upgrader'
+    version = 1
+    schema =     {'definitions': {'Binary': {'additionalProperties': False,
+                                'properties': {'Arch': {'type': 'string'},
+                                               'Number': {'$ref': '#/definitions/Number'},
+                                               'Series': {'type': 'string'}},
+                                'required': ['Number', 'Series', 'Arch'],
+                                'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'EntitiesVersion': {'additionalProperties': False,
+                                         'properties': {'agent-tools': {'items': {'$ref': '#/definitions/EntityVersion'},
+                                                                        'type': 'array'}},
+                                         'required': ['agent-tools'],
+                                         'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityVersion': {'additionalProperties': False,
+                                       'properties': {'tag': {'type': 'string'},
+                                                      'tools': {'$ref': '#/definitions/Version'}},
+                                       'required': ['tag', 'tools'],
+                                       'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'Tools': {'additionalProperties': False,
+                               'properties': {'sha256': {'type': 'string'},
+                                              'size': {'type': 'integer'},
+                                              'url': {'type': 'string'},
+                                              'version': {'$ref': '#/definitions/Binary'}},
+                               'required': ['version', 'url', 'size'],
+                               'type': 'object'},
+                     'ToolsResult': {'additionalProperties': False,
+                                     'properties': {'disable-ssl-hostname-verification': {'type': 'boolean'},
+                                                    'error': {'$ref': '#/definitions/Error'},
+                                                    'tools': {'items': {'$ref': '#/definitions/Tools'},
+                                                              'type': 'array'}},
+                                     'required': ['tools',
+                                                  'disable-ssl-hostname-verification'],
+                                     'type': 'object'},
+                     'ToolsResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ToolsResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Version': {'additionalProperties': False,
+                                 'properties': {'version': {'$ref': '#/definitions/Binary'}},
+                                 'required': ['version'],
+                                 'type': 'object'},
+                     'VersionResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'version': {'$ref': '#/definitions/Number'}},
+                                       'type': 'object'},
+                     'VersionResults': {'additionalProperties': False,
+                                        'properties': {'results': {'items': {'$ref': '#/definitions/VersionResult'},
+                                                                   'type': 'array'}},
+                                        'required': ['results'],
+                                        'type': 'object'}},
+     'properties': {'DesiredVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/VersionResults'}},
+                                       'type': 'object'},
+                    'SetTools': {'properties': {'Params': {'$ref': '#/definitions/EntitiesVersion'},
+                                                'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                 'type': 'object'},
+                    'Tools': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/ToolsResults'}},
+                              'type': 'object'},
+                    'WatchAPIVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                        'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(VersionResults)
+    async def DesiredVersion(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~VersionResult]<~VersionResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Upgrader', request='WatchAPIVersion', version=1, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class UserManagerFacade(Type):
+    name = 'UserManager'
+    version = 1
+    schema =     {'definitions': {'AddUser': {'additionalProperties': False,
+                                 'properties': {'display-name': {'type': 'string'},
+                                                'password': {'type': 'string'},
+                                                'username': {'type': 'string'}},
+                                 'required': ['username', 'display-name'],
+                                 'type': 'object'},
+                     'AddUserResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'secret-key': {'items': {'type': 'integer'},
+                                                                     'type': 'array'},
+                                                      'tag': {'type': 'string'}},
+                                       'type': 'object'},
+                     'AddUserResults': {'additionalProperties': False,
+                                        'properties': {'results': {'items': {'$ref': '#/definitions/AddUserResult'},
+                                                                   'type': 'array'}},
+                                        'required': ['results'],
+                                        'type': 'object'},
+                     'AddUsers': {'additionalProperties': False,
+                                  'properties': {'users': {'items': {'$ref': '#/definitions/AddUser'},
+                                                           'type': 'array'}},
+                                  'required': ['users'],
+                                  'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityPassword': {'additionalProperties': False,
+                                        'properties': {'password': {'type': 'string'},
+                                                       'tag': {'type': 'string'}},
+                                        'required': ['tag', 'password'],
+                                        'type': 'object'},
+                     'EntityPasswords': {'additionalProperties': False,
+                                         'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'},
+                                                                    'type': 'array'}},
+                                         'required': ['changes'],
+                                         'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'UserInfo': {'additionalProperties': False,
+                                  'properties': {'access': {'type': 'string'},
+                                                 'created-by': {'type': 'string'},
+                                                 'date-created': {'format': 'date-time',
+                                                                  'type': 'string'},
+                                                 'disabled': {'type': 'boolean'},
+                                                 'display-name': {'type': 'string'},
+                                                 'last-connection': {'format': 'date-time',
+                                                                     'type': 'string'},
+                                                 'username': {'type': 'string'}},
+                                  'required': ['username',
+                                               'display-name',
+                                               'access',
+                                               'created-by',
+                                               'date-created',
+                                               'disabled'],
+                                  'type': 'object'},
+                     'UserInfoRequest': {'additionalProperties': False,
+                                         'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                                     'type': 'array'},
+                                                        'include-disabled': {'type': 'boolean'}},
+                                         'required': ['entities',
+                                                      'include-disabled'],
+                                         'type': 'object'},
+                     'UserInfoResult': {'additionalProperties': False,
+                                        'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                       'result': {'$ref': '#/definitions/UserInfo'}},
+                                        'type': 'object'},
+                     'UserInfoResults': {'additionalProperties': False,
+                                         'properties': {'results': {'items': {'$ref': '#/definitions/UserInfoResult'},
+                                                                    'type': 'array'}},
+                                         'required': ['results'],
+                                         'type': 'object'}},
+     'properties': {'AddUser': {'properties': {'Params': {'$ref': '#/definitions/AddUsers'},
+                                               'Result': {'$ref': '#/definitions/AddUserResults'}},
+                                'type': 'object'},
+                    'DisableUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                    'type': 'object'},
+                    'EnableUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'RemoveUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'SetPassword': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                    'type': 'object'},
+                    'UserInfo': {'properties': {'Params': {'$ref': '#/definitions/UserInfoRequest'},
+                                                'Result': {'$ref': '#/definitions/UserInfoResults'}},
+                                 'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddUserResults)
+    async def AddUser(self, users):
+        '''
+        users : typing.Sequence<+T_co>[~AddUser]<~AddUser>
+        Returns -> typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        include_disabled : bool
+        Returns -> typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='UserManager', request='UserInfo', version=1, params=_params)
+        _params['entities'] = entities
+        _params['include-disabled'] = include_disabled
+        reply = await self.rpc(msg)
+        return reply
+
+
diff --git a/juju/client/_client2.py b/juju/client/_client2.py
new file mode 100644 (file)
index 0000000..283e803
--- /dev/null
@@ -0,0 +1,4227 @@
+# 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 ActionFacade(Type):
+    name = 'Action'
+    version = 2
+    schema =     {'definitions': {'Action': {'additionalProperties': False,
+                                'properties': {'name': {'type': 'string'},
+                                               'parameters': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                               'receiver': {'type': 'string'},
+                                               'tag': {'type': 'string'}},
+                                'required': ['tag', 'receiver', 'name'],
+                                'type': 'object'},
+                     'ActionResult': {'additionalProperties': False,
+                                      'properties': {'action': {'$ref': '#/definitions/Action'},
+                                                     'completed': {'format': 'date-time',
+                                                                   'type': 'string'},
+                                                     'enqueued': {'format': 'date-time',
+                                                                  'type': 'string'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'message': {'type': 'string'},
+                                                     'output': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                             'type': 'object'}},
+                                                                'type': 'object'},
+                                                     'started': {'format': 'date-time',
+                                                                 'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'type': 'object'},
+                     'ActionResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'ActionSpec': {'additionalProperties': False,
+                                    'properties': {'description': {'type': 'string'},
+                                                   'params': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'}},
+                                    'required': ['description', 'params'],
+                                    'type': 'object'},
+                     'Actions': {'additionalProperties': False,
+                                 'properties': {'actions': {'items': {'$ref': '#/definitions/Action'},
+                                                            'type': 'array'}},
+                                 'type': 'object'},
+                     'ActionsByName': {'additionalProperties': False,
+                                       'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                  'type': 'array'},
+                                                      'error': {'$ref': '#/definitions/Error'},
+                                                      'name': {'type': 'string'}},
+                                       'type': 'object'},
+                     'ActionsByNames': {'additionalProperties': False,
+                                        'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByName'},
+                                                                   'type': 'array'}},
+                                        'type': 'object'},
+                     'ActionsByReceiver': {'additionalProperties': False,
+                                           'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                      'type': 'array'},
+                                                          'error': {'$ref': '#/definitions/Error'},
+                                                          'receiver': {'type': 'string'}},
+                                           'type': 'object'},
+                     'ActionsByReceivers': {'additionalProperties': False,
+                                            'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'ApplicationCharmActionsResult': {'additionalProperties': False,
+                                                       'properties': {'actions': {'patternProperties': {'.*': {'$ref': '#/definitions/ActionSpec'}},
+                                                                                  'type': 'object'},
+                                                                      'application-tag': {'type': 'string'},
+                                                                      'error': {'$ref': '#/definitions/Error'}},
+                                                       'type': 'object'},
+                     'ApplicationsCharmActionsResults': {'additionalProperties': False,
+                                                         'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationCharmActionsResult'},
+                                                                                    'type': 'array'}},
+                                                         'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'FindActionsByNames': {'additionalProperties': False,
+                                            'properties': {'names': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                            'type': 'object'},
+                     'FindTags': {'additionalProperties': False,
+                                  'properties': {'prefixes': {'items': {'type': 'string'},
+                                                              'type': 'array'}},
+                                  'required': ['prefixes'],
+                                  'type': 'object'},
+                     'FindTagsResults': {'additionalProperties': False,
+                                         'properties': {'matches': {'patternProperties': {'.*': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                                 'type': 'array'}},
+                                                                    'type': 'object'}},
+                                         'required': ['matches'],
+                                         'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'RunParams': {'additionalProperties': False,
+                                   'properties': {'applications': {'items': {'type': 'string'},
+                                                                   'type': 'array'},
+                                                  'commands': {'type': 'string'},
+                                                  'machines': {'items': {'type': 'string'},
+                                                               'type': 'array'},
+                                                  'timeout': {'type': 'integer'},
+                                                  'units': {'items': {'type': 'string'},
+                                                            'type': 'array'}},
+                                   'required': ['commands', 'timeout'],
+                                   'type': 'object'}},
+     'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'ApplicationsCharmsActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                 'Result': {'$ref': '#/definitions/ApplicationsCharmActionsResults'}},
+                                                  'type': 'object'},
+                    'Cancel': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/ActionResults'}},
+                               'type': 'object'},
+                    'Enqueue': {'properties': {'Params': {'$ref': '#/definitions/Actions'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'FindActionTagsByPrefix': {'properties': {'Params': {'$ref': '#/definitions/FindTags'},
+                                                              'Result': {'$ref': '#/definitions/FindTagsResults'}},
+                                               'type': 'object'},
+                    'FindActionsByNames': {'properties': {'Params': {'$ref': '#/definitions/FindActionsByNames'},
+                                                          'Result': {'$ref': '#/definitions/ActionsByNames'}},
+                                           'type': 'object'},
+                    'ListAll': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                'type': 'object'},
+                    'ListCompleted': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                      'type': 'object'},
+                    'ListPending': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                    'type': 'object'},
+                    'ListRunning': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                    'type': 'object'},
+                    'Run': {'properties': {'Params': {'$ref': '#/definitions/RunParams'},
+                                           'Result': {'$ref': '#/definitions/ActionResults'}},
+                            'type': 'object'},
+                    'RunOnAllMachines': {'properties': {'Params': {'$ref': '#/definitions/RunParams'},
+                                                        'Result': {'$ref': '#/definitions/ActionResults'}},
+                                         'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ActionResults)
+    async def Actions(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # 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
+
+
+
+    @ReturnMapping(ActionsByNames)
+    async def FindActionsByNames(self, names):
+        '''
+        names : typing.Sequence<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        commands : str
+        machines : typing.Sequence<+T_co>[str]
+        timeout : int
+        units : typing.Sequence<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Action', request='Run', version=2, params=_params)
+        _params['applications'] = applications
+        _params['commands'] = commands
+        _params['machines'] = machines
+        _params['timeout'] = timeout
+        _params['units'] = units
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionResults)
+    async def RunOnAllMachines(self, applications, commands, machines, timeout, units):
+        '''
+        applications : typing.Sequence<+T_co>[str]
+        commands : str
+        machines : typing.Sequence<+T_co>[str]
+        timeout : int
+        units : typing.Sequence<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Action', request='RunOnAllMachines', version=2, params=_params)
+        _params['applications'] = applications
+        _params['commands'] = commands
+        _params['machines'] = machines
+        _params['timeout'] = timeout
+        _params['units'] = units
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class AgentFacade(Type):
+    name = 'Agent'
+    version = 2
+    schema =     {'definitions': {'AgentGetEntitiesResult': {'additionalProperties': False,
+                                                'properties': {'container-type': {'type': 'string'},
+                                                               'error': {'$ref': '#/definitions/Error'},
+                                                               'jobs': {'items': {'type': 'string'},
+                                                                        'type': 'array'},
+                                                               'life': {'type': 'string'}},
+                                                'required': ['life',
+                                                             'jobs',
+                                                             'container-type'],
+                                                'type': 'object'},
+                     'AgentGetEntitiesResults': {'additionalProperties': False,
+                                                 'properties': {'entities': {'items': {'$ref': '#/definitions/AgentGetEntitiesResult'},
+                                                                             'type': 'array'}},
+                                                 'required': ['entities'],
+                                                 'type': 'object'},
+                     'CloudCredential': {'additionalProperties': False,
+                                         'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                  'type': 'object'},
+                                                        'auth-type': {'type': 'string'},
+                                                        'redacted': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                         'required': ['auth-type'],
+                                         'type': 'object'},
+                     'CloudSpec': {'additionalProperties': False,
+                                   'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
+                                                  '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'},
+                     'ControllerConfigResult': {'additionalProperties': False,
+                                                'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'}},
+                                                'required': ['config'],
+                                                'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityPassword': {'additionalProperties': False,
+                                        'properties': {'password': {'type': 'string'},
+                                                       'tag': {'type': 'string'}},
+                                        'required': ['tag', 'password'],
+                                        'type': 'object'},
+                     'EntityPasswords': {'additionalProperties': False,
+                                         'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'},
+                                                                    'type': 'array'}},
+                                         'required': ['changes'],
+                                         'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'IsMasterResult': {'additionalProperties': False,
+                                        'properties': {'master': {'type': 'boolean'}},
+                                        'required': ['master'],
+                                        'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'ModelTag': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'StateServingInfo': {'additionalProperties': False,
+                                          'properties': {'api-port': {'type': 'integer'},
+                                                         'ca-private-key': {'type': 'string'},
+                                                         'cert': {'type': 'string'},
+                                                         'private-key': {'type': 'string'},
+                                                         'shared-secret': {'type': 'string'},
+                                                         'state-port': {'type': 'integer'},
+                                                         'system-identity': {'type': 'string'}},
+                                          'required': ['api-port',
+                                                       'state-port',
+                                                       'cert',
+                                                       'private-key',
+                                                       'ca-private-key',
+                                                       'shared-secret',
+                                                       'system-identity'],
+                                          'type': 'object'}},
+     'properties': {'ClearReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                    'type': 'object'},
+                    'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                 'Result': {'$ref': '#/definitions/CloudSpecResults'}},
+                                  'type': 'object'},
+                    'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}},
+                                         'type': 'object'},
+                    'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'},
+                                                    'Result': {'$ref': '#/definitions/CloudSpecResult'}},
+                                     'type': 'object'},
+                    'GetEntities': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/AgentGetEntitiesResults'}},
+                                    'type': 'object'},
+                    'IsMaster': {'properties': {'Result': {'$ref': '#/definitions/IsMasterResult'}},
+                                 'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'StateServingInfo': {'properties': {'Result': {'$ref': '#/definitions/StateServingInfo'}},
+                                         'type': 'object'},
+                    'WatchCredentials': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                         'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def ClearReboot(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # 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(ControllerConfigResult)
+    async def ControllerConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='ControllerConfig', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(CloudSpecResult)
+    async def GetCloudSpec(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='GetCloudSpec', version=2, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='GetEntities', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(IsMasterResult)
+    async def IsMaster(self):
+        '''
+
+        Returns -> bool
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='IsMaster', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='SetPasswords', version=2, params=_params)
+        _params['changes'] = changes
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StateServingInfo)
+    async def StateServingInfo(self):
+        '''
+
+        Returns -> typing.Union[int, str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='StateServingInfo', version=2, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='WatchCredentials', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Agent', request='WatchForModelConfigChanges', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class AllModelWatcherFacade(Type):
+    name = 'AllModelWatcher'
+    version = 2
+    schema =     {'definitions': {'AllWatcherNextResults': {'additionalProperties': False,
+                                               'properties': {'deltas': {'items': {'$ref': '#/definitions/Delta'},
+                                                                         'type': 'array'}},
+                                               'required': ['deltas'],
+                                               'type': 'object'},
+                     'Delta': {'additionalProperties': False,
+                               'properties': {'entity': {'additionalProperties': True,
+                                                         'type': 'object'},
+                                              'removed': {'type': 'boolean'}},
+                               'required': ['removed', 'entity'],
+                               'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherNextResults'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AllWatcherNextResults)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~Delta]<~Delta>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='AllModelWatcher', request='Next', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='AllModelWatcher', request='Stop', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class AnnotationsFacade(Type):
+    name = 'Annotations'
+    version = 2
+    schema =     {'definitions': {'AnnotationsGetResult': {'additionalProperties': False,
+                                              'properties': {'annotations': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                             'type': 'object'},
+                                                             'entity': {'type': 'string'},
+                                                             'error': {'$ref': '#/definitions/ErrorResult'}},
+                                              'required': ['entity', 'annotations'],
+                                              'type': 'object'},
+                     'AnnotationsGetResults': {'additionalProperties': False,
+                                               'properties': {'results': {'items': {'$ref': '#/definitions/AnnotationsGetResult'},
+                                                                          'type': 'array'}},
+                                               'required': ['results'],
+                                               'type': 'object'},
+                     'AnnotationsSet': {'additionalProperties': False,
+                                        'properties': {'annotations': {'items': {'$ref': '#/definitions/EntityAnnotations'},
+                                                                       'type': 'array'}},
+                                        'required': ['annotations'],
+                                        'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityAnnotations': {'additionalProperties': False,
+                                           'properties': {'annotations': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                          'type': 'object'},
+                                                          'entity': {'type': 'string'}},
+                                           'required': ['entity', 'annotations'],
+                                           'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+     'properties': {'Get': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                           'Result': {'$ref': '#/definitions/AnnotationsGetResults'}},
+                            'type': 'object'},
+                    'Set': {'properties': {'Params': {'$ref': '#/definitions/AnnotationsSet'},
+                                           'Result': {'$ref': '#/definitions/ErrorResults'}},
+                            'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AnnotationsGetResults)
+    async def Get(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Annotations', request='Get', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def Set(self, annotations):
+        '''
+        annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Annotations', request='Set', version=2, params=_params)
+        _params['annotations'] = annotations
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ApplicationFacade(Type):
+    name = 'Application'
+    version = 2
+    schema =     {'definitions': {'AddApplicationUnits': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'num-units': {'type': 'integer'},
+                                                            'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                          'type': 'array'}},
+                                             'required': ['application',
+                                                          'num-units',
+                                                          'placement'],
+                                             'type': 'object'},
+                     'AddApplicationUnitsResults': {'additionalProperties': False,
+                                                    'properties': {'units': {'items': {'type': 'string'},
+                                                                             'type': 'array'}},
+                                                    'required': ['units'],
+                                                    'type': 'object'},
+                     'AddRelation': {'additionalProperties': False,
+                                     'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                     'required': ['endpoints'],
+                                     'type': 'object'},
+                     'AddRelationResults': {'additionalProperties': False,
+                                            'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+                                                                         'type': 'object'}},
+                                            'required': ['endpoints'],
+                                            'type': 'object'},
+                     'ApplicationCharmRelations': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'ApplicationCharmRelationsResults': {'additionalProperties': False,
+                                                          'properties': {'charm-relations': {'items': {'type': 'string'},
+                                                                                             'type': 'array'}},
+                                                          'required': ['charm-relations'],
+                                                          'type': 'object'},
+                     'ApplicationDeploy': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'channel': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'config': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                     'type': 'object'},
+                                                          'config-yaml': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                          'num-units': {'type': 'integer'},
+                                                          'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                        'type': 'array'},
+                                                          'resources': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                        'type': 'object'},
+                                                          'series': {'type': 'string'},
+                                                          'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}},
+                                                                      'type': 'object'}},
+                                           'required': ['application',
+                                                        'series',
+                                                        'charm-url',
+                                                        'channel',
+                                                        'num-units',
+                                                        'config-yaml',
+                                                        'constraints'],
+                                           'type': 'object'},
+                     'ApplicationDestroy': {'additionalProperties': False,
+                                            'properties': {'application': {'type': 'string'}},
+                                            'required': ['application'],
+                                            'type': 'object'},
+                     'ApplicationExpose': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'}},
+                                           'required': ['application'],
+                                           'type': 'object'},
+                     'ApplicationGet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'}},
+                                        'required': ['application'],
+                                        'type': 'object'},
+                     'ApplicationGetResults': {'additionalProperties': False,
+                                               'properties': {'application': {'type': 'string'},
+                                                              'charm': {'type': 'string'},
+                                                              'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                      'type': 'object'}},
+                                                                         'type': 'object'},
+                                                              'constraints': {'$ref': '#/definitions/Value'},
+                                                              'series': {'type': 'string'}},
+                                               'required': ['application',
+                                                            'charm',
+                                                            'config',
+                                                            'constraints',
+                                                            'series'],
+                                               'type': 'object'},
+                     'ApplicationMetricCredential': {'additionalProperties': False,
+                                                     'properties': {'application': {'type': 'string'},
+                                                                    'metrics-credentials': {'items': {'type': 'integer'},
+                                                                                            'type': 'array'}},
+                                                     'required': ['application',
+                                                                  'metrics-credentials'],
+                                                     'type': 'object'},
+                     'ApplicationMetricCredentials': {'additionalProperties': False,
+                                                      'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'},
+                                                                               'type': 'array'}},
+                                                      'required': ['creds'],
+                                                      'type': 'object'},
+                     'ApplicationSet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'options': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                   'type': 'object'}},
+                                        'required': ['application', 'options'],
+                                        'type': 'object'},
+                     'ApplicationSetCharm': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'channel': {'type': 'string'},
+                                                            'charm-url': {'type': 'string'},
+                                                            'config-settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                            'config-settings-yaml': {'type': 'string'},
+                                                            'force-series': {'type': 'boolean'},
+                                                            'force-units': {'type': 'boolean'},
+                                                            'resource-ids': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                             'type': 'object'},
+                                                            'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}},
+                                                                                    'type': 'object'}},
+                                             'required': ['application',
+                                                          'charm-url',
+                                                          'channel',
+                                                          'force-units',
+                                                          'force-series'],
+                                             'type': 'object'},
+                     'ApplicationUnexpose': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'}},
+                                             'required': ['application'],
+                                             'type': 'object'},
+                     'ApplicationUnset': {'additionalProperties': False,
+                                          'properties': {'application': {'type': 'string'},
+                                                         'options': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                          'required': ['application', 'options'],
+                                          'type': 'object'},
+                     'ApplicationUpdate': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'force-charm-url': {'type': 'boolean'},
+                                                          'force-series': {'type': 'boolean'},
+                                                          'min-units': {'type': 'integer'},
+                                                          'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                       'type': 'object'},
+                                                          'settings-yaml': {'type': 'string'}},
+                                           'required': ['application',
+                                                        'charm-url',
+                                                        'force-charm-url',
+                                                        'force-series',
+                                                        'settings-yaml'],
+                                           'type': 'object'},
+                     'ApplicationsDeploy': {'additionalProperties': False,
+                                            'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'},
+                                                                            'type': 'array'}},
+                                            'required': ['applications'],
+                                            'type': 'object'},
+                     'CharmRelation': {'additionalProperties': False,
+                                       'properties': {'interface': {'type': 'string'},
+                                                      'limit': {'type': 'integer'},
+                                                      'name': {'type': 'string'},
+                                                      'optional': {'type': 'boolean'},
+                                                      'role': {'type': 'string'},
+                                                      'scope': {'type': 'string'}},
+                                       'required': ['name',
+                                                    'role',
+                                                    'interface',
+                                                    'optional',
+                                                    'limit',
+                                                    'scope'],
+                                       'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'DestroyApplicationUnits': {'additionalProperties': False,
+                                                 'properties': {'unit-names': {'items': {'type': 'string'},
+                                                                               'type': 'array'}},
+                                                 'required': ['unit-names'],
+                                                 'type': 'object'},
+                     'DestroyRelation': {'additionalProperties': False,
+                                         'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                      'type': 'array'}},
+                                         'required': ['endpoints'],
+                                         'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'GetApplicationConstraints': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'GetConstraintsResults': {'additionalProperties': False,
+                                               'properties': {'constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['constraints'],
+                                               'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'SetConstraints': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['application', 'constraints'],
+                                        'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
+                                                   'Result': {'$ref': '#/definitions/AddRelationResults'}},
+                                    'type': 'object'},
+                    'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
+                                                'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
+                                 'type': 'object'},
+                    'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
+                                                      'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
+                                       'type': 'object'},
+                    'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}},
+                                'type': 'object'},
+                    'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
+                                        'type': 'object'},
+                    'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}},
+                                     'type': 'object'},
+                    'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}},
+                               'type': 'object'},
+                    'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                           'Result': {'$ref': '#/definitions/ApplicationGetResults'}},
+                            'type': 'object'},
+                    'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                                   'Result': {'$ref': '#/definitions/StringResult'}},
+                                    'type': 'object'},
+                    'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'},
+                                                      'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+                                       'type': 'object'},
+                    'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}},
+                            'type': 'object'},
+                    'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}},
+                                 'type': 'object'},
+                    'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+                                       'type': 'object'},
+                    'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}},
+                                 'type': 'object'},
+                    'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}},
+                              'type': 'object'},
+                    'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}},
+                               'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddRelationResults)
+    async def AddRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='AddRelation', version=2, params=_params)
+        _params['endpoints'] = endpoints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(AddApplicationUnitsResults)
+    async def AddUnits(self, application, num_units, placement):
+        '''
+        application : str
+        num_units : int
+        placement : typing.Sequence<+T_co>[~Placement]<~Placement>
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='AddUnits', version=2, params=_params)
+        _params['application'] = application
+        _params['num-units'] = num_units
+        _params['placement'] = placement
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationCharmRelationsResults)
+    async def CharmRelations(self, application):
+        '''
+        application : str
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Deploy', version=2, params=_params)
+        _params['applications'] = applications
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Destroy(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Destroy', version=2, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def DestroyRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='DestroyUnits', version=2, params=_params)
+        _params['unit-names'] = unit_names
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Expose(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Expose', version=2, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationGetResults)
+    async def Get(self, application):
+        '''
+        application : str
+        Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Get', version=2, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def GetCharmURL(self, application):
+        '''
+        application : str
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='GetCharmURL', version=2, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(GetConstraintsResults)
+    async def GetConstraints(self, application):
+        '''
+        application : str
+        Returns -> Value
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='GetConstraints', version=2, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Set(self, application, options):
+        '''
+        application : str
+        options : typing.Mapping<~KT, +VT_co>[str, str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Set', version=2, params=_params)
+        _params['application'] = application
+        _params['options'] = options
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints):
+        '''
+        application : str
+        channel : str
+        charm_url : str
+        config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+        config_settings_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
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetCharm', version=2, params=_params)
+        _params['application'] = application
+        _params['channel'] = channel
+        _params['charm-url'] = charm_url
+        _params['config-settings'] = config_settings
+        _params['config-settings-yaml'] = config_settings_yaml
+        _params['force-series'] = force_series
+        _params['force-units'] = force_units
+        _params['resource-ids'] = resource_ids
+        _params['storage-constraints'] = storage_constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetConstraints(self, application, constraints):
+        '''
+        application : str
+        constraints : Value
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetConstraints', version=2, params=_params)
+        _params['application'] = application
+        _params['constraints'] = constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetMetricCredentials(self, creds):
+        '''
+        creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetMetricCredentials', version=2, params=_params)
+        _params['creds'] = creds
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Unexpose(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Unexpose', version=2, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Unset(self, application, options):
+        '''
+        application : str
+        options : typing.Sequence<+T_co>[str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Unset', version=2, params=_params)
+        _params['application'] = application
+        _params['options'] = options
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml):
+        '''
+        application : str
+        charm_url : str
+        constraints : Value
+        force_charm_url : bool
+        force_series : bool
+        min_units : int
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        settings_yaml : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Update', version=2, params=_params)
+        _params['application'] = application
+        _params['charm-url'] = charm_url
+        _params['constraints'] = constraints
+        _params['force-charm-url'] = force_charm_url
+        _params['force-series'] = force_series
+        _params['min-units'] = min_units
+        _params['settings'] = settings
+        _params['settings-yaml'] = settings_yaml
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class BlockFacade(Type):
+    name = 'Block'
+    version = 2
+    schema =     {'definitions': {'Block': {'additionalProperties': False,
+                               'properties': {'id': {'type': 'string'},
+                                              'message': {'type': 'string'},
+                                              'tag': {'type': 'string'},
+                                              'type': {'type': 'string'}},
+                               'required': ['id', 'tag', 'type'],
+                               'type': 'object'},
+                     'BlockResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                    'result': {'$ref': '#/definitions/Block'}},
+                                     'required': ['result'],
+                                     'type': 'object'},
+                     'BlockResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/BlockResult'},
+                                                                 'type': 'array'}},
+                                      'type': 'object'},
+                     'BlockSwitchParams': {'additionalProperties': False,
+                                           'properties': {'message': {'type': 'string'},
+                                                          'type': {'type': 'string'}},
+                                           'required': ['type'],
+                                           'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+     'properties': {'List': {'properties': {'Result': {'$ref': '#/definitions/BlockResults'}},
+                             'type': 'object'},
+                    'SwitchBlockOff': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResult'}},
+                                       'type': 'object'},
+                    'SwitchBlockOn': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResult'}},
+                                      'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(BlockResults)
+    async def List(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~BlockResult]<~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 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'},
+                     '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'],
+                                     '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<~KT, +VT_co>[str, ~CharmOption]<~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<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[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 DiscoverSpacesFacade(Type):
+    name = 'DiscoverSpaces'
+    version = 2
+    schema =     {'definitions': {'AddSubnetParams': {'additionalProperties': False,
+                                         'properties': {'provider-network-id': {'type': 'string'},
+                                                        'space-tag': {'type': 'string'},
+                                                        'subnet-provider-id': {'type': 'string'},
+                                                        'subnet-tag': {'type': 'string'},
+                                                        'vlan-tag': {'type': 'integer'},
+                                                        'zones': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                         'required': ['space-tag'],
+                                         'type': 'object'},
+                     'AddSubnetsParams': {'additionalProperties': False,
+                                          'properties': {'subnets': {'items': {'$ref': '#/definitions/AddSubnetParams'},
+                                                                     'type': 'array'}},
+                                          'required': ['subnets'],
+                                          'type': 'object'},
+                     'CreateSpaceParams': {'additionalProperties': False,
+                                           'properties': {'provider-id': {'type': 'string'},
+                                                          'public': {'type': 'boolean'},
+                                                          'space-tag': {'type': 'string'},
+                                                          'subnet-tags': {'items': {'type': 'string'},
+                                                                          'type': 'array'}},
+                                           'required': ['subnet-tags',
+                                                        'space-tag',
+                                                        'public'],
+                                           'type': 'object'},
+                     'CreateSpacesParams': {'additionalProperties': False,
+                                            'properties': {'spaces': {'items': {'$ref': '#/definitions/CreateSpaceParams'},
+                                                                      'type': 'array'}},
+                                            'required': ['spaces'],
+                                            'type': 'object'},
+                     'DiscoverSpacesResults': {'additionalProperties': False,
+                                               'properties': {'results': {'items': {'$ref': '#/definitions/ProviderSpace'},
+                                                                          'type': 'array'}},
+                                               'required': ['results'],
+                                               'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ListSubnetsResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/Subnet'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'ProviderSpace': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'name': {'type': 'string'},
+                                                      'provider-id': {'type': 'string'},
+                                                      'subnets': {'items': {'$ref': '#/definitions/Subnet'},
+                                                                  'type': 'array'}},
+                                       'required': ['name',
+                                                    'provider-id',
+                                                    'subnets'],
+                                       'type': 'object'},
+                     'Subnet': {'additionalProperties': False,
+                                'properties': {'cidr': {'type': 'string'},
+                                               'life': {'type': 'string'},
+                                               'provider-id': {'type': 'string'},
+                                               'provider-network-id': {'type': 'string'},
+                                               'provider-space-id': {'type': 'string'},
+                                               'space-tag': {'type': 'string'},
+                                               'status': {'type': 'string'},
+                                               'vlan-tag': {'type': 'integer'},
+                                               'zones': {'items': {'type': 'string'},
+                                                         'type': 'array'}},
+                                'required': ['cidr',
+                                             'vlan-tag',
+                                             'life',
+                                             'space-tag',
+                                             'zones'],
+                                'type': 'object'},
+                     'SubnetsFilters': {'additionalProperties': False,
+                                        'properties': {'space-tag': {'type': 'string'},
+                                                       'zone': {'type': 'string'}},
+                                        'type': 'object'}},
+     'properties': {'AddSubnets': {'properties': {'Params': {'$ref': '#/definitions/AddSubnetsParams'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'CreateSpaces': {'properties': {'Params': {'$ref': '#/definitions/CreateSpacesParams'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'ListSpaces': {'properties': {'Result': {'$ref': '#/definitions/DiscoverSpacesResults'}},
+                                   'type': 'object'},
+                    'ListSubnets': {'properties': {'Params': {'$ref': '#/definitions/SubnetsFilters'},
+                                                   'Result': {'$ref': '#/definitions/ListSubnetsResults'}},
+                                    'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def AddSubnets(self, subnets):
+        '''
+        subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='DiscoverSpaces', request='CreateSpaces', version=2, params=_params)
+        _params['spaces'] = spaces
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(DiscoverSpacesResults)
+    async def ListSpaces(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='DiscoverSpaces', request='ListSpaces', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ListSubnetsResults)
+    async def ListSubnets(self, space_tag, zone):
+        '''
+        space_tag : str
+        zone : str
+        Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='DiscoverSpaces', request='ListSubnets', version=2, params=_params)
+        _params['space-tag'] = space_tag
+        _params['zone'] = zone
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='DiscoverSpaces', request='ModelConfig', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class DiskManagerFacade(Type):
+    name = 'DiskManager'
+    version = 2
+    schema =     {'definitions': {'BlockDevice': {'additionalProperties': False,
+                                     'properties': {'BusAddress': {'type': 'string'},
+                                                    'DeviceLinks': {'items': {'type': 'string'},
+                                                                    'type': 'array'},
+                                                    'DeviceName': {'type': 'string'},
+                                                    'FilesystemType': {'type': 'string'},
+                                                    'HardwareId': {'type': 'string'},
+                                                    'InUse': {'type': 'boolean'},
+                                                    'Label': {'type': 'string'},
+                                                    'MountPoint': {'type': 'string'},
+                                                    'Size': {'type': 'integer'},
+                                                    'UUID': {'type': 'string'},
+                                                    'WWN': {'type': 'string'}},
+                                     'required': ['DeviceName',
+                                                  'DeviceLinks',
+                                                  'Label',
+                                                  'UUID',
+                                                  'HardwareId',
+                                                  'WWN',
+                                                  'BusAddress',
+                                                  'Size',
+                                                  'FilesystemType',
+                                                  'InUse',
+                                                  'MountPoint'],
+                                     'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineBlockDevices': {'additionalProperties': False,
+                                             'properties': {'block-devices': {'items': {'$ref': '#/definitions/BlockDevice'},
+                                                                              'type': 'array'},
+                                                            'machine': {'type': 'string'}},
+                                             'required': ['machine'],
+                                             'type': 'object'},
+                     'SetMachineBlockDevices': {'additionalProperties': False,
+                                                'properties': {'machine-block-devices': {'items': {'$ref': '#/definitions/MachineBlockDevices'},
+                                                                                         'type': 'array'}},
+                                                'required': ['machine-block-devices'],
+                                                'type': 'object'}},
+     'properties': {'SetMachineBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/SetMachineBlockDevices'},
+                                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                               'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def SetMachineBlockDevices(self, machine_block_devices):
+        '''
+        machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='DiskManager', request='SetMachineBlockDevices', version=2, params=_params)
+        _params['machine-block-devices'] = machine_block_devices
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class EntityWatcherFacade(Type):
+    name = 'EntityWatcher'
+    version = 2
+    schema =     {'definitions': {'EntitiesWatchResult': {'additionalProperties': False,
+                                             'properties': {'changes': {'items': {'type': 'string'},
+                                                                        'type': 'array'},
+                                                            'error': {'$ref': '#/definitions/Error'},
+                                                            'watcher-id': {'type': 'string'}},
+                                             'required': ['watcher-id'],
+                                             'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/EntitiesWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(EntitiesWatchResult)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='EntityWatcher', request='Next', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='EntityWatcher', request='Stop', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class FilesystemAttachmentsWatcherFacade(Type):
+    name = 'FilesystemAttachmentsWatcher'
+    version = 2
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineStorageId': {'additionalProperties': False,
+                                          'properties': {'attachment-tag': {'type': 'string'},
+                                                         'machine-tag': {'type': 'string'}},
+                                          'required': ['machine-tag',
+                                                       'attachment-tag'],
+                                          'type': 'object'},
+                     'MachineStorageIdsWatchResult': {'additionalProperties': False,
+                                                      'properties': {'changes': {'items': {'$ref': '#/definitions/MachineStorageId'},
+                                                                                 'type': 'array'},
+                                                                     'error': {'$ref': '#/definitions/Error'},
+                                                                     'watcher-id': {'type': 'string'}},
+                                                      'required': ['watcher-id',
+                                                                   'changes'],
+                                                      'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(MachineStorageIdsWatchResult)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='FilesystemAttachmentsWatcher', request='Next', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='FilesystemAttachmentsWatcher', request='Stop', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class HighAvailabilityFacade(Type):
+    name = 'HighAvailability'
+    version = 2
+    schema =     {'definitions': {'Address': {'additionalProperties': False,
+                                 'properties': {'Scope': {'type': 'string'},
+                                                'SpaceName': {'type': 'string'},
+                                                'SpaceProviderId': {'type': 'string'},
+                                                'Type': {'type': 'string'},
+                                                'Value': {'type': 'string'}},
+                                 'required': ['Value',
+                                              'Type',
+                                              'Scope',
+                                              'SpaceName',
+                                              'SpaceProviderId'],
+                                 'type': 'object'},
+                     'ControllersChangeResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'result': {'$ref': '#/definitions/ControllersChanges'}},
+                                                 'required': ['result'],
+                                                 'type': 'object'},
+                     'ControllersChangeResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/ControllersChangeResult'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'ControllersChanges': {'additionalProperties': False,
+                                            'properties': {'added': {'items': {'type': 'string'},
+                                                                     'type': 'array'},
+                                                           'converted': {'items': {'type': 'string'},
+                                                                         'type': 'array'},
+                                                           'demoted': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'maintained': {'items': {'type': 'string'},
+                                                                          'type': 'array'},
+                                                           'promoted': {'items': {'type': 'string'},
+                                                                        'type': 'array'},
+                                                           'removed': {'items': {'type': 'string'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'ControllersSpec': {'additionalProperties': False,
+                                         'properties': {'constraints': {'$ref': '#/definitions/Value'},
+                                                        'num-controllers': {'type': 'integer'},
+                                                        'placement': {'items': {'type': 'string'},
+                                                                      'type': 'array'},
+                                                        'series': {'type': 'string'}},
+                                         'required': ['num-controllers'],
+                                         'type': 'object'},
+                     'ControllersSpecs': {'additionalProperties': False,
+                                          'properties': {'specs': {'items': {'$ref': '#/definitions/ControllersSpec'},
+                                                                   'type': 'array'}},
+                                          'required': ['specs'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'HAMember': {'additionalProperties': False,
+                                  'properties': {'public-address': {'$ref': '#/definitions/Address'},
+                                                 'series': {'type': 'string'},
+                                                 'tag': {'type': 'string'}},
+                                  'required': ['tag', 'public-address', 'series'],
+                                  'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Member': {'additionalProperties': False,
+                                'properties': {'Address': {'type': 'string'},
+                                               'Arbiter': {'type': 'boolean'},
+                                               'BuildIndexes': {'type': 'boolean'},
+                                               'Hidden': {'type': 'boolean'},
+                                               'Id': {'type': 'integer'},
+                                               'Priority': {'type': 'number'},
+                                               'SlaveDelay': {'type': 'integer'},
+                                               'Tags': {'patternProperties': {'.*': {'type': 'string'}},
+                                                        'type': 'object'},
+                                               'Votes': {'type': 'integer'}},
+                                'required': ['Id',
+                                             'Address',
+                                             'Arbiter',
+                                             'BuildIndexes',
+                                             'Hidden',
+                                             'Priority',
+                                             'Tags',
+                                             'SlaveDelay',
+                                             'Votes'],
+                                'type': 'object'},
+                     'MongoUpgradeResults': {'additionalProperties': False,
+                                             'properties': {'ha-members': {'items': {'$ref': '#/definitions/HAMember'},
+                                                                           'type': 'array'},
+                                                            'master': {'$ref': '#/definitions/HAMember'},
+                                                            'rs-members': {'items': {'$ref': '#/definitions/Member'},
+                                                                           'type': 'array'}},
+                                             'required': ['rs-members',
+                                                          'master',
+                                                          'ha-members'],
+                                             'type': 'object'},
+                     'MongoVersion': {'additionalProperties': False,
+                                      'properties': {'engine': {'type': 'string'},
+                                                     'major': {'type': 'integer'},
+                                                     'minor': {'type': 'integer'},
+                                                     'patch': {'type': 'string'}},
+                                      'required': ['major',
+                                                   'minor',
+                                                   'patch',
+                                                   'engine'],
+                                      'type': 'object'},
+                     'ResumeReplicationParams': {'additionalProperties': False,
+                                                 'properties': {'members': {'items': {'$ref': '#/definitions/Member'},
+                                                                            'type': 'array'}},
+                                                 'required': ['members'],
+                                                 'type': 'object'},
+                     'UpgradeMongoParams': {'additionalProperties': False,
+                                            'properties': {'target': {'$ref': '#/definitions/MongoVersion'}},
+                                            'required': ['target'],
+                                            'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'EnableHA': {'properties': {'Params': {'$ref': '#/definitions/ControllersSpecs'},
+                                                'Result': {'$ref': '#/definitions/ControllersChangeResults'}},
+                                 'type': 'object'},
+                    'ResumeHAReplicationAfterUpgrade': {'properties': {'Params': {'$ref': '#/definitions/ResumeReplicationParams'}},
+                                                        'type': 'object'},
+                    'StopHAReplicationForUpgrade': {'properties': {'Params': {'$ref': '#/definitions/UpgradeMongoParams'},
+                                                                   'Result': {'$ref': '#/definitions/MongoUpgradeResults'}},
+                                                    'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ControllersChangeResults)
+    async def EnableHA(self, specs):
+        '''
+        specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec>
+        Returns -> typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='HighAvailability', request='EnableHA', version=2, params=_params)
+        _params['specs'] = specs
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def ResumeHAReplicationAfterUpgrade(self, members):
+        '''
+        members : typing.Sequence<+T_co>[~Member]<~Member>
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='HighAvailability', request='ResumeHAReplicationAfterUpgrade', version=2, params=_params)
+        _params['members'] = members
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(MongoUpgradeResults)
+    async def StopHAReplicationForUpgrade(self, target):
+        '''
+        target : MongoVersion
+        Returns -> typing.Union[_ForwardRef('HAMember'), typing.Sequence<+T_co>[~Member]<~Member>]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='HighAvailability', request='StopHAReplicationForUpgrade', version=2, params=_params)
+        _params['target'] = target
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ImageManagerFacade(Type):
+    name = 'ImageManager'
+    version = 2
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ImageFilterParams': {'additionalProperties': False,
+                                           'properties': {'images': {'items': {'$ref': '#/definitions/ImageSpec'},
+                                                                     'type': 'array'}},
+                                           'required': ['images'],
+                                           'type': 'object'},
+                     'ImageMetadata': {'additionalProperties': False,
+                                       'properties': {'arch': {'type': 'string'},
+                                                      'created': {'format': 'date-time',
+                                                                  'type': 'string'},
+                                                      'kind': {'type': 'string'},
+                                                      'series': {'type': 'string'},
+                                                      'url': {'type': 'string'}},
+                                       'required': ['kind',
+                                                    'arch',
+                                                    'series',
+                                                    'url',
+                                                    'created'],
+                                       'type': 'object'},
+                     'ImageSpec': {'additionalProperties': False,
+                                   'properties': {'arch': {'type': 'string'},
+                                                  'kind': {'type': 'string'},
+                                                  'series': {'type': 'string'}},
+                                   'required': ['kind', 'arch', 'series'],
+                                   'type': 'object'},
+                     'ListImageResult': {'additionalProperties': False,
+                                         'properties': {'result': {'items': {'$ref': '#/definitions/ImageMetadata'},
+                                                                   'type': 'array'}},
+                                         'required': ['result'],
+                                         'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+     'properties': {'DeleteImages': {'properties': {'Params': {'$ref': '#/definitions/ImageFilterParams'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'ListImages': {'properties': {'Params': {'$ref': '#/definitions/ImageFilterParams'},
+                                                  'Result': {'$ref': '#/definitions/ListImageResult'}},
+                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def DeleteImages(self, images):
+        '''
+        images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ImageManager', request='ListImages', version=2, params=_params)
+        _params['images'] = images
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ImageMetadataFacade(Type):
+    name = 'ImageMetadata'
+    version = 2
+    schema =     {'definitions': {'CloudImageMetadata': {'additionalProperties': False,
+                                            'properties': {'arch': {'type': 'string'},
+                                                           'image-id': {'type': 'string'},
+                                                           'priority': {'type': 'integer'},
+                                                           'region': {'type': 'string'},
+                                                           'root-storage-size': {'type': 'integer'},
+                                                           'root-storage-type': {'type': 'string'},
+                                                           'series': {'type': 'string'},
+                                                           'source': {'type': 'string'},
+                                                           'stream': {'type': 'string'},
+                                                           'version': {'type': 'string'},
+                                                           'virt-type': {'type': 'string'}},
+                                            'required': ['image-id',
+                                                         'region',
+                                                         'version',
+                                                         'series',
+                                                         'arch',
+                                                         'source',
+                                                         'priority'],
+                                            'type': 'object'},
+                     'CloudImageMetadataList': {'additionalProperties': False,
+                                                'properties': {'metadata': {'items': {'$ref': '#/definitions/CloudImageMetadata'},
+                                                                            'type': 'array'}},
+                                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ImageMetadataFilter': {'additionalProperties': False,
+                                             'properties': {'arches': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                            'region': {'type': 'string'},
+                                                            'root-storage-type': {'type': 'string'},
+                                                            'series': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                            'stream': {'type': 'string'},
+                                                            'virt-type': {'type': 'string'}},
+                                             'type': 'object'},
+                     'ListCloudImageMetadataResult': {'additionalProperties': False,
+                                                      'properties': {'result': {'items': {'$ref': '#/definitions/CloudImageMetadata'},
+                                                                                'type': 'array'}},
+                                                      'required': ['result'],
+                                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MetadataImageIds': {'additionalProperties': False,
+                                          'properties': {'image-ids': {'items': {'type': 'string'},
+                                                                       'type': 'array'}},
+                                          'required': ['image-ids'],
+                                          'type': 'object'},
+                     'MetadataSaveParams': {'additionalProperties': False,
+                                            'properties': {'metadata': {'items': {'$ref': '#/definitions/CloudImageMetadataList'},
+                                                                        'type': 'array'}},
+                                            'type': 'object'}},
+     'properties': {'Delete': {'properties': {'Params': {'$ref': '#/definitions/MetadataImageIds'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'List': {'properties': {'Params': {'$ref': '#/definitions/ImageMetadataFilter'},
+                                            'Result': {'$ref': '#/definitions/ListCloudImageMetadataResult'}},
+                             'type': 'object'},
+                    'Save': {'properties': {'Params': {'$ref': '#/definitions/MetadataSaveParams'},
+                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                             'type': 'object'},
+                    'UpdateFromPublishedImages': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def Delete(self, image_ids):
+        '''
+        image_ids : typing.Sequence<+T_co>[str]
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        region : str
+        root_storage_type : str
+        series : typing.Sequence<+T_co>[str]
+        stream : str
+        virt_type : str
+        Returns -> typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ImageMetadata', request='List', version=2, params=_params)
+        _params['arches'] = arches
+        _params['region'] = region
+        _params['root-storage-type'] = root_storage_type
+        _params['series'] = series
+        _params['stream'] = stream
+        _params['virt-type'] = virt_type
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def Save(self, metadata):
+        '''
+        metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ImageMetadata', request='Save', version=2, params=_params)
+        _params['metadata'] = metadata
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def UpdateFromPublishedImages(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ImageMetadata', request='UpdateFromPublishedImages', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class LeadershipServiceFacade(Type):
+    name = 'LeadershipService'
+    version = 2
+    schema =     {'definitions': {'ApplicationTag': {'additionalProperties': False,
+                                        'properties': {'Name': {'type': 'string'}},
+                                        'required': ['Name'],
+                                        'type': 'object'},
+                     'ClaimLeadershipBulkParams': {'additionalProperties': False,
+                                                   'properties': {'params': {'items': {'$ref': '#/definitions/ClaimLeadershipParams'},
+                                                                             'type': 'array'}},
+                                                   'required': ['params'],
+                                                   'type': 'object'},
+                     'ClaimLeadershipBulkResults': {'additionalProperties': False,
+                                                    'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                               'type': 'array'}},
+                                                    'required': ['results'],
+                                                    'type': 'object'},
+                     'ClaimLeadershipParams': {'additionalProperties': False,
+                                               'properties': {'application-tag': {'type': 'string'},
+                                                              'duration': {'type': 'number'},
+                                                              'unit-tag': {'type': 'string'}},
+                                               'required': ['application-tag',
+                                                            'unit-tag',
+                                                            'duration'],
+                                               'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+     'properties': {'BlockUntilLeadershipReleased': {'properties': {'Params': {'$ref': '#/definitions/ApplicationTag'},
+                                                                    'Result': {'$ref': '#/definitions/ErrorResult'}},
+                                                     'type': 'object'},
+                    'ClaimLeadership': {'properties': {'Params': {'$ref': '#/definitions/ClaimLeadershipBulkParams'},
+                                                       'Result': {'$ref': '#/definitions/ClaimLeadershipBulkResults'}},
+                                        'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResult)
+    async def BlockUntilLeadershipReleased(self, name):
+        '''
+        name : str
+        Returns -> Error
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='LeadershipService', request='BlockUntilLeadershipReleased', version=2, params=_params)
+        _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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='LeadershipService', request='ClaimLeadership', version=2, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MachineManagerFacade(Type):
+    name = 'MachineManager'
+    version = 2
+    schema =     {'definitions': {'AddMachineParams': {'additionalProperties': False,
+                                          'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+                                                                       'type': 'array'},
+                                                         'constraints': {'$ref': '#/definitions/Value'},
+                                                         'container-type': {'type': 'string'},
+                                                         'disks': {'items': {'$ref': '#/definitions/Constraints'},
+                                                                   'type': 'array'},
+                                                         'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'jobs': {'items': {'type': 'string'},
+                                                                  'type': 'array'},
+                                                         'nonce': {'type': 'string'},
+                                                         'parent-id': {'type': 'string'},
+                                                         'placement': {'$ref': '#/definitions/Placement'},
+                                                         'series': {'type': 'string'}},
+                                          'required': ['series',
+                                                       'constraints',
+                                                       'jobs',
+                                                       'parent-id',
+                                                       'container-type',
+                                                       'instance-id',
+                                                       'nonce',
+                                                       'hardware-characteristics',
+                                                       'addresses'],
+                                          'type': 'object'},
+                     'AddMachines': {'additionalProperties': False,
+                                     'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'},
+                                                               'type': 'array'}},
+                                     'required': ['params'],
+                                     'type': 'object'},
+                     'AddMachinesResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'machine': {'type': 'string'}},
+                                           'required': ['machine'],
+                                           'type': 'object'},
+                     'AddMachinesResults': {'additionalProperties': False,
+                                            'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'},
+                                                                        'type': 'array'}},
+                                            'required': ['machines'],
+                                            'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'HardwareCharacteristics': {'additionalProperties': False,
+                                                 'properties': {'arch': {'type': 'string'},
+                                                                'availability-zone': {'type': 'string'},
+                                                                'cpu-cores': {'type': 'integer'},
+                                                                'cpu-power': {'type': 'integer'},
+                                                                'mem': {'type': 'integer'},
+                                                                'root-disk': {'type': 'integer'},
+                                                                'tags': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                                 'type': 'object'},
+                     'InstanceType': {'additionalProperties': False,
+                                      'properties': {'arches': {'items': {'type': 'string'},
+                                                                'type': 'array'},
+                                                     'cost': {'type': 'integer'},
+                                                     'cpu-cores': {'type': 'integer'},
+                                                     'deprecated': {'type': 'boolean'},
+                                                     'memory': {'type': 'integer'},
+                                                     'name': {'type': 'string'},
+                                                     'root-disk': {'type': 'integer'},
+                                                     'virt-type': {'type': 'string'}},
+                                      'required': ['arches', 'cpu-cores', 'memory'],
+                                      'type': 'object'},
+                     'InstanceTypesResult': {'additionalProperties': False,
+                                             'properties': {'cost-currency': {'type': 'string'},
+                                                            'cost-divisor': {'type': 'integer'},
+                                                            'cost-unit': {'type': 'string'},
+                                                            'error': {'$ref': '#/definitions/Error'},
+                                                            'instance-types': {'items': {'$ref': '#/definitions/InstanceType'},
+                                                                               'type': 'array'}},
+                                             'type': 'object'},
+                     'InstanceTypesResults': {'additionalProperties': False,
+                                              'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['results'],
+                                              'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelInstanceTypesConstraint': {'additionalProperties': False,
+                                                      'properties': {'value': {'$ref': '#/definitions/Value'}},
+                                                      'type': 'object'},
+                     'ModelInstanceTypesConstraints': {'additionalProperties': False,
+                                                       'properties': {'constraints': {'items': {'$ref': '#/definitions/ModelInstanceTypesConstraint'},
+                                                                                      'type': 'array'}},
+                                                       'required': ['constraints'],
+                                                       'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+                                                   'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+                                    'type': 'object'},
+                    'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/ModelInstanceTypesConstraints'},
+                                                     'Result': {'$ref': '#/definitions/InstanceTypesResults'}},
+                                      'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddMachinesResults)
+    async def AddMachines(self, params):
+        '''
+        params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
+        Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineManager', request='InstanceTypes', version=2, params=_params)
+        _params['constraints'] = constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MetricsAdderFacade(Type):
+    name = 'MetricsAdder'
+    version = 2
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Metric': {'additionalProperties': False,
+                                'properties': {'key': {'type': 'string'},
+                                               'time': {'format': 'date-time',
+                                                        'type': 'string'},
+                                               'value': {'type': 'string'}},
+                                'required': ['key', 'value', 'time'],
+                                'type': 'object'},
+                     'MetricBatch': {'additionalProperties': False,
+                                     'properties': {'charm-url': {'type': 'string'},
+                                                    'created': {'format': 'date-time',
+                                                                'type': 'string'},
+                                                    'metrics': {'items': {'$ref': '#/definitions/Metric'},
+                                                                'type': 'array'},
+                                                    'uuid': {'type': 'string'}},
+                                     'required': ['uuid',
+                                                  'charm-url',
+                                                  'created',
+                                                  'metrics'],
+                                     'type': 'object'},
+                     'MetricBatchParam': {'additionalProperties': False,
+                                          'properties': {'batch': {'$ref': '#/definitions/MetricBatch'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag', 'batch'],
+                                          'type': 'object'},
+                     'MetricBatchParams': {'additionalProperties': False,
+                                           'properties': {'batches': {'items': {'$ref': '#/definitions/MetricBatchParam'},
+                                                                      'type': 'array'}},
+                                           'required': ['batches'],
+                                           'type': 'object'}},
+     'properties': {'AddMetricBatches': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'},
+                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                         'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def AddMetricBatches(self, batches):
+        '''
+        batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MetricsAdder', request='AddMetricBatches', version=2, params=_params)
+        _params['batches'] = batches
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MetricsDebugFacade(Type):
+    name = 'MetricsDebug'
+    version = 2
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityMetrics': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'metrics': {'items': {'$ref': '#/definitions/MetricResult'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MeterStatusParam': {'additionalProperties': False,
+                                          'properties': {'code': {'type': 'string'},
+                                                         'info': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag', 'code', 'info'],
+                                          'type': 'object'},
+                     'MeterStatusParams': {'additionalProperties': False,
+                                           'properties': {'statues': {'items': {'$ref': '#/definitions/MeterStatusParam'},
+                                                                      'type': 'array'}},
+                                           'required': ['statues'],
+                                           'type': 'object'},
+                     'MetricResult': {'additionalProperties': False,
+                                      'properties': {'key': {'type': 'string'},
+                                                     'time': {'format': 'date-time',
+                                                              'type': 'string'},
+                                                     'unit': {'type': 'string'},
+                                                     'value': {'type': 'string'}},
+                                      'required': ['time', 'key', 'value', 'unit'],
+                                      'type': 'object'},
+                     'MetricResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/EntityMetrics'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'}},
+     'properties': {'GetMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/MetricResults'}},
+                                   'type': 'object'},
+                    'SetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/MeterStatusParams'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(MetricResults)
+    async def GetMetrics(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MetricsDebug', request='GetMetrics', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetMeterStatus(self, statues):
+        '''
+        statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MetricsDebug', request='SetMeterStatus', version=2, params=_params)
+        _params['statues'] = statues
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ModelManagerFacade(Type):
+    name = 'ModelManager'
+    version = 2
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatus': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'info': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['status', 'info', 'since'],
+                                      'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineHardware': {'additionalProperties': False,
+                                         'properties': {'arch': {'type': 'string'},
+                                                        'availability-zone': {'type': 'string'},
+                                                        'cores': {'type': 'integer'},
+                                                        'cpu-power': {'type': 'integer'},
+                                                        'mem': {'type': 'integer'},
+                                                        'root-disk': {'type': 'integer'},
+                                                        'tags': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                         'type': 'object'},
+                     'MapResult': {'additionalProperties': False,
+                                   'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                  'result': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                          'type': 'object'}},
+                                                             'type': 'object'}},
+                                   'required': ['result'],
+                                   'type': 'object'},
+                     'MapResults': {'additionalProperties': False,
+                                    'properties': {'results': {'items': {'$ref': '#/definitions/MapResult'},
+                                                               'type': 'array'}},
+                                    'required': ['results'],
+                                    'type': 'object'},
+                     'Model': {'additionalProperties': False,
+                               'properties': {'name': {'type': 'string'},
+                                              'owner-tag': {'type': 'string'},
+                                              'uuid': {'type': 'string'}},
+                               'required': ['name', 'uuid', 'owner-tag'],
+                               'type': 'object'},
+                     'ModelCreateArgs': {'additionalProperties': False,
+                                         'properties': {'cloud-tag': {'type': 'string'},
+                                                        'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                'type': 'object'}},
+                                                                   'type': 'object'},
+                                                        'credential': {'type': 'string'},
+                                                        'name': {'type': 'string'},
+                                                        'owner-tag': {'type': 'string'},
+                                                        'region': {'type': 'string'}},
+                                         'required': ['name', 'owner-tag'],
+                                         'type': 'object'},
+                     'ModelDefaultValues': {'additionalProperties': False,
+                                            'properties': {'cloud-region': {'type': 'string'},
+                                                           'cloud-tag': {'type': 'string'},
+                                                           'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                   'type': 'object'}},
+                                                                      'type': 'object'}},
+                                            'required': ['config'],
+                                            'type': 'object'},
+                     'ModelDefaults': {'additionalProperties': False,
+                                       'properties': {'controller': {'additionalProperties': True,
+                                                                     'type': 'object'},
+                                                      'default': {'additionalProperties': True,
+                                                                  'type': 'object'},
+                                                      'regions': {'items': {'$ref': '#/definitions/RegionDefaults'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'ModelDefaultsResult': {'additionalProperties': False,
+                                             'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ModelDefaults'}},
+                                                                       'type': 'object'}},
+                                             'required': ['config'],
+                                             'type': 'object'},
+                     'ModelInfo': {'additionalProperties': False,
+                                   'properties': {'agent-version': {'$ref': '#/definitions/Number'},
+                                                  'cloud-credential-tag': {'type': 'string'},
+                                                  'cloud-region': {'type': 'string'},
+                                                  'cloud-tag': {'type': 'string'},
+                                                  'controller-uuid': {'type': 'string'},
+                                                  'default-series': {'type': 'string'},
+                                                  'life': {'type': 'string'},
+                                                  'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+                                                               'type': 'array'},
+                                                  'migration': {'$ref': '#/definitions/ModelMigrationStatus'},
+                                                  'name': {'type': 'string'},
+                                                  'owner-tag': {'type': 'string'},
+                                                  'provider-type': {'type': 'string'},
+                                                  'sla': {'$ref': '#/definitions/ModelSLAInfo'},
+                                                  'status': {'$ref': '#/definitions/EntityStatus'},
+                                                  'users': {'items': {'$ref': '#/definitions/ModelUserInfo'},
+                                                            'type': 'array'},
+                                                  'uuid': {'type': 'string'}},
+                                   'required': ['name',
+                                                'uuid',
+                                                'controller-uuid',
+                                                'cloud-tag',
+                                                'owner-tag',
+                                                'life',
+                                                'users',
+                                                'machines',
+                                                'sla',
+                                                'agent-version'],
+                                   'type': 'object'},
+                     'ModelInfoResult': {'additionalProperties': False,
+                                         'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                        'result': {'$ref': '#/definitions/ModelInfo'}},
+                                         'type': 'object'},
+                     'ModelInfoResults': {'additionalProperties': False,
+                                          'properties': {'results': {'items': {'$ref': '#/definitions/ModelInfoResult'},
+                                                                     'type': 'array'}},
+                                          'required': ['results'],
+                                          'type': 'object'},
+                     'ModelMachineInfo': {'additionalProperties': False,
+                                          'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'},
+                                                         'has-vote': {'type': 'boolean'},
+                                                         'id': {'type': 'string'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'wants-vote': {'type': 'boolean'}},
+                                          'required': ['id'],
+                                          'type': 'object'},
+                     'ModelMigrationStatus': {'additionalProperties': False,
+                                              'properties': {'end': {'format': 'date-time',
+                                                                     'type': 'string'},
+                                                             'start': {'format': 'date-time',
+                                                                       'type': 'string'},
+                                                             'status': {'type': 'string'}},
+                                              'required': ['status', 'start'],
+                                              'type': 'object'},
+                     'ModelSLAInfo': {'additionalProperties': False,
+                                      'properties': {'level': {'type': 'string'},
+                                                     'owner': {'type': 'string'}},
+                                      'required': ['level', 'owner'],
+                                      'type': 'object'},
+                     'ModelStatus': {'additionalProperties': False,
+                                     'properties': {'application-count': {'type': 'integer'},
+                                                    'hosted-machine-count': {'type': 'integer'},
+                                                    'life': {'type': 'string'},
+                                                    'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+                                                                 'type': 'array'},
+                                                    'model-tag': {'type': 'string'},
+                                                    'owner-tag': {'type': 'string'}},
+                                     'required': ['model-tag',
+                                                  'life',
+                                                  'hosted-machine-count',
+                                                  'application-count',
+                                                  'owner-tag'],
+                                     'type': 'object'},
+                     'ModelStatusResults': {'additionalProperties': False,
+                                            'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'},
+                                                                      'type': 'array'}},
+                                            'required': ['models'],
+                                            'type': 'object'},
+                     'ModelUnsetKeys': {'additionalProperties': False,
+                                        'properties': {'cloud-region': {'type': 'string'},
+                                                       'cloud-tag': {'type': 'string'},
+                                                       'keys': {'items': {'type': 'string'},
+                                                                'type': 'array'}},
+                                        'required': ['keys'],
+                                        'type': 'object'},
+                     'ModelUserInfo': {'additionalProperties': False,
+                                       'properties': {'access': {'type': 'string'},
+                                                      'display-name': {'type': 'string'},
+                                                      'last-connection': {'format': 'date-time',
+                                                                          'type': 'string'},
+                                                      'user': {'type': 'string'}},
+                                       'required': ['user',
+                                                    'display-name',
+                                                    'last-connection',
+                                                    'access'],
+                                       'type': 'object'},
+                     'ModifyModelAccess': {'additionalProperties': False,
+                                           'properties': {'access': {'type': 'string'},
+                                                          'action': {'type': 'string'},
+                                                          'model-tag': {'type': 'string'},
+                                                          'user-tag': {'type': 'string'}},
+                                           'required': ['user-tag',
+                                                        'action',
+                                                        'access',
+                                                        'model-tag'],
+                                           'type': 'object'},
+                     'ModifyModelAccessRequest': {'additionalProperties': False,
+                                                  'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyModelAccess'},
+                                                                             'type': 'array'}},
+                                                  'required': ['changes'],
+                                                  'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'RegionDefaults': {'additionalProperties': False,
+                                        'properties': {'region-name': {'type': 'string'},
+                                                       'value': {'additionalProperties': True,
+                                                                 'type': 'object'}},
+                                        'required': ['region-name', 'value'],
+                                        'type': 'object'},
+                     'SetModelDefaults': {'additionalProperties': False,
+                                          'properties': {'config': {'items': {'$ref': '#/definitions/ModelDefaultValues'},
+                                                                    'type': 'array'}},
+                                          'required': ['config'],
+                                          'type': 'object'},
+                     'UnsetModelDefaults': {'additionalProperties': False,
+                                            'properties': {'keys': {'items': {'$ref': '#/definitions/ModelUnsetKeys'},
+                                                                    'type': 'array'}},
+                                            'required': ['keys'],
+                                            'type': 'object'},
+                     'UserModel': {'additionalProperties': False,
+                                   'properties': {'last-connection': {'format': 'date-time',
+                                                                      'type': 'string'},
+                                                  'model': {'$ref': '#/definitions/Model'}},
+                                   'required': ['model', 'last-connection'],
+                                   'type': 'object'},
+                     'UserModelList': {'additionalProperties': False,
+                                       'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'},
+                                                                      'type': 'array'}},
+                                       'required': ['user-models'],
+                                       'type': 'object'}},
+     'properties': {'CreateModel': {'properties': {'Params': {'$ref': '#/definitions/ModelCreateArgs'},
+                                                   'Result': {'$ref': '#/definitions/ModelInfo'}},
+                                    'type': 'object'},
+                    'DestroyModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'DumpModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/MapResults'}},
+                                   'type': 'object'},
+                    'DumpModelsDB': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/MapResults'}},
+                                     'type': 'object'},
+                    'ListModels': {'properties': {'Params': {'$ref': '#/definitions/Entity'},
+                                                  'Result': {'$ref': '#/definitions/UserModelList'}},
+                                   'type': 'object'},
+                    'ModelDefaults': {'properties': {'Result': {'$ref': '#/definitions/ModelDefaultsResult'}},
+                                      'type': 'object'},
+                    'ModelInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                 'Result': {'$ref': '#/definitions/ModelInfoResults'}},
+                                  'type': 'object'},
+                    'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ModelStatusResults'}},
+                                    'type': 'object'},
+                    'ModifyModelAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyModelAccessRequest'},
+                                                         'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                          'type': 'object'},
+                    'SetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/SetModelDefaults'},
+                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                         'type': 'object'},
+                    'UnsetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/UnsetModelDefaults'},
+                                                          'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                           'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ModelInfo)
+    async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region):
+        '''
+        cloud_tag : str
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        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>]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='CreateModel', version=2, params=_params)
+        _params['cloud-tag'] = cloud_tag
+        _params['config'] = config
+        _params['credential'] = credential
+        _params['name'] = name
+        _params['owner-tag'] = owner_tag
+        _params['region'] = region
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def DestroyModels(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='DumpModelsDB', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(UserModelList)
+    async def ListModels(self, tag):
+        '''
+        tag : str
+        Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='ListModels', version=2, params=_params)
+        _params['tag'] = tag
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelDefaultsResult)
+    async def ModelDefaults(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # 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<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='SetModelDefaults', version=2, 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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='UnsetModelDefaults', version=2, params=_params)
+        _params['keys'] = keys
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class RebootFacade(Type):
+    name = 'Reboot'
+    version = 2
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'RebootActionResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'result': {'type': 'string'}},
+                                            'type': 'object'},
+                     'RebootActionResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/RebootActionResult'},
+                                                                        'type': 'array'}},
+                                             'type': 'object'}},
+     'properties': {'ClearReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                    'type': 'object'},
+                    'GetRebootAction': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/RebootActionResults'}},
+                                        'type': 'object'},
+                    'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'WatchForRebootEvent': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                            'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def ClearReboot(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Reboot', request='ClearReboot', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(RebootActionResults)
+    async def GetRebootAction(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Reboot', request='GetRebootAction', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def RequestReboot(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Reboot', request='RequestReboot', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForRebootEvent(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Reboot', request='WatchForRebootEvent', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ResumerFacade(Type):
+    name = 'Resumer'
+    version = 2
+    schema =     {'properties': {'ResumeTransactions': {'type': 'object'}}, 'type': 'object'}
+    
+
+    @ReturnMapping(None)
+    async def ResumeTransactions(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Resumer', request='ResumeTransactions', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class SSHClientFacade(Type):
+    name = 'SSHClient'
+    version = 2
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'SSHAddressResult': {'additionalProperties': False,
+                                          'properties': {'address': {'type': 'string'},
+                                                         'error': {'$ref': '#/definitions/Error'}},
+                                          'type': 'object'},
+                     'SSHAddressResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressResult'},
+                                                                      'type': 'array'}},
+                                           'required': ['results'],
+                                           'type': 'object'},
+                     'SSHAddressesResult': {'additionalProperties': False,
+                                            'properties': {'addresses': {'items': {'type': 'string'},
+                                                                         'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'}},
+                                            'required': ['addresses'],
+                                            'type': 'object'},
+                     'SSHAddressesResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressesResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'SSHProxyResult': {'additionalProperties': False,
+                                        'properties': {'use-proxy': {'type': 'boolean'}},
+                                        'required': ['use-proxy'],
+                                        'type': 'object'},
+                     'SSHPublicKeysResult': {'additionalProperties': False,
+                                             'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                            'public-keys': {'items': {'type': 'string'},
+                                                                            'type': 'array'}},
+                                             'type': 'object'},
+                     'SSHPublicKeysResults': {'additionalProperties': False,
+                                              'properties': {'results': {'items': {'$ref': '#/definitions/SSHPublicKeysResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['results'],
+                                              'type': 'object'}},
+     'properties': {'AllAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/SSHAddressesResults'}},
+                                     'type': 'object'},
+                    'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/SSHAddressResults'}},
+                                       'type': 'object'},
+                    'Proxy': {'properties': {'Result': {'$ref': '#/definitions/SSHProxyResult'}},
+                              'type': 'object'},
+                    'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/SSHAddressResults'}},
+                                      'type': 'object'},
+                    'PublicKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/SSHPublicKeysResults'}},
+                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(SSHAddressesResults)
+    async def AllAddresses(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='SSHClient', request='PrivateAddress', version=2, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(SSHProxyResult)
+    async def Proxy(self):
+        '''
+
+        Returns -> bool
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='SSHClient', request='Proxy', version=2, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # 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 SpacesFacade(Type):
+    name = 'Spaces'
+    version = 2
+    schema =     {'definitions': {'CreateSpaceParams': {'additionalProperties': False,
+                                           'properties': {'provider-id': {'type': 'string'},
+                                                          'public': {'type': 'boolean'},
+                                                          'space-tag': {'type': 'string'},
+                                                          'subnet-tags': {'items': {'type': 'string'},
+                                                                          'type': 'array'}},
+                                           'required': ['subnet-tags',
+                                                        'space-tag',
+                                                        'public'],
+                                           'type': 'object'},
+                     'CreateSpacesParams': {'additionalProperties': False,
+                                            'properties': {'spaces': {'items': {'$ref': '#/definitions/CreateSpaceParams'},
+                                                                      'type': 'array'}},
+                                            'required': ['spaces'],
+                                            'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ListSpacesResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/Space'},
+                                                                      'type': 'array'}},
+                                           'required': ['results'],
+                                           'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Space': {'additionalProperties': False,
+                               'properties': {'error': {'$ref': '#/definitions/Error'},
+                                              'name': {'type': 'string'},
+                                              'subnets': {'items': {'$ref': '#/definitions/Subnet'},
+                                                          'type': 'array'}},
+                               'required': ['name', 'subnets'],
+                               'type': 'object'},
+                     'Subnet': {'additionalProperties': False,
+                                'properties': {'cidr': {'type': 'string'},
+                                               'life': {'type': 'string'},
+                                               'provider-id': {'type': 'string'},
+                                               'provider-network-id': {'type': 'string'},
+                                               'provider-space-id': {'type': 'string'},
+                                               'space-tag': {'type': 'string'},
+                                               'status': {'type': 'string'},
+                                               'vlan-tag': {'type': 'integer'},
+                                               'zones': {'items': {'type': 'string'},
+                                                         'type': 'array'}},
+                                'required': ['cidr',
+                                             'vlan-tag',
+                                             'life',
+                                             'space-tag',
+                                             'zones'],
+                                'type': 'object'}},
+     'properties': {'CreateSpaces': {'properties': {'Params': {'$ref': '#/definitions/CreateSpacesParams'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'ListSpaces': {'properties': {'Result': {'$ref': '#/definitions/ListSpacesResults'}},
+                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def CreateSpaces(self, spaces):
+        '''
+        spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Spaces', request='CreateSpaces', version=2, params=_params)
+        _params['spaces'] = spaces
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ListSpacesResults)
+    async def ListSpaces(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~Space]<~Space>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Spaces', request='ListSpaces', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class StatusHistoryFacade(Type):
+    name = 'StatusHistory'
+    version = 2
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'StatusHistoryPruneArgs': {'additionalProperties': False,
+                                                'properties': {'max-history-mb': {'type': 'integer'},
+                                                               'max-history-time': {'type': 'integer'}},
+                                                'required': ['max-history-time',
+                                                             'max-history-mb'],
+                                                'type': 'object'}},
+     'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'Prune': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryPruneArgs'}},
+                              'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='StatusHistory', request='ModelConfig', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Prune(self, max_history_mb, max_history_time):
+        '''
+        max_history_mb : int
+        max_history_time : int
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='StatusHistory', request='Prune', version=2, params=_params)
+        _params['max-history-mb'] = max_history_mb
+        _params['max-history-time'] = max_history_time
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='StatusHistory', request='WatchForModelConfigChanges', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class SubnetsFacade(Type):
+    name = 'Subnets'
+    version = 2
+    schema =     {'definitions': {'AddSubnetParams': {'additionalProperties': False,
+                                         'properties': {'provider-network-id': {'type': 'string'},
+                                                        'space-tag': {'type': 'string'},
+                                                        'subnet-provider-id': {'type': 'string'},
+                                                        'subnet-tag': {'type': 'string'},
+                                                        'vlan-tag': {'type': 'integer'},
+                                                        'zones': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                         'required': ['space-tag'],
+                                         'type': 'object'},
+                     'AddSubnetsParams': {'additionalProperties': False,
+                                          'properties': {'subnets': {'items': {'$ref': '#/definitions/AddSubnetParams'},
+                                                                     'type': 'array'}},
+                                          'required': ['subnets'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ListSubnetsResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/Subnet'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'SpaceResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                    'tag': {'type': 'string'}},
+                                     'required': ['tag'],
+                                     'type': 'object'},
+                     'SpaceResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/SpaceResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Subnet': {'additionalProperties': False,
+                                'properties': {'cidr': {'type': 'string'},
+                                               'life': {'type': 'string'},
+                                               'provider-id': {'type': 'string'},
+                                               'provider-network-id': {'type': 'string'},
+                                               'provider-space-id': {'type': 'string'},
+                                               'space-tag': {'type': 'string'},
+                                               'status': {'type': 'string'},
+                                               'vlan-tag': {'type': 'integer'},
+                                               'zones': {'items': {'type': 'string'},
+                                                         'type': 'array'}},
+                                'required': ['cidr',
+                                             'vlan-tag',
+                                             'life',
+                                             'space-tag',
+                                             'zones'],
+                                'type': 'object'},
+                     'SubnetsFilters': {'additionalProperties': False,
+                                        'properties': {'space-tag': {'type': 'string'},
+                                                       'zone': {'type': 'string'}},
+                                        'type': 'object'},
+                     'ZoneResult': {'additionalProperties': False,
+                                    'properties': {'available': {'type': 'boolean'},
+                                                   'error': {'$ref': '#/definitions/Error'},
+                                                   'name': {'type': 'string'}},
+                                    'required': ['name', 'available'],
+                                    'type': 'object'},
+                     'ZoneResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/ZoneResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'}},
+     'properties': {'AddSubnets': {'properties': {'Params': {'$ref': '#/definitions/AddSubnetsParams'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'AllSpaces': {'properties': {'Result': {'$ref': '#/definitions/SpaceResults'}},
+                                  'type': 'object'},
+                    'AllZones': {'properties': {'Result': {'$ref': '#/definitions/ZoneResults'}},
+                                 'type': 'object'},
+                    'ListSubnets': {'properties': {'Params': {'$ref': '#/definitions/SubnetsFilters'},
+                                                   'Result': {'$ref': '#/definitions/ListSubnetsResults'}},
+                                    'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def AddSubnets(self, subnets):
+        '''
+        subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Subnets', request='AddSubnets', version=2, params=_params)
+        _params['subnets'] = subnets
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(SpaceResults)
+    async def AllSpaces(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Subnets', request='AllSpaces', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ZoneResults)
+    async def AllZones(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Subnets', request='AllZones', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ListSubnetsResults)
+    async def ListSubnets(self, space_tag, zone):
+        '''
+        space_tag : str
+        zone : str
+        Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Subnets', request='ListSubnets', version=2, params=_params)
+        _params['space-tag'] = space_tag
+        _params['zone'] = zone
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class VolumeAttachmentsWatcherFacade(Type):
+    name = 'VolumeAttachmentsWatcher'
+    version = 2
+    schema =     {'definitions': {'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineStorageId': {'additionalProperties': False,
+                                          'properties': {'attachment-tag': {'type': 'string'},
+                                                         'machine-tag': {'type': 'string'}},
+                                          'required': ['machine-tag',
+                                                       'attachment-tag'],
+                                          'type': 'object'},
+                     'MachineStorageIdsWatchResult': {'additionalProperties': False,
+                                                      'properties': {'changes': {'items': {'$ref': '#/definitions/MachineStorageId'},
+                                                                                 'type': 'array'},
+                                                                     'error': {'$ref': '#/definitions/Error'},
+                                                                     'watcher-id': {'type': 'string'}},
+                                                      'required': ['watcher-id',
+                                                                   'changes'],
+                                                      'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(MachineStorageIdsWatchResult)
+    async def Next(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='VolumeAttachmentsWatcher', request='Next', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Stop(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='VolumeAttachmentsWatcher', request='Stop', version=2, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
diff --git a/juju/client/_client3.py b/juju/client/_client3.py
new file mode 100644 (file)
index 0000000..3f9ef55
--- /dev/null
@@ -0,0 +1,5220 @@
+# 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 = 3
+    schema =     {'definitions': {'AddApplicationUnits': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'num-units': {'type': 'integer'},
+                                                            'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                          'type': 'array'}},
+                                             'required': ['application',
+                                                          'num-units',
+                                                          'placement'],
+                                             'type': 'object'},
+                     'AddApplicationUnitsResults': {'additionalProperties': False,
+                                                    'properties': {'units': {'items': {'type': 'string'},
+                                                                             'type': 'array'}},
+                                                    'required': ['units'],
+                                                    'type': 'object'},
+                     'AddRelation': {'additionalProperties': False,
+                                     'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                     'required': ['endpoints'],
+                                     'type': 'object'},
+                     'AddRelationResults': {'additionalProperties': False,
+                                            'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+                                                                         'type': 'object'}},
+                                            'required': ['endpoints'],
+                                            'type': 'object'},
+                     'ApplicationCharmRelations': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'ApplicationCharmRelationsResults': {'additionalProperties': False,
+                                                          'properties': {'charm-relations': {'items': {'type': 'string'},
+                                                                                             'type': 'array'}},
+                                                          'required': ['charm-relations'],
+                                                          'type': 'object'},
+                     'ApplicationDeploy': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'channel': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'config': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                     'type': 'object'},
+                                                          'config-yaml': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                          'num-units': {'type': 'integer'},
+                                                          'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                        'type': 'array'},
+                                                          'resources': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                        'type': 'object'},
+                                                          'series': {'type': 'string'},
+                                                          'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}},
+                                                                      'type': 'object'}},
+                                           'required': ['application',
+                                                        'series',
+                                                        'charm-url',
+                                                        'channel',
+                                                        'num-units',
+                                                        'config-yaml',
+                                                        'constraints'],
+                                           'type': 'object'},
+                     'ApplicationDestroy': {'additionalProperties': False,
+                                            'properties': {'application': {'type': 'string'}},
+                                            'required': ['application'],
+                                            'type': 'object'},
+                     'ApplicationExpose': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'}},
+                                           'required': ['application'],
+                                           'type': 'object'},
+                     'ApplicationGet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'}},
+                                        'required': ['application'],
+                                        'type': 'object'},
+                     'ApplicationGetResults': {'additionalProperties': False,
+                                               'properties': {'application': {'type': 'string'},
+                                                              'charm': {'type': 'string'},
+                                                              'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                      'type': 'object'}},
+                                                                         'type': 'object'},
+                                                              'constraints': {'$ref': '#/definitions/Value'},
+                                                              'series': {'type': 'string'}},
+                                               'required': ['application',
+                                                            'charm',
+                                                            'config',
+                                                            'constraints',
+                                                            'series'],
+                                               'type': 'object'},
+                     'ApplicationMetricCredential': {'additionalProperties': False,
+                                                     'properties': {'application': {'type': 'string'},
+                                                                    'metrics-credentials': {'items': {'type': 'integer'},
+                                                                                            'type': 'array'}},
+                                                     'required': ['application',
+                                                                  'metrics-credentials'],
+                                                     'type': 'object'},
+                     'ApplicationMetricCredentials': {'additionalProperties': False,
+                                                      'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'},
+                                                                               'type': 'array'}},
+                                                      'required': ['creds'],
+                                                      'type': 'object'},
+                     'ApplicationSet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'options': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                   'type': 'object'}},
+                                        'required': ['application', 'options'],
+                                        'type': 'object'},
+                     'ApplicationSetCharm': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'channel': {'type': 'string'},
+                                                            'charm-url': {'type': 'string'},
+                                                            'config-settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                            'config-settings-yaml': {'type': 'string'},
+                                                            'force-series': {'type': 'boolean'},
+                                                            'force-units': {'type': 'boolean'},
+                                                            'resource-ids': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                             'type': 'object'},
+                                                            'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}},
+                                                                                    'type': 'object'}},
+                                             'required': ['application',
+                                                          'charm-url',
+                                                          'channel',
+                                                          'force-units',
+                                                          'force-series'],
+                                             'type': 'object'},
+                     'ApplicationUnexpose': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'}},
+                                             'required': ['application'],
+                                             'type': 'object'},
+                     'ApplicationUnset': {'additionalProperties': False,
+                                          'properties': {'application': {'type': 'string'},
+                                                         'options': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                          'required': ['application', 'options'],
+                                          'type': 'object'},
+                     'ApplicationUpdate': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'force-charm-url': {'type': 'boolean'},
+                                                          'force-series': {'type': 'boolean'},
+                                                          'min-units': {'type': 'integer'},
+                                                          'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                       'type': 'object'},
+                                                          'settings-yaml': {'type': 'string'}},
+                                           'required': ['application',
+                                                        'charm-url',
+                                                        'force-charm-url',
+                                                        'force-series',
+                                                        'settings-yaml'],
+                                           'type': 'object'},
+                     'ApplicationsDeploy': {'additionalProperties': False,
+                                            'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'},
+                                                                            'type': 'array'}},
+                                            'required': ['applications'],
+                                            'type': 'object'},
+                     'CharmRelation': {'additionalProperties': False,
+                                       'properties': {'interface': {'type': 'string'},
+                                                      'limit': {'type': 'integer'},
+                                                      'name': {'type': 'string'},
+                                                      'optional': {'type': 'boolean'},
+                                                      'role': {'type': 'string'},
+                                                      'scope': {'type': 'string'}},
+                                       'required': ['name',
+                                                    'role',
+                                                    'interface',
+                                                    'optional',
+                                                    'limit',
+                                                    'scope'],
+                                       'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'DestroyApplicationUnits': {'additionalProperties': False,
+                                                 'properties': {'unit-names': {'items': {'type': 'string'},
+                                                                               'type': 'array'}},
+                                                 'required': ['unit-names'],
+                                                 'type': 'object'},
+                     'DestroyRelation': {'additionalProperties': False,
+                                         'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                      'type': 'array'}},
+                                         'required': ['endpoints'],
+                                         'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'GetApplicationConstraints': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'GetConstraintsResults': {'additionalProperties': False,
+                                               'properties': {'constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['constraints'],
+                                               'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'SetConstraints': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['application', 'constraints'],
+                                        'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
+                                                   'Result': {'$ref': '#/definitions/AddRelationResults'}},
+                                    'type': 'object'},
+                    'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
+                                                'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
+                                 'type': 'object'},
+                    'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
+                                                      'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
+                                       'type': 'object'},
+                    'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}},
+                                'type': 'object'},
+                    'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
+                                        'type': 'object'},
+                    'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}},
+                                     'type': 'object'},
+                    'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}},
+                               'type': 'object'},
+                    'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                           'Result': {'$ref': '#/definitions/ApplicationGetResults'}},
+                            'type': 'object'},
+                    'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                                   'Result': {'$ref': '#/definitions/StringResult'}},
+                                    'type': 'object'},
+                    'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'},
+                                                      'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+                                       'type': 'object'},
+                    'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}},
+                            'type': 'object'},
+                    'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}},
+                                 'type': 'object'},
+                    'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+                                       'type': 'object'},
+                    'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}},
+                                 'type': 'object'},
+                    'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}},
+                              'type': 'object'},
+                    'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}},
+                               'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddRelationResults)
+    async def AddRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+        '''
+        # 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<+T_co>[~Placement]<~Placement>
+        Returns -> typing.Sequence<+T_co>[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<+T_co>[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<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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<+T_co>[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<+T_co>[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<~KT, +VT_co>[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<~KT, +VT_co>[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<~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
+        '''
+        # 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<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~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<+T_co>[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<~KT, +VT_co>[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 ControllerFacade(Type):
+    name = 'Controller'
+    version = 3
+    schema =     {'definitions': {'AllWatcherId': {'additionalProperties': False,
+                                      'properties': {'watcher-id': {'type': 'string'}},
+                                      'required': ['watcher-id'],
+                                      'type': 'object'},
+                     'CloudCredential': {'additionalProperties': False,
+                                         'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                  'type': 'object'},
+                                                        'auth-type': {'type': 'string'},
+                                                        'redacted': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                         'required': ['auth-type'],
+                                         'type': 'object'},
+                     'CloudSpec': {'additionalProperties': False,
+                                   'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
+                                                  'endpoint': {'type': 'string'},
+                                                  'identity-endpoint': {'type': 'string'},
+                                                  'name': {'type': 'string'},
+                                                  'region': {'type': 'string'},
+                                                  'storage-endpoint': {'type': 'string'},
+                                                  'type': {'type': 'string'}},
+                                   'required': ['type', 'name'],
+                                   'type': 'object'},
+                     'CloudSpecResult': {'additionalProperties': False,
+                                         'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                        'result': {'$ref': '#/definitions/CloudSpec'}},
+                                         'type': 'object'},
+                     'CloudSpecResults': {'additionalProperties': False,
+                                          'properties': {'results': {'items': {'$ref': '#/definitions/CloudSpecResult'},
+                                                                     'type': 'array'}},
+                                          'type': 'object'},
+                     'ConfigValue': {'additionalProperties': False,
+                                     'properties': {'source': {'type': 'string'},
+                                                    'value': {'additionalProperties': True,
+                                                              'type': 'object'}},
+                                     'required': ['value', 'source'],
+                                     'type': 'object'},
+                     'ControllerConfigResult': {'additionalProperties': False,
+                                                'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'}},
+                                                'required': ['config'],
+                                                'type': 'object'},
+                     'DestroyControllerArgs': {'additionalProperties': False,
+                                               'properties': {'destroy-models': {'type': 'boolean'}},
+                                               'required': ['destroy-models'],
+                                               'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'HostedModelConfig': {'additionalProperties': False,
+                                           'properties': {'cloud-spec': {'$ref': '#/definitions/CloudSpec'},
+                                                          'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'},
+                                                          'error': {'$ref': '#/definitions/Error'},
+                                                          'name': {'type': 'string'},
+                                                          'owner': {'type': 'string'}},
+                                           'required': ['name', 'owner'],
+                                           'type': 'object'},
+                     'HostedModelConfigsResults': {'additionalProperties': False,
+                                                   'properties': {'models': {'items': {'$ref': '#/definitions/HostedModelConfig'},
+                                                                             'type': 'array'}},
+                                                   'required': ['models'],
+                                                   'type': 'object'},
+                     'InitiateMigrationArgs': {'additionalProperties': False,
+                                               'properties': {'specs': {'items': {'$ref': '#/definitions/MigrationSpec'},
+                                                                        'type': 'array'}},
+                                               'required': ['specs'],
+                                               'type': 'object'},
+                     'InitiateMigrationResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'migration-id': {'type': 'string'},
+                                                                'model-tag': {'type': 'string'}},
+                                                 'required': ['model-tag',
+                                                              'migration-id'],
+                                                 'type': 'object'},
+                     'InitiateMigrationResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/InitiateMigrationResult'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineHardware': {'additionalProperties': False,
+                                         'properties': {'arch': {'type': 'string'},
+                                                        'availability-zone': {'type': 'string'},
+                                                        'cores': {'type': 'integer'},
+                                                        'cpu-power': {'type': 'integer'},
+                                                        'mem': {'type': 'integer'},
+                                                        'root-disk': {'type': 'integer'},
+                                                        'tags': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                         'type': 'object'},
+                     'MigrationSpec': {'additionalProperties': False,
+                                       'properties': {'model-tag': {'type': 'string'},
+                                                      'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}},
+                                       'required': ['model-tag', 'target-info'],
+                                       'type': 'object'},
+                     'MigrationTargetInfo': {'additionalProperties': False,
+                                             'properties': {'addrs': {'items': {'type': 'string'},
+                                                                      'type': 'array'},
+                                                            'auth-tag': {'type': 'string'},
+                                                            'ca-cert': {'type': 'string'},
+                                                            'controller-tag': {'type': 'string'},
+                                                            'macaroons': {'type': 'string'},
+                                                            'password': {'type': 'string'}},
+                                             'required': ['controller-tag',
+                                                          'addrs',
+                                                          'ca-cert',
+                                                          'auth-tag'],
+                                             'type': 'object'},
+                     'Model': {'additionalProperties': False,
+                               'properties': {'name': {'type': 'string'},
+                                              'owner-tag': {'type': 'string'},
+                                              'uuid': {'type': 'string'}},
+                               'required': ['name', 'uuid', 'owner-tag'],
+                               'type': 'object'},
+                     'ModelBlockInfo': {'additionalProperties': False,
+                                        'properties': {'blocks': {'items': {'type': 'string'},
+                                                                  'type': 'array'},
+                                                       'model-uuid': {'type': 'string'},
+                                                       'name': {'type': 'string'},
+                                                       'owner-tag': {'type': 'string'}},
+                                        'required': ['name',
+                                                     'model-uuid',
+                                                     'owner-tag',
+                                                     'blocks'],
+                                        'type': 'object'},
+                     'ModelBlockInfoList': {'additionalProperties': False,
+                                            'properties': {'models': {'items': {'$ref': '#/definitions/ModelBlockInfo'},
+                                                                      'type': 'array'}},
+                                            'type': 'object'},
+                     'ModelConfigResults': {'additionalProperties': False,
+                                            'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
+                                                                      'type': 'object'}},
+                                            'required': ['config'],
+                                            'type': 'object'},
+                     'ModelMachineInfo': {'additionalProperties': False,
+                                          'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'},
+                                                         'has-vote': {'type': 'boolean'},
+                                                         'id': {'type': 'string'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'wants-vote': {'type': 'boolean'}},
+                                          'required': ['id'],
+                                          'type': 'object'},
+                     'ModelStatus': {'additionalProperties': False,
+                                     'properties': {'application-count': {'type': 'integer'},
+                                                    'hosted-machine-count': {'type': 'integer'},
+                                                    'life': {'type': 'string'},
+                                                    'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+                                                                 'type': 'array'},
+                                                    'model-tag': {'type': 'string'},
+                                                    'owner-tag': {'type': 'string'}},
+                                     'required': ['model-tag',
+                                                  'life',
+                                                  'hosted-machine-count',
+                                                  'application-count',
+                                                  'owner-tag'],
+                                     'type': 'object'},
+                     'ModelStatusResults': {'additionalProperties': False,
+                                            'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'},
+                                                                      'type': 'array'}},
+                                            'required': ['models'],
+                                            'type': 'object'},
+                     'ModelTag': {'additionalProperties': False, 'type': 'object'},
+                     'ModifyControllerAccess': {'additionalProperties': False,
+                                                'properties': {'access': {'type': 'string'},
+                                                               'action': {'type': 'string'},
+                                                               'user-tag': {'type': 'string'}},
+                                                'required': ['user-tag',
+                                                             'action',
+                                                             'access'],
+                                                'type': 'object'},
+                     'ModifyControllerAccessRequest': {'additionalProperties': False,
+                                                       'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyControllerAccess'},
+                                                                                  'type': 'array'}},
+                                                       'required': ['changes'],
+                                                       'type': 'object'},
+                     'RemoveBlocksArgs': {'additionalProperties': False,
+                                          'properties': {'all': {'type': 'boolean'}},
+                                          'required': ['all'],
+                                          'type': 'object'},
+                     'UserAccess': {'additionalProperties': False,
+                                    'properties': {'access': {'type': 'string'},
+                                                   'user-tag': {'type': 'string'}},
+                                    'required': ['user-tag', 'access'],
+                                    'type': 'object'},
+                     'UserAccessResult': {'additionalProperties': False,
+                                          'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                         'result': {'$ref': '#/definitions/UserAccess'}},
+                                          'type': 'object'},
+                     'UserAccessResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/UserAccessResult'},
+                                                                      'type': 'array'}},
+                                           'type': 'object'},
+                     'UserModel': {'additionalProperties': False,
+                                   'properties': {'last-connection': {'format': 'date-time',
+                                                                      'type': 'string'},
+                                                  'model': {'$ref': '#/definitions/Model'}},
+                                   'required': ['model', 'last-connection'],
+                                   'type': 'object'},
+                     'UserModelList': {'additionalProperties': False,
+                                       'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'},
+                                                                      'type': 'array'}},
+                                       'required': ['user-models'],
+                                       'type': 'object'}},
+     'properties': {'AllModels': {'properties': {'Result': {'$ref': '#/definitions/UserModelList'}},
+                                  'type': 'object'},
+                    'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                 'Result': {'$ref': '#/definitions/CloudSpecResults'}},
+                                  'type': 'object'},
+                    'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}},
+                                         'type': 'object'},
+                    'DestroyController': {'properties': {'Params': {'$ref': '#/definitions/DestroyControllerArgs'}},
+                                          'type': 'object'},
+                    'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'},
+                                                    'Result': {'$ref': '#/definitions/CloudSpecResult'}},
+                                     'type': 'object'},
+                    'GetControllerAccess': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                           'Result': {'$ref': '#/definitions/UserAccessResults'}},
+                                            'type': 'object'},
+                    'HostedModelConfigs': {'properties': {'Result': {'$ref': '#/definitions/HostedModelConfigsResults'}},
+                                           'type': 'object'},
+                    'InitiateMigration': {'properties': {'Params': {'$ref': '#/definitions/InitiateMigrationArgs'},
+                                                         'Result': {'$ref': '#/definitions/InitiateMigrationResults'}},
+                                          'type': 'object'},
+                    'ListBlockedModels': {'properties': {'Result': {'$ref': '#/definitions/ModelBlockInfoList'}},
+                                          'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}},
+                                    'type': 'object'},
+                    'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ModelStatusResults'}},
+                                    'type': 'object'},
+                    'ModifyControllerAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyControllerAccessRequest'},
+                                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                               'type': 'object'},
+                    'RemoveBlocks': {'properties': {'Params': {'$ref': '#/definitions/RemoveBlocksArgs'}},
+                                     'type': 'object'},
+                    'WatchAllModels': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}},
+                                       'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(UserModelList)
+    async def AllModels(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='CloudSpec', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ControllerConfigResult)
+    async def ControllerConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='ControllerConfig', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def DestroyController(self, destroy_models):
+        '''
+        destroy_models : bool
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='DestroyController', version=3, params=_params)
+        _params['destroy-models'] = destroy_models
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(CloudSpecResult)
+    async def GetCloudSpec(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='GetCloudSpec', version=3, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='GetControllerAccess', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(HostedModelConfigsResults)
+    async def HostedModelConfigs(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='InitiateMigration', version=3, params=_params)
+        _params['specs'] = specs
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelBlockInfoList)
+    async def ListBlockedModels(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='ListBlockedModels', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResults)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='ModifyControllerAccess', version=3, params=_params)
+        _params['changes'] = changes
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def RemoveBlocks(self, all_):
+        '''
+        all_ : bool
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='RemoveBlocks', version=3, params=_params)
+        _params['all'] = all_
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(AllWatcherId)
+    async def WatchAllModels(self):
+        '''
+
+        Returns -> str
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Controller', request='WatchAllModels', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class FirewallerFacade(Type):
+    name = 'Firewaller'
+    version = 3
+    schema =     {'definitions': {'BoolResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'result': {'type': 'boolean'}},
+                                    'required': ['result'],
+                                    'type': 'object'},
+                     'BoolResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/BoolResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'CloudCredential': {'additionalProperties': False,
+                                         'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                  'type': 'object'},
+                                                        'auth-type': {'type': 'string'},
+                                                        'redacted': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                         'required': ['auth-type'],
+                                         'type': 'object'},
+                     'CloudSpec': {'additionalProperties': False,
+                                   'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
+                                                  'endpoint': {'type': 'string'},
+                                                  'identity-endpoint': {'type': 'string'},
+                                                  'name': {'type': 'string'},
+                                                  'region': {'type': 'string'},
+                                                  'storage-endpoint': {'type': 'string'},
+                                                  'type': {'type': 'string'}},
+                                   'required': ['type', 'name'],
+                                   'type': 'object'},
+                     'CloudSpecResult': {'additionalProperties': False,
+                                         'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                        'result': {'$ref': '#/definitions/CloudSpec'}},
+                                         'type': 'object'},
+                     'CloudSpecResults': {'additionalProperties': False,
+                                          'properties': {'results': {'items': {'$ref': '#/definitions/CloudSpecResult'},
+                                                                     'type': 'array'}},
+                                          'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachinePortRange': {'additionalProperties': False,
+                                          'properties': {'port-range': {'$ref': '#/definitions/PortRange'},
+                                                         'relation-tag': {'type': 'string'},
+                                                         'unit-tag': {'type': 'string'}},
+                                          'required': ['unit-tag',
+                                                       'relation-tag',
+                                                       'port-range'],
+                                          'type': 'object'},
+                     'MachinePorts': {'additionalProperties': False,
+                                      'properties': {'machine-tag': {'type': 'string'},
+                                                     'subnet-tag': {'type': 'string'}},
+                                      'required': ['machine-tag', 'subnet-tag'],
+                                      'type': 'object'},
+                     'MachinePortsParams': {'additionalProperties': False,
+                                            'properties': {'params': {'items': {'$ref': '#/definitions/MachinePorts'},
+                                                                      'type': 'array'}},
+                                            'required': ['params'],
+                                            'type': 'object'},
+                     'MachinePortsResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'ports': {'items': {'$ref': '#/definitions/MachinePortRange'},
+                                                                     'type': 'array'}},
+                                            'required': ['ports'],
+                                            'type': 'object'},
+                     'MachinePortsResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'ModelTag': {'additionalProperties': False, 'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'PortRange': {'additionalProperties': False,
+                                   'properties': {'from-port': {'type': 'integer'},
+                                                  'protocol': {'type': 'string'},
+                                                  'to-port': {'type': 'integer'}},
+                                   'required': ['from-port', 'to-port', 'protocol'],
+                                   'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringsResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'result': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                       'type': 'object'},
+                     'StringsResults': {'additionalProperties': False,
+                                        'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
+                                                                   'type': 'array'}},
+                                        'required': ['results'],
+                                        'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'},
+                     'StringsWatchResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'}},
+     'properties': {'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                 'Result': {'$ref': '#/definitions/CloudSpecResults'}},
+                                  'type': 'object'},
+                    'GetAssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/StringResults'}},
+                                           'type': 'object'},
+                    'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'},
+                                                    'Result': {'$ref': '#/definitions/CloudSpecResult'}},
+                                     'type': 'object'},
+                    'GetExposed': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/BoolResults'}},
+                                   'type': 'object'},
+                    'GetMachineActiveSubnets': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                               'Result': {'$ref': '#/definitions/StringsResults'}},
+                                                'type': 'object'},
+                    'GetMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/MachinePortsParams'},
+                                                       'Result': {'$ref': '#/definitions/MachinePortsResults'}},
+                                        'type': 'object'},
+                    'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StringResults'}},
+                                   'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                              'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'},
+                    'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+                                           'type': 'object'},
+                    'WatchOpenedPorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                         'type': 'object'},
+                    'WatchUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                   'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(CloudSpecResults)
+    async def CloudSpec(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Firewaller', request='GetAssignedMachine', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(CloudSpecResult)
+    async def GetCloudSpec(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Firewaller', request='GetCloudSpec', version=3, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Firewaller', request='Life', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Firewaller', request='Watch', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Firewaller', request='WatchForModelConfigChanges', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResult)
+    async def WatchModelMachines(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Firewaller', request='WatchUnits', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class InstancePollerFacade(Type):
+    name = 'InstancePoller'
+    version = 3
+    schema =     {'definitions': {'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'BoolResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'result': {'type': 'boolean'}},
+                                    'required': ['result'],
+                                    'type': 'object'},
+                     'BoolResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/BoolResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineAddresses': {'additionalProperties': False,
+                                          'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+                                                                       'type': 'array'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag', 'addresses'],
+                                          'type': 'object'},
+                     'MachineAddressesResult': {'additionalProperties': False,
+                                                'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+                                                                             'type': 'array'},
+                                                               'error': {'$ref': '#/definitions/Error'}},
+                                                'required': ['addresses'],
+                                                'type': 'object'},
+                     'MachineAddressesResults': {'additionalProperties': False,
+                                                 'properties': {'results': {'items': {'$ref': '#/definitions/MachineAddressesResult'},
+                                                                            'type': 'array'}},
+                                                 'required': ['results'],
+                                                 'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'SetMachinesAddresses': {'additionalProperties': False,
+                                              'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'},
+                                                                                   'type': 'array'}},
+                                              'required': ['machine-addresses'],
+                                              'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'StatusResult': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'id': {'type': 'string'},
+                                                     'info': {'type': 'string'},
+                                                     'life': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['id',
+                                                   'life',
+                                                   'status',
+                                                   'info',
+                                                   'data',
+                                                   'since'],
+                                      'type': 'object'},
+                     'StatusResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'}},
+     'properties': {'AreManuallyProvisioned': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/BoolResults'}},
+                                               'type': 'object'},
+                    'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StringResults'}},
+                                   'type': 'object'},
+                    'InstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/StatusResults'}},
+                                       'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'ProviderAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                         'Result': {'$ref': '#/definitions/MachineAddressesResults'}},
+                                          'type': 'object'},
+                    'SetInstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                         'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                          'type': 'object'},
+                    'SetProviderAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'Status': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/StatusResults'}},
+                               'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'},
+                    'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+                                           'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(BoolResults)
+    async def AreManuallyProvisioned(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='InstancePoller', request='Life', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='InstancePoller', request='Status', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='InstancePoller', request='WatchForModelConfigChanges', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResult)
+    async def WatchModelMachines(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='InstancePoller', request='WatchModelMachines', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class MachineManagerFacade(Type):
+    name = 'MachineManager'
+    version = 3
+    schema =     {'definitions': {'AddMachineParams': {'additionalProperties': False,
+                                          'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+                                                                       'type': 'array'},
+                                                         'constraints': {'$ref': '#/definitions/Value'},
+                                                         'container-type': {'type': 'string'},
+                                                         'disks': {'items': {'$ref': '#/definitions/Constraints'},
+                                                                   'type': 'array'},
+                                                         'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'jobs': {'items': {'type': 'string'},
+                                                                  'type': 'array'},
+                                                         'nonce': {'type': 'string'},
+                                                         'parent-id': {'type': 'string'},
+                                                         'placement': {'$ref': '#/definitions/Placement'},
+                                                         'series': {'type': 'string'}},
+                                          'required': ['series',
+                                                       'constraints',
+                                                       'jobs',
+                                                       'parent-id',
+                                                       'container-type',
+                                                       'instance-id',
+                                                       'nonce',
+                                                       'hardware-characteristics',
+                                                       'addresses'],
+                                          'type': 'object'},
+                     'AddMachines': {'additionalProperties': False,
+                                     'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'},
+                                                               'type': 'array'}},
+                                     'required': ['params'],
+                                     'type': 'object'},
+                     'AddMachinesResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'machine': {'type': 'string'}},
+                                           'required': ['machine'],
+                                           'type': 'object'},
+                     'AddMachinesResults': {'additionalProperties': False,
+                                            'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'},
+                                                                        'type': 'array'}},
+                                            'required': ['machines'],
+                                            'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'DestroyMachineInfo': {'additionalProperties': False,
+                                            'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                 'type': 'array'},
+                                                           'destroyed-units': {'items': {'$ref': '#/definitions/Entity'},
+                                                                               'type': 'array'},
+                                                           'detached-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                'type': 'array'}},
+                                            'type': 'object'},
+                     'DestroyMachineResult': {'additionalProperties': False,
+                                              'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                             'info': {'$ref': '#/definitions/DestroyMachineInfo'}},
+                                              'type': 'object'},
+                     'DestroyMachineResults': {'additionalProperties': False,
+                                               'properties': {'results': {'items': {'$ref': '#/definitions/DestroyMachineResult'},
+                                                                          'type': 'array'}},
+                                               'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'HardwareCharacteristics': {'additionalProperties': False,
+                                                 'properties': {'arch': {'type': 'string'},
+                                                                'availability-zone': {'type': 'string'},
+                                                                'cpu-cores': {'type': 'integer'},
+                                                                'cpu-power': {'type': 'integer'},
+                                                                'mem': {'type': 'integer'},
+                                                                'root-disk': {'type': 'integer'},
+                                                                'tags': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                                 'type': 'object'},
+                     'InstanceType': {'additionalProperties': False,
+                                      'properties': {'arches': {'items': {'type': 'string'},
+                                                                'type': 'array'},
+                                                     'cost': {'type': 'integer'},
+                                                     'cpu-cores': {'type': 'integer'},
+                                                     'deprecated': {'type': 'boolean'},
+                                                     'memory': {'type': 'integer'},
+                                                     'name': {'type': 'string'},
+                                                     'root-disk': {'type': 'integer'},
+                                                     'virt-type': {'type': 'string'}},
+                                      'required': ['arches', 'cpu-cores', 'memory'],
+                                      'type': 'object'},
+                     'InstanceTypesResult': {'additionalProperties': False,
+                                             'properties': {'cost-currency': {'type': 'string'},
+                                                            'cost-divisor': {'type': 'integer'},
+                                                            'cost-unit': {'type': 'string'},
+                                                            'error': {'$ref': '#/definitions/Error'},
+                                                            'instance-types': {'items': {'$ref': '#/definitions/InstanceType'},
+                                                                               'type': 'array'}},
+                                             'type': 'object'},
+                     'InstanceTypesResults': {'additionalProperties': False,
+                                              'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['results'],
+                                              'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'ModelInstanceTypesConstraint': {'additionalProperties': False,
+                                                      'properties': {'value': {'$ref': '#/definitions/Value'}},
+                                                      'type': 'object'},
+                     'ModelInstanceTypesConstraints': {'additionalProperties': False,
+                                                       'properties': {'constraints': {'items': {'$ref': '#/definitions/ModelInstanceTypesConstraint'},
+                                                                                      'type': 'array'}},
+                                                       'required': ['constraints'],
+                                                       'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+                                                   'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+                                    'type': 'object'},
+                    'DestroyMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/DestroyMachineResults'}},
+                                       'type': 'object'},
+                    'ForceDestroyMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                           'Result': {'$ref': '#/definitions/DestroyMachineResults'}},
+                                            'type': 'object'},
+                    'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/ModelInstanceTypesConstraints'},
+                                                     'Result': {'$ref': '#/definitions/InstanceTypesResults'}},
+                                      'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddMachinesResults)
+    async def AddMachines(self, params):
+        '''
+        params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
+        Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='MachineManager', request='InstanceTypes', version=3, params=_params)
+        _params['constraints'] = constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ModelManagerFacade(Type):
+    name = 'ModelManager'
+    version = 3
+    schema =     {'definitions': {'DumpModelRequest': {'additionalProperties': False,
+                                          'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                                      'type': 'array'},
+                                                         'simplified': {'type': 'boolean'}},
+                                          'required': ['entities', 'simplified'],
+                                          'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatus': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'info': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['status', 'info', 'since'],
+                                      'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineHardware': {'additionalProperties': False,
+                                         'properties': {'arch': {'type': 'string'},
+                                                        'availability-zone': {'type': 'string'},
+                                                        'cores': {'type': 'integer'},
+                                                        'cpu-power': {'type': 'integer'},
+                                                        'mem': {'type': 'integer'},
+                                                        'root-disk': {'type': 'integer'},
+                                                        'tags': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                         'type': 'object'},
+                     'MapResult': {'additionalProperties': False,
+                                   'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                  'result': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                          'type': 'object'}},
+                                                             'type': 'object'}},
+                                   'required': ['result'],
+                                   'type': 'object'},
+                     'MapResults': {'additionalProperties': False,
+                                    'properties': {'results': {'items': {'$ref': '#/definitions/MapResult'},
+                                                               'type': 'array'}},
+                                    'required': ['results'],
+                                    'type': 'object'},
+                     'Model': {'additionalProperties': False,
+                               'properties': {'name': {'type': 'string'},
+                                              'owner-tag': {'type': 'string'},
+                                              'uuid': {'type': 'string'}},
+                               'required': ['name', 'uuid', 'owner-tag'],
+                               'type': 'object'},
+                     'ModelCreateArgs': {'additionalProperties': False,
+                                         'properties': {'cloud-tag': {'type': 'string'},
+                                                        'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                'type': 'object'}},
+                                                                   'type': 'object'},
+                                                        'credential': {'type': 'string'},
+                                                        'name': {'type': 'string'},
+                                                        'owner-tag': {'type': 'string'},
+                                                        'region': {'type': 'string'}},
+                                         'required': ['name', 'owner-tag'],
+                                         'type': 'object'},
+                     'ModelDefaultValues': {'additionalProperties': False,
+                                            'properties': {'cloud-region': {'type': 'string'},
+                                                           'cloud-tag': {'type': 'string'},
+                                                           'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                   'type': 'object'}},
+                                                                      'type': 'object'}},
+                                            'required': ['config'],
+                                            'type': 'object'},
+                     'ModelDefaults': {'additionalProperties': False,
+                                       'properties': {'controller': {'additionalProperties': True,
+                                                                     'type': 'object'},
+                                                      'default': {'additionalProperties': True,
+                                                                  'type': 'object'},
+                                                      'regions': {'items': {'$ref': '#/definitions/RegionDefaults'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'ModelDefaultsResult': {'additionalProperties': False,
+                                             'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ModelDefaults'}},
+                                                                       'type': 'object'}},
+                                             'required': ['config'],
+                                             'type': 'object'},
+                     'ModelInfo': {'additionalProperties': False,
+                                   'properties': {'agent-version': {'$ref': '#/definitions/Number'},
+                                                  'cloud-credential-tag': {'type': 'string'},
+                                                  'cloud-region': {'type': 'string'},
+                                                  'cloud-tag': {'type': 'string'},
+                                                  'controller-uuid': {'type': 'string'},
+                                                  'default-series': {'type': 'string'},
+                                                  'life': {'type': 'string'},
+                                                  'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+                                                               'type': 'array'},
+                                                  'migration': {'$ref': '#/definitions/ModelMigrationStatus'},
+                                                  'name': {'type': 'string'},
+                                                  'owner-tag': {'type': 'string'},
+                                                  'provider-type': {'type': 'string'},
+                                                  'sla': {'$ref': '#/definitions/ModelSLAInfo'},
+                                                  'status': {'$ref': '#/definitions/EntityStatus'},
+                                                  'users': {'items': {'$ref': '#/definitions/ModelUserInfo'},
+                                                            'type': 'array'},
+                                                  'uuid': {'type': 'string'}},
+                                   'required': ['name',
+                                                'uuid',
+                                                'controller-uuid',
+                                                'cloud-tag',
+                                                'owner-tag',
+                                                'life',
+                                                'users',
+                                                'machines',
+                                                'sla',
+                                                'agent-version'],
+                                   'type': 'object'},
+                     'ModelInfoResult': {'additionalProperties': False,
+                                         'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                        'result': {'$ref': '#/definitions/ModelInfo'}},
+                                         'type': 'object'},
+                     'ModelInfoResults': {'additionalProperties': False,
+                                          'properties': {'results': {'items': {'$ref': '#/definitions/ModelInfoResult'},
+                                                                     'type': 'array'}},
+                                          'required': ['results'],
+                                          'type': 'object'},
+                     'ModelMachineInfo': {'additionalProperties': False,
+                                          'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'},
+                                                         'has-vote': {'type': 'boolean'},
+                                                         'id': {'type': 'string'},
+                                                         'instance-id': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'wants-vote': {'type': 'boolean'}},
+                                          'required': ['id'],
+                                          'type': 'object'},
+                     'ModelMigrationStatus': {'additionalProperties': False,
+                                              'properties': {'end': {'format': 'date-time',
+                                                                     'type': 'string'},
+                                                             'start': {'format': 'date-time',
+                                                                       'type': 'string'},
+                                                             'status': {'type': 'string'}},
+                                              'required': ['status', 'start'],
+                                              'type': 'object'},
+                     'ModelSLAInfo': {'additionalProperties': False,
+                                      'properties': {'level': {'type': 'string'},
+                                                     'owner': {'type': 'string'}},
+                                      'required': ['level', 'owner'],
+                                      'type': 'object'},
+                     'ModelStatus': {'additionalProperties': False,
+                                     'properties': {'application-count': {'type': 'integer'},
+                                                    'hosted-machine-count': {'type': 'integer'},
+                                                    'life': {'type': 'string'},
+                                                    'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+                                                                 'type': 'array'},
+                                                    'model-tag': {'type': 'string'},
+                                                    'owner-tag': {'type': 'string'}},
+                                     'required': ['model-tag',
+                                                  'life',
+                                                  'hosted-machine-count',
+                                                  'application-count',
+                                                  'owner-tag'],
+                                     'type': 'object'},
+                     'ModelStatusResults': {'additionalProperties': False,
+                                            'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'},
+                                                                      'type': 'array'}},
+                                            'required': ['models'],
+                                            'type': 'object'},
+                     'ModelUnsetKeys': {'additionalProperties': False,
+                                        'properties': {'cloud-region': {'type': 'string'},
+                                                       'cloud-tag': {'type': 'string'},
+                                                       'keys': {'items': {'type': 'string'},
+                                                                'type': 'array'}},
+                                        'required': ['keys'],
+                                        'type': 'object'},
+                     'ModelUserInfo': {'additionalProperties': False,
+                                       'properties': {'access': {'type': 'string'},
+                                                      'display-name': {'type': 'string'},
+                                                      'last-connection': {'format': 'date-time',
+                                                                          'type': 'string'},
+                                                      'user': {'type': 'string'}},
+                                       'required': ['user',
+                                                    'display-name',
+                                                    'last-connection',
+                                                    'access'],
+                                       'type': 'object'},
+                     'ModifyModelAccess': {'additionalProperties': False,
+                                           'properties': {'access': {'type': 'string'},
+                                                          'action': {'type': 'string'},
+                                                          'model-tag': {'type': 'string'},
+                                                          'user-tag': {'type': 'string'}},
+                                           'required': ['user-tag',
+                                                        'action',
+                                                        'access',
+                                                        'model-tag'],
+                                           'type': 'object'},
+                     'ModifyModelAccessRequest': {'additionalProperties': False,
+                                                  'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyModelAccess'},
+                                                                             'type': 'array'}},
+                                                  'required': ['changes'],
+                                                  'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'RegionDefaults': {'additionalProperties': False,
+                                        'properties': {'region-name': {'type': 'string'},
+                                                       'value': {'additionalProperties': True,
+                                                                 'type': 'object'}},
+                                        'required': ['region-name', 'value'],
+                                        'type': 'object'},
+                     'SetModelDefaults': {'additionalProperties': False,
+                                          'properties': {'config': {'items': {'$ref': '#/definitions/ModelDefaultValues'},
+                                                                    'type': 'array'}},
+                                          'required': ['config'],
+                                          'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'UnsetModelDefaults': {'additionalProperties': False,
+                                            'properties': {'keys': {'items': {'$ref': '#/definitions/ModelUnsetKeys'},
+                                                                    'type': 'array'}},
+                                            'required': ['keys'],
+                                            'type': 'object'},
+                     'UserModel': {'additionalProperties': False,
+                                   'properties': {'last-connection': {'format': 'date-time',
+                                                                      'type': 'string'},
+                                                  'model': {'$ref': '#/definitions/Model'}},
+                                   'required': ['model', 'last-connection'],
+                                   'type': 'object'},
+                     'UserModelList': {'additionalProperties': False,
+                                       'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'},
+                                                                      'type': 'array'}},
+                                       'required': ['user-models'],
+                                       'type': 'object'}},
+     'properties': {'CreateModel': {'properties': {'Params': {'$ref': '#/definitions/ModelCreateArgs'},
+                                                   'Result': {'$ref': '#/definitions/ModelInfo'}},
+                                    'type': 'object'},
+                    'DestroyModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'DumpModels': {'properties': {'Params': {'$ref': '#/definitions/DumpModelRequest'},
+                                                  'Result': {'$ref': '#/definitions/StringResults'}},
+                                   'type': 'object'},
+                    'DumpModelsDB': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/MapResults'}},
+                                     'type': 'object'},
+                    'ListModels': {'properties': {'Params': {'$ref': '#/definitions/Entity'},
+                                                  'Result': {'$ref': '#/definitions/UserModelList'}},
+                                   'type': 'object'},
+                    'ModelDefaults': {'properties': {'Result': {'$ref': '#/definitions/ModelDefaultsResult'}},
+                                      'type': 'object'},
+                    'ModelInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                 'Result': {'$ref': '#/definitions/ModelInfoResults'}},
+                                  'type': 'object'},
+                    'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ModelStatusResults'}},
+                                    'type': 'object'},
+                    'ModifyModelAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyModelAccessRequest'},
+                                                         'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                          'type': 'object'},
+                    'SetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/SetModelDefaults'},
+                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                         'type': 'object'},
+                    'UnsetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/UnsetModelDefaults'},
+                                                          'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                           'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ModelInfo)
+    async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region):
+        '''
+        cloud_tag : str
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        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>]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='CreateModel', version=3, params=_params)
+        _params['cloud-tag'] = cloud_tag
+        _params['config'] = config
+        _params['credential'] = credential
+        _params['name'] = name
+        _params['owner-tag'] = owner_tag
+        _params['region'] = region
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def DestroyModels(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        simplified : bool
+        Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='DumpModels', version=3, params=_params)
+        _params['entities'] = entities
+        _params['simplified'] = simplified
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(MapResults)
+    async def DumpModelsDB(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='DumpModelsDB', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(UserModelList)
+    async def ListModels(self, tag):
+        '''
+        tag : str
+        Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='ListModels', version=3, params=_params)
+        _params['tag'] = tag
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelDefaultsResult)
+    async def ModelDefaults(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='ModelManager', request='UnsetModelDefaults', version=3, params=_params)
+        _params['keys'] = keys
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class ProvisionerFacade(Type):
+    name = 'Provisioner'
+    version = 3
+    schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+                                            'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+                                                                                 'type': 'array'},
+                                                                       'type': 'array'}},
+                                            'required': ['servers'],
+                                            'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'Binary': {'additionalProperties': False,
+                                'properties': {'Arch': {'type': 'string'},
+                                               'Number': {'$ref': '#/definitions/Number'},
+                                               'Series': {'type': 'string'}},
+                                'required': ['Number', 'Series', 'Arch'],
+                                'type': 'object'},
+                     'BytesResult': {'additionalProperties': False,
+                                     'properties': {'result': {'items': {'type': 'integer'},
+                                                               'type': 'array'}},
+                                     'required': ['result'],
+                                     'type': 'object'},
+                     'CloudImageMetadata': {'additionalProperties': False,
+                                            'properties': {'arch': {'type': 'string'},
+                                                           'image-id': {'type': 'string'},
+                                                           'priority': {'type': 'integer'},
+                                                           'region': {'type': 'string'},
+                                                           'root-storage-size': {'type': 'integer'},
+                                                           'root-storage-type': {'type': 'string'},
+                                                           'series': {'type': 'string'},
+                                                           'source': {'type': 'string'},
+                                                           'stream': {'type': 'string'},
+                                                           'version': {'type': 'string'},
+                                                           'virt-type': {'type': 'string'}},
+                                            'required': ['image-id',
+                                                         'region',
+                                                         'version',
+                                                         'series',
+                                                         'arch',
+                                                         'source',
+                                                         'priority'],
+                                            'type': 'object'},
+                     'ConstraintsResult': {'additionalProperties': False,
+                                           'properties': {'constraints': {'$ref': '#/definitions/Value'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['constraints'],
+                                           'type': 'object'},
+                     'ConstraintsResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/ConstraintsResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'ContainerConfig': {'additionalProperties': False,
+                                         'properties': {'UpdateBehavior': {'$ref': '#/definitions/UpdateBehavior'},
+                                                        'apt-mirror': {'type': 'string'},
+                                                        'apt-proxy': {'$ref': '#/definitions/Settings'},
+                                                        'authorized-keys': {'type': 'string'},
+                                                        'provider-type': {'type': 'string'},
+                                                        'proxy': {'$ref': '#/definitions/Settings'},
+                                                        'ssl-hostname-verification': {'type': 'boolean'}},
+                                         'required': ['provider-type',
+                                                      'authorized-keys',
+                                                      'ssl-hostname-verification',
+                                                      'proxy',
+                                                      'apt-proxy',
+                                                      'apt-mirror',
+                                                      'UpdateBehavior'],
+                                         'type': 'object'},
+                     'ContainerManagerConfig': {'additionalProperties': False,
+                                                'properties': {'config': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                          'type': 'object'}},
+                                                'required': ['config'],
+                                                'type': 'object'},
+                     'ContainerManagerConfigParams': {'additionalProperties': False,
+                                                      'properties': {'type': {'type': 'string'}},
+                                                      'required': ['type'],
+                                                      'type': 'object'},
+                     'ControllerConfigResult': {'additionalProperties': False,
+                                                'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'}},
+                                                'required': ['config'],
+                                                'type': 'object'},
+                     'DeviceBridgeInfo': {'additionalProperties': False,
+                                          'properties': {'bridge-name': {'type': 'string'},
+                                                         'host-device-name': {'type': 'string'}},
+                                          'required': ['host-device-name',
+                                                       'bridge-name'],
+                                          'type': 'object'},
+                     'DistributionGroupResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'result': {'items': {'type': 'string'},
+                                                                           'type': 'array'}},
+                                                 'required': ['result'],
+                                                 'type': 'object'},
+                     'DistributionGroupResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/DistributionGroupResult'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityPassword': {'additionalProperties': False,
+                                        'properties': {'password': {'type': 'string'},
+                                                       'tag': {'type': 'string'}},
+                                        'required': ['tag', 'password'],
+                                        'type': 'object'},
+                     'EntityPasswords': {'additionalProperties': False,
+                                         'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'},
+                                                                    'type': 'array'}},
+                                         'required': ['changes'],
+                                         'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'FindToolsParams': {'additionalProperties': False,
+                                         'properties': {'arch': {'type': 'string'},
+                                                        'major': {'type': 'integer'},
+                                                        'minor': {'type': 'integer'},
+                                                        'number': {'$ref': '#/definitions/Number'},
+                                                        'series': {'type': 'string'}},
+                                         'required': ['number',
+                                                      'major',
+                                                      'minor',
+                                                      'arch',
+                                                      'series'],
+                                         'type': 'object'},
+                     'FindToolsResult': {'additionalProperties': False,
+                                         'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                        'list': {'items': {'$ref': '#/definitions/Tools'},
+                                                                 'type': 'array'}},
+                                         'required': ['list'],
+                                         'type': 'object'},
+                     'HardwareCharacteristics': {'additionalProperties': False,
+                                                 'properties': {'arch': {'type': 'string'},
+                                                                'availability-zone': {'type': 'string'},
+                                                                'cpu-cores': {'type': 'integer'},
+                                                                'cpu-power': {'type': 'integer'},
+                                                                'mem': {'type': 'integer'},
+                                                                'root-disk': {'type': 'integer'},
+                                                                'tags': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                                 'type': 'object'},
+                     'HostNetworkChange': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'new-bridges': {'items': {'$ref': '#/definitions/DeviceBridgeInfo'},
+                                                                          'type': 'array'},
+                                                          'reconfigure-delay': {'type': 'integer'}},
+                                           'required': ['new-bridges',
+                                                        'reconfigure-delay'],
+                                           'type': 'object'},
+                     'HostNetworkChangeResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/HostNetworkChange'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'HostPort': {'additionalProperties': False,
+                                  'properties': {'Address': {'$ref': '#/definitions/Address'},
+                                                 'port': {'type': 'integer'}},
+                                  'required': ['Address', 'port'],
+                                  'type': 'object'},
+                     'InstanceInfo': {'additionalProperties': False,
+                                      'properties': {'characteristics': {'$ref': '#/definitions/HardwareCharacteristics'},
+                                                     'instance-id': {'type': 'string'},
+                                                     'network-config': {'items': {'$ref': '#/definitions/NetworkConfig'},
+                                                                        'type': 'array'},
+                                                     'nonce': {'type': 'string'},
+                                                     'tag': {'type': 'string'},
+                                                     'volume-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentInfo'}},
+                                                                            'type': 'object'},
+                                                     'volumes': {'items': {'$ref': '#/definitions/Volume'},
+                                                                 'type': 'array'}},
+                                      'required': ['tag',
+                                                   'instance-id',
+                                                   'nonce',
+                                                   'characteristics',
+                                                   'volumes',
+                                                   'volume-attachments',
+                                                   'network-config'],
+                                      'type': 'object'},
+                     'InstancesInfo': {'additionalProperties': False,
+                                       'properties': {'machines': {'items': {'$ref': '#/definitions/InstanceInfo'},
+                                                                   'type': 'array'}},
+                                       'required': ['machines'],
+                                       'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineContainers': {'additionalProperties': False,
+                                           'properties': {'container-types': {'items': {'type': 'string'},
+                                                                              'type': 'array'},
+                                                          'machine-tag': {'type': 'string'}},
+                                           'required': ['machine-tag',
+                                                        'container-types'],
+                                           'type': 'object'},
+                     'MachineContainersParams': {'additionalProperties': False,
+                                                 'properties': {'params': {'items': {'$ref': '#/definitions/MachineContainers'},
+                                                                           'type': 'array'}},
+                                                 'required': ['params'],
+                                                 'type': 'object'},
+                     'MachineNetworkConfigResult': {'additionalProperties': False,
+                                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                   'info': {'items': {'$ref': '#/definitions/NetworkConfig'},
+                                                                            'type': 'array'}},
+                                                    'required': ['info'],
+                                                    'type': 'object'},
+                     'MachineNetworkConfigResults': {'additionalProperties': False,
+                                                     'properties': {'results': {'items': {'$ref': '#/definitions/MachineNetworkConfigResult'},
+                                                                                'type': 'array'}},
+                                                     'required': ['results'],
+                                                     'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'NetworkConfig': {'additionalProperties': False,
+                                       'properties': {'address': {'type': 'string'},
+                                                      'cidr': {'type': 'string'},
+                                                      'config-type': {'type': 'string'},
+                                                      'device-index': {'type': 'integer'},
+                                                      'disabled': {'type': 'boolean'},
+                                                      'dns-search-domains': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                      'dns-servers': {'items': {'type': 'string'},
+                                                                      'type': 'array'},
+                                                      'gateway-address': {'type': 'string'},
+                                                      'interface-name': {'type': 'string'},
+                                                      'interface-type': {'type': 'string'},
+                                                      'mac-address': {'type': 'string'},
+                                                      'mtu': {'type': 'integer'},
+                                                      'no-auto-start': {'type': 'boolean'},
+                                                      'parent-interface-name': {'type': 'string'},
+                                                      'provider-address-id': {'type': 'string'},
+                                                      'provider-id': {'type': 'string'},
+                                                      'provider-space-id': {'type': 'string'},
+                                                      'provider-subnet-id': {'type': 'string'},
+                                                      'provider-vlan-id': {'type': 'string'},
+                                                      'routes': {'items': {'$ref': '#/definitions/NetworkRoute'},
+                                                                 'type': 'array'},
+                                                      'vlan-tag': {'type': 'integer'}},
+                                       'required': ['device-index',
+                                                    'mac-address',
+                                                    'cidr',
+                                                    'mtu',
+                                                    'provider-id',
+                                                    'provider-subnet-id',
+                                                    'provider-space-id',
+                                                    'provider-address-id',
+                                                    'provider-vlan-id',
+                                                    'vlan-tag',
+                                                    'interface-name',
+                                                    'parent-interface-name',
+                                                    'interface-type',
+                                                    'disabled'],
+                                       'type': 'object'},
+                     'NetworkRoute': {'additionalProperties': False,
+                                      'properties': {'destination-cidr': {'type': 'string'},
+                                                     'gateway-ip': {'type': 'string'},
+                                                     'metric': {'type': 'integer'}},
+                                      'required': ['destination-cidr',
+                                                   'gateway-ip',
+                                                   'metric'],
+                                      'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'Number': {'additionalProperties': False,
+                                'properties': {'Build': {'type': 'integer'},
+                                               'Major': {'type': 'integer'},
+                                               'Minor': {'type': 'integer'},
+                                               'Patch': {'type': 'integer'},
+                                               'Tag': {'type': 'string'}},
+                                'required': ['Major',
+                                             'Minor',
+                                             'Tag',
+                                             'Patch',
+                                             'Build'],
+                                'type': 'object'},
+                     'ProvisioningInfo': {'additionalProperties': False,
+                                          'properties': {'constraints': {'$ref': '#/definitions/Value'},
+                                                         'controller-config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                            'type': 'object'}},
+                                                                               'type': 'object'},
+                                                         'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                               'type': 'object'},
+                                                         'image-metadata': {'items': {'$ref': '#/definitions/CloudImageMetadata'},
+                                                                            'type': 'array'},
+                                                         'jobs': {'items': {'type': 'string'},
+                                                                  'type': 'array'},
+                                                         'placement': {'type': 'string'},
+                                                         'series': {'type': 'string'},
+                                                         'subnets-to-zones': {'patternProperties': {'.*': {'items': {'type': 'string'},
+                                                                                                           'type': 'array'}},
+                                                                              'type': 'object'},
+                                                         'tags': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                  'type': 'object'},
+                                                         'volume-attachments': {'items': {'$ref': '#/definitions/VolumeAttachmentParams'},
+                                                                                'type': 'array'},
+                                                         'volumes': {'items': {'$ref': '#/definitions/VolumeParams'},
+                                                                     'type': 'array'}},
+                                          'required': ['constraints',
+                                                       'series',
+                                                       'placement',
+                                                       'jobs'],
+                                          'type': 'object'},
+                     'ProvisioningInfoResult': {'additionalProperties': False,
+                                                'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                               'result': {'$ref': '#/definitions/ProvisioningInfo'}},
+                                                'required': ['result'],
+                                                'type': 'object'},
+                     'ProvisioningInfoResults': {'additionalProperties': False,
+                                                 'properties': {'results': {'items': {'$ref': '#/definitions/ProvisioningInfoResult'},
+                                                                            'type': 'array'}},
+                                                 'required': ['results'],
+                                                 'type': 'object'},
+                     'SetMachineNetworkConfig': {'additionalProperties': False,
+                                                 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'},
+                                                                           'type': 'array'},
+                                                                'tag': {'type': 'string'}},
+                                                 'required': ['tag', 'config'],
+                                                 'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'Settings': {'additionalProperties': False,
+                                  'properties': {'AutoNoProxy': {'type': 'string'},
+                                                 'Ftp': {'type': 'string'},
+                                                 'Http': {'type': 'string'},
+                                                 'Https': {'type': 'string'},
+                                                 'NoProxy': {'type': 'string'}},
+                                  'required': ['Http',
+                                               'Https',
+                                               'Ftp',
+                                               'NoProxy',
+                                               'AutoNoProxy'],
+                                  'type': 'object'},
+                     'StatusResult': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'id': {'type': 'string'},
+                                                     'info': {'type': 'string'},
+                                                     'life': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['id',
+                                                   'life',
+                                                   'status',
+                                                   'info',
+                                                   'data',
+                                                   'since'],
+                                      'type': 'object'},
+                     'StatusResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringsResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'result': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                       'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'},
+                     'StringsWatchResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'Tools': {'additionalProperties': False,
+                               'properties': {'sha256': {'type': 'string'},
+                                              'size': {'type': 'integer'},
+                                              'url': {'type': 'string'},
+                                              'version': {'$ref': '#/definitions/Binary'}},
+                               'required': ['version', 'url', 'size'],
+                               'type': 'object'},
+                     'ToolsResult': {'additionalProperties': False,
+                                     'properties': {'disable-ssl-hostname-verification': {'type': 'boolean'},
+                                                    'error': {'$ref': '#/definitions/Error'},
+                                                    'tools': {'items': {'$ref': '#/definitions/Tools'},
+                                                              'type': 'array'}},
+                                     'required': ['tools',
+                                                  'disable-ssl-hostname-verification'],
+                                     'type': 'object'},
+                     'ToolsResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ToolsResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'UpdateBehavior': {'additionalProperties': False,
+                                        'properties': {'enable-os-refresh-update': {'type': 'boolean'},
+                                                       'enable-os-upgrade': {'type': 'boolean'}},
+                                        'required': ['enable-os-refresh-update',
+                                                     'enable-os-upgrade'],
+                                        'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'},
+                     'Volume': {'additionalProperties': False,
+                                'properties': {'info': {'$ref': '#/definitions/VolumeInfo'},
+                                               'volume-tag': {'type': 'string'}},
+                                'required': ['volume-tag', 'info'],
+                                'type': 'object'},
+                     'VolumeAttachmentInfo': {'additionalProperties': False,
+                                              'properties': {'bus-address': {'type': 'string'},
+                                                             'device-link': {'type': 'string'},
+                                                             'device-name': {'type': 'string'},
+                                                             'read-only': {'type': 'boolean'}},
+                                              'type': 'object'},
+                     'VolumeAttachmentParams': {'additionalProperties': False,
+                                                'properties': {'instance-id': {'type': 'string'},
+                                                               'machine-tag': {'type': 'string'},
+                                                               'provider': {'type': 'string'},
+                                                               'read-only': {'type': 'boolean'},
+                                                               'volume-id': {'type': 'string'},
+                                                               'volume-tag': {'type': 'string'}},
+                                                'required': ['volume-tag',
+                                                             'machine-tag',
+                                                             'provider'],
+                                                'type': 'object'},
+                     'VolumeInfo': {'additionalProperties': False,
+                                    'properties': {'hardware-id': {'type': 'string'},
+                                                   'persistent': {'type': 'boolean'},
+                                                   'pool': {'type': 'string'},
+                                                   'size': {'type': 'integer'},
+                                                   'volume-id': {'type': 'string'},
+                                                   'wwn': {'type': 'string'}},
+                                    'required': ['volume-id', 'size', 'persistent'],
+                                    'type': 'object'},
+                     'VolumeParams': {'additionalProperties': False,
+                                      'properties': {'attachment': {'$ref': '#/definitions/VolumeAttachmentParams'},
+                                                     'attributes': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                 'type': 'object'}},
+                                                                    'type': 'object'},
+                                                     'provider': {'type': 'string'},
+                                                     'size': {'type': 'integer'},
+                                                     'tags': {'patternProperties': {'.*': {'type': 'string'}},
+                                                              'type': 'object'},
+                                                     'volume-tag': {'type': 'string'}},
+                                      'required': ['volume-tag',
+                                                   'size',
+                                                   'provider'],
+                                      'type': 'object'},
+                     'WatchContainer': {'additionalProperties': False,
+                                        'properties': {'container-type': {'type': 'string'},
+                                                       'machine-tag': {'type': 'string'}},
+                                        'required': ['machine-tag',
+                                                     'container-type'],
+                                        'type': 'object'},
+                     'WatchContainers': {'additionalProperties': False,
+                                         'properties': {'params': {'items': {'$ref': '#/definitions/WatchContainer'},
+                                                                   'type': 'array'}},
+                                         'required': ['params'],
+                                         'type': 'object'}},
+     'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
+                                     'type': 'object'},
+                    'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+                                     'type': 'object'},
+                    'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+                               'type': 'object'},
+                    'Constraints': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ConstraintsResults'}},
+                                    'type': 'object'},
+                    'ContainerConfig': {'properties': {'Result': {'$ref': '#/definitions/ContainerConfig'}},
+                                        'type': 'object'},
+                    'ContainerManagerConfig': {'properties': {'Params': {'$ref': '#/definitions/ContainerManagerConfigParams'},
+                                                              'Result': {'$ref': '#/definitions/ContainerManagerConfig'}},
+                                               'type': 'object'},
+                    'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}},
+                                         'type': 'object'},
+                    'DistributionGroup': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                         'Result': {'$ref': '#/definitions/DistributionGroupResults'}},
+                                          'type': 'object'},
+                    'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'},
+                                                 'Result': {'$ref': '#/definitions/FindToolsResult'}},
+                                  'type': 'object'},
+                    'GetContainerInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                 'Result': {'$ref': '#/definitions/MachineNetworkConfigResults'}},
+                                                  'type': 'object'},
+                    'HostChangesForContainers': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                'Result': {'$ref': '#/definitions/HostNetworkChangeResults'}},
+                                                 'type': 'object'},
+                    'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StringResults'}},
+                                   'type': 'object'},
+                    'InstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/StatusResults'}},
+                                       'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'MachinesWithTransientErrors': {'properties': {'Result': {'$ref': '#/definitions/StatusResults'}},
+                                                    'type': 'object'},
+                    'MarkMachinesForRemoval': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                               'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                  'type': 'object'},
+                    'PrepareContainerInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                     'Result': {'$ref': '#/definitions/MachineNetworkConfigResults'}},
+                                                      'type': 'object'},
+                    'ProvisioningInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/ProvisioningInfoResults'}},
+                                         'type': 'object'},
+                    'ReleaseContainerAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                  'type': 'object'},
+                    'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'Series': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/StringResults'}},
+                               'type': 'object'},
+                    'SetHostMachineNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}},
+                                                    'type': 'object'},
+                    'SetInstanceInfo': {'properties': {'Params': {'$ref': '#/definitions/InstancesInfo'},
+                                                       'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                        'type': 'object'},
+                    'SetInstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                         'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                          'type': 'object'},
+                    'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}},
+                                                 'type': 'object'},
+                    'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                 'type': 'object'},
+                    'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'SetSupportedContainers': {'properties': {'Params': {'$ref': '#/definitions/MachineContainersParams'},
+                                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                               'type': 'object'},
+                    'StateAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
+                                       'type': 'object'},
+                    'Status': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/StatusResults'}},
+                               'type': 'object'},
+                    'Tools': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/ToolsResults'}},
+                              'type': 'object'},
+                    'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                          'type': 'object'},
+                    'WatchAllContainers': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'},
+                                                          'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                           'type': 'object'},
+                    'WatchContainers': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'},
+                                                       'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                        'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'},
+                    'WatchMachineErrorRetry': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                               'type': 'object'},
+                    'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+                                           'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(StringsResult)
+    async def APIAddresses(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='APIAddresses', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(APIHostPortsResult)
+    async def APIHostPorts(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='APIHostPorts', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BytesResult)
+    async def CACert(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[int]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='Constraints', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ContainerConfig)
+    async def ContainerConfig(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), _ForwardRef('Settings'), bool]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='ContainerConfig', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ContainerManagerConfig)
+    async def ContainerManagerConfig(self, type_):
+        '''
+        type_ : str
+        Returns -> typing.Mapping<~KT, +VT_co>[str, str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='ContainerManagerConfig', version=3, params=_params)
+        _params['type'] = type_
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ControllerConfigResult)
+    async def ControllerConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='EnsureDead', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(FindToolsResult)
+    async def FindTools(self, arch, major, minor, number, series):
+        '''
+        arch : str
+        major : int
+        minor : int
+        number : Number
+        series : str
+        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='FindTools', version=3, params=_params)
+        _params['arch'] = arch
+        _params['major'] = major
+        _params['minor'] = minor
+        _params['number'] = number
+        _params['series'] = series
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(MachineNetworkConfigResults)
+    async def GetContainerInterfaceInfo(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='Life', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StatusResults)
+    async def MachinesWithTransientErrors(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='MarkMachinesForRemoval', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='ModelConfig', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def ModelUUID(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='ModelUUID', version=3, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        tag : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='SetHostMachineNetworkConfig', version=3, params=_params)
+        _params['config'] = config
+        _params['tag'] = tag
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetInstanceInfo(self, machines):
+        '''
+        machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        tag : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='SetObservedNetworkConfig', version=3, params=_params)
+        _params['config'] = config
+        _params['tag'] = tag
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetPasswords(self, changes):
+        '''
+        changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='SetSupportedContainers', version=3, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsResult)
+    async def StateAddresses(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='UpdateStatus', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchAPIHostPorts(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='WatchAPIHostPorts', version=3, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='WatchContainers', version=3, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='WatchForModelConfigChanges', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchMachineErrorRetry(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='WatchMachineErrorRetry', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResult)
+    async def WatchModelMachines(self):
+        '''
+
+        Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Provisioner', request='WatchModelMachines', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class SpacesFacade(Type):
+    name = 'Spaces'
+    version = 3
+    schema =     {'definitions': {'CreateSpaceParams': {'additionalProperties': False,
+                                           'properties': {'provider-id': {'type': 'string'},
+                                                          'public': {'type': 'boolean'},
+                                                          'space-tag': {'type': 'string'},
+                                                          'subnet-tags': {'items': {'type': 'string'},
+                                                                          'type': 'array'}},
+                                           'required': ['subnet-tags',
+                                                        'space-tag',
+                                                        'public'],
+                                           'type': 'object'},
+                     'CreateSpacesParams': {'additionalProperties': False,
+                                            'properties': {'spaces': {'items': {'$ref': '#/definitions/CreateSpaceParams'},
+                                                                      'type': 'array'}},
+                                            'required': ['spaces'],
+                                            'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'ListSpacesResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/Space'},
+                                                                      'type': 'array'}},
+                                           'required': ['results'],
+                                           'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Space': {'additionalProperties': False,
+                               'properties': {'error': {'$ref': '#/definitions/Error'},
+                                              'name': {'type': 'string'},
+                                              'subnets': {'items': {'$ref': '#/definitions/Subnet'},
+                                                          'type': 'array'}},
+                               'required': ['name', 'subnets'],
+                               'type': 'object'},
+                     'Subnet': {'additionalProperties': False,
+                                'properties': {'cidr': {'type': 'string'},
+                                               'life': {'type': 'string'},
+                                               'provider-id': {'type': 'string'},
+                                               'provider-network-id': {'type': 'string'},
+                                               'provider-space-id': {'type': 'string'},
+                                               'space-tag': {'type': 'string'},
+                                               'status': {'type': 'string'},
+                                               'vlan-tag': {'type': 'integer'},
+                                               'zones': {'items': {'type': 'string'},
+                                                         'type': 'array'}},
+                                'required': ['cidr',
+                                             'vlan-tag',
+                                             'life',
+                                             'space-tag',
+                                             'zones'],
+                                'type': 'object'}},
+     'properties': {'CreateSpaces': {'properties': {'Params': {'$ref': '#/definitions/CreateSpacesParams'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'ListSpaces': {'properties': {'Result': {'$ref': '#/definitions/ListSpacesResults'}},
+                                   'type': 'object'},
+                    'ReloadSpaces': {'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def CreateSpaces(self, spaces):
+        '''
+        spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Spaces', request='CreateSpaces', version=3, params=_params)
+        _params['spaces'] = spaces
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ListSpacesResults)
+    async def ListSpaces(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~Space]<~Space>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Spaces', request='ListSpaces', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def ReloadSpaces(self):
+        '''
+
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Spaces', request='ReloadSpaces', version=3, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class StorageFacade(Type):
+    name = 'Storage'
+    version = 3
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatus': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'info': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['status', 'info', 'since'],
+                                      'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'FilesystemAttachmentDetails': {'additionalProperties': False,
+                                                     'properties': {'FilesystemAttachmentInfo': {'$ref': '#/definitions/FilesystemAttachmentInfo'},
+                                                                    'life': {'type': 'string'}},
+                                                     'required': ['FilesystemAttachmentInfo'],
+                                                     'type': 'object'},
+                     'FilesystemAttachmentInfo': {'additionalProperties': False,
+                                                  'properties': {'mount-point': {'type': 'string'},
+                                                                 'read-only': {'type': 'boolean'}},
+                                                  'type': 'object'},
+                     'FilesystemDetails': {'additionalProperties': False,
+                                           'properties': {'filesystem-tag': {'type': 'string'},
+                                                          'info': {'$ref': '#/definitions/FilesystemInfo'},
+                                                          'life': {'type': 'string'},
+                                                          'machine-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/FilesystemAttachmentDetails'}},
+                                                                                  'type': 'object'},
+                                                          'status': {'$ref': '#/definitions/EntityStatus'},
+                                                          'storage': {'$ref': '#/definitions/StorageDetails'},
+                                                          'volume-tag': {'type': 'string'}},
+                                           'required': ['filesystem-tag',
+                                                        'info',
+                                                        'status'],
+                                           'type': 'object'},
+                     'FilesystemDetailsListResult': {'additionalProperties': False,
+                                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                    'result': {'items': {'$ref': '#/definitions/FilesystemDetails'},
+                                                                               'type': 'array'}},
+                                                     'type': 'object'},
+                     'FilesystemDetailsListResults': {'additionalProperties': False,
+                                                      'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemDetailsListResult'},
+                                                                                 'type': 'array'}},
+                                                      'type': 'object'},
+                     'FilesystemFilter': {'additionalProperties': False,
+                                          'properties': {'machines': {'items': {'type': 'string'},
+                                                                      'type': 'array'}},
+                                          'type': 'object'},
+                     'FilesystemFilters': {'additionalProperties': False,
+                                           'properties': {'filters': {'items': {'$ref': '#/definitions/FilesystemFilter'},
+                                                                      'type': 'array'}},
+                                           'type': 'object'},
+                     'FilesystemInfo': {'additionalProperties': False,
+                                        'properties': {'filesystem-id': {'type': 'string'},
+                                                       'pool': {'type': 'string'},
+                                                       'size': {'type': 'integer'}},
+                                        'required': ['filesystem-id',
+                                                     'pool',
+                                                     'size'],
+                                        'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'StorageAddParams': {'additionalProperties': False,
+                                          'properties': {'name': {'type': 'string'},
+                                                         'storage': {'$ref': '#/definitions/StorageConstraints'},
+                                                         'unit': {'type': 'string'}},
+                                          'required': ['unit', 'name', 'storage'],
+                                          'type': 'object'},
+                     'StorageAttachmentDetails': {'additionalProperties': False,
+                                                  'properties': {'life': {'type': 'string'},
+                                                                 'location': {'type': 'string'},
+                                                                 'machine-tag': {'type': 'string'},
+                                                                 'storage-tag': {'type': 'string'},
+                                                                 'unit-tag': {'type': 'string'}},
+                                                  'required': ['storage-tag',
+                                                               'unit-tag',
+                                                               'machine-tag'],
+                                                  'type': 'object'},
+                     'StorageAttachmentId': {'additionalProperties': False,
+                                             'properties': {'storage-tag': {'type': 'string'},
+                                                            'unit-tag': {'type': 'string'}},
+                                             'required': ['storage-tag',
+                                                          'unit-tag'],
+                                             'type': 'object'},
+                     'StorageAttachmentIds': {'additionalProperties': False,
+                                              'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'},
+                                                                     'type': 'array'}},
+                                              'required': ['ids'],
+                                              'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StorageDetails': {'additionalProperties': False,
+                                        'properties': {'attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageAttachmentDetails'}},
+                                                                       'type': 'object'},
+                                                       'kind': {'type': 'integer'},
+                                                       'life': {'type': 'string'},
+                                                       'owner-tag': {'type': 'string'},
+                                                       'persistent': {'type': 'boolean'},
+                                                       'status': {'$ref': '#/definitions/EntityStatus'},
+                                                       'storage-tag': {'type': 'string'}},
+                                        'required': ['storage-tag',
+                                                     'owner-tag',
+                                                     'kind',
+                                                     'status',
+                                                     'persistent'],
+                                        'type': 'object'},
+                     'StorageDetailsListResult': {'additionalProperties': False,
+                                                  'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                 'result': {'items': {'$ref': '#/definitions/StorageDetails'},
+                                                                            'type': 'array'}},
+                                                  'type': 'object'},
+                     'StorageDetailsListResults': {'additionalProperties': False,
+                                                   'properties': {'results': {'items': {'$ref': '#/definitions/StorageDetailsListResult'},
+                                                                              'type': 'array'}},
+                                                   'type': 'object'},
+                     'StorageDetailsResult': {'additionalProperties': False,
+                                              'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                             'result': {'$ref': '#/definitions/StorageDetails'}},
+                                              'type': 'object'},
+                     'StorageDetailsResults': {'additionalProperties': False,
+                                               'properties': {'results': {'items': {'$ref': '#/definitions/StorageDetailsResult'},
+                                                                          'type': 'array'}},
+                                               'type': 'object'},
+                     'StorageFilter': {'additionalProperties': False,
+                                       'type': 'object'},
+                     'StorageFilters': {'additionalProperties': False,
+                                        'properties': {'filters': {'items': {'$ref': '#/definitions/StorageFilter'},
+                                                                   'type': 'array'}},
+                                        'type': 'object'},
+                     'StoragePool': {'additionalProperties': False,
+                                     'properties': {'attrs': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                    'name': {'type': 'string'},
+                                                    'provider': {'type': 'string'}},
+                                     'required': ['name', 'provider', 'attrs'],
+                                     'type': 'object'},
+                     'StoragePoolFilter': {'additionalProperties': False,
+                                           'properties': {'names': {'items': {'type': 'string'},
+                                                                    'type': 'array'},
+                                                          'providers': {'items': {'type': 'string'},
+                                                                        'type': 'array'}},
+                                           'type': 'object'},
+                     'StoragePoolFilters': {'additionalProperties': False,
+                                            'properties': {'filters': {'items': {'$ref': '#/definitions/StoragePoolFilter'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'StoragePoolsResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'storage-pools': {'items': {'$ref': '#/definitions/StoragePool'},
+                                                                             'type': 'array'}},
+                                            'type': 'object'},
+                     'StoragePoolsResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StoragePoolsResult'},
+                                                                        'type': 'array'}},
+                                             'type': 'object'},
+                     'StoragesAddParams': {'additionalProperties': False,
+                                           'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'},
+                                                                       'type': 'array'}},
+                                           'required': ['storages'],
+                                           'type': 'object'},
+                     'VolumeAttachmentDetails': {'additionalProperties': False,
+                                                 'properties': {'VolumeAttachmentInfo': {'$ref': '#/definitions/VolumeAttachmentInfo'},
+                                                                'life': {'type': 'string'}},
+                                                 'required': ['VolumeAttachmentInfo'],
+                                                 'type': 'object'},
+                     'VolumeAttachmentInfo': {'additionalProperties': False,
+                                              'properties': {'bus-address': {'type': 'string'},
+                                                             'device-link': {'type': 'string'},
+                                                             'device-name': {'type': 'string'},
+                                                             'read-only': {'type': 'boolean'}},
+                                              'type': 'object'},
+                     'VolumeDetails': {'additionalProperties': False,
+                                       'properties': {'info': {'$ref': '#/definitions/VolumeInfo'},
+                                                      'life': {'type': 'string'},
+                                                      'machine-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentDetails'}},
+                                                                              'type': 'object'},
+                                                      'status': {'$ref': '#/definitions/EntityStatus'},
+                                                      'storage': {'$ref': '#/definitions/StorageDetails'},
+                                                      'volume-tag': {'type': 'string'}},
+                                       'required': ['volume-tag', 'info', 'status'],
+                                       'type': 'object'},
+                     'VolumeDetailsListResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'result': {'items': {'$ref': '#/definitions/VolumeDetails'},
+                                                                           'type': 'array'}},
+                                                 'type': 'object'},
+                     'VolumeDetailsListResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/VolumeDetailsListResult'},
+                                                                             'type': 'array'}},
+                                                  'type': 'object'},
+                     'VolumeFilter': {'additionalProperties': False,
+                                      'properties': {'machines': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                      'type': 'object'},
+                     'VolumeFilters': {'additionalProperties': False,
+                                       'properties': {'filters': {'items': {'$ref': '#/definitions/VolumeFilter'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'VolumeInfo': {'additionalProperties': False,
+                                    'properties': {'hardware-id': {'type': 'string'},
+                                                   'persistent': {'type': 'boolean'},
+                                                   'pool': {'type': 'string'},
+                                                   'size': {'type': 'integer'},
+                                                   'volume-id': {'type': 'string'},
+                                                   'wwn': {'type': 'string'}},
+                                    'required': ['volume-id', 'size', 'persistent'],
+                                    'type': 'object'}},
+     'properties': {'AddToUnit': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'Attach': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'CreatePool': {'properties': {'Params': {'$ref': '#/definitions/StoragePool'}},
+                                   'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'Detach': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'ListFilesystems': {'properties': {'Params': {'$ref': '#/definitions/FilesystemFilters'},
+                                                       'Result': {'$ref': '#/definitions/FilesystemDetailsListResults'}},
+                                        'type': 'object'},
+                    'ListPools': {'properties': {'Params': {'$ref': '#/definitions/StoragePoolFilters'},
+                                                 'Result': {'$ref': '#/definitions/StoragePoolsResults'}},
+                                  'type': 'object'},
+                    'ListStorageDetails': {'properties': {'Params': {'$ref': '#/definitions/StorageFilters'},
+                                                          'Result': {'$ref': '#/definitions/StorageDetailsListResults'}},
+                                           'type': 'object'},
+                    'ListVolumes': {'properties': {'Params': {'$ref': '#/definitions/VolumeFilters'},
+                                                   'Result': {'$ref': '#/definitions/VolumeDetailsListResults'}},
+                                    'type': 'object'},
+                    'StorageDetails': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/StorageDetailsResults'}},
+                                       'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ErrorResults)
+    async def AddToUnit(self, storages):
+        '''
+        storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        name : str
+        provider : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Storage', request='CreatePool', version=3, params=_params)
+        _params['attrs'] = attrs
+        _params['name'] = name
+        _params['provider'] = provider
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def Destroy(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Storage', request='StorageDetails', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class StorageProvisionerFacade(Type):
+    name = 'StorageProvisioner'
+    version = 3
+    schema =     {'definitions': {'BlockDevice': {'additionalProperties': False,
+                                     'properties': {'BusAddress': {'type': 'string'},
+                                                    'DeviceLinks': {'items': {'type': 'string'},
+                                                                    'type': 'array'},
+                                                    'DeviceName': {'type': 'string'},
+                                                    'FilesystemType': {'type': 'string'},
+                                                    'HardwareId': {'type': 'string'},
+                                                    'InUse': {'type': 'boolean'},
+                                                    'Label': {'type': 'string'},
+                                                    'MountPoint': {'type': 'string'},
+                                                    'Size': {'type': 'integer'},
+                                                    'UUID': {'type': 'string'},
+                                                    'WWN': {'type': 'string'}},
+                                     'required': ['DeviceName',
+                                                  'DeviceLinks',
+                                                  'Label',
+                                                  'UUID',
+                                                  'HardwareId',
+                                                  'WWN',
+                                                  'BusAddress',
+                                                  'Size',
+                                                  'FilesystemType',
+                                                  'InUse',
+                                                  'MountPoint'],
+                                     'type': 'object'},
+                     'BlockDeviceResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'result': {'$ref': '#/definitions/BlockDevice'}},
+                                           'required': ['result'],
+                                           'type': 'object'},
+                     'BlockDeviceResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/BlockDeviceResult'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'Filesystem': {'additionalProperties': False,
+                                    'properties': {'filesystem-tag': {'type': 'string'},
+                                                   'info': {'$ref': '#/definitions/FilesystemInfo'},
+                                                   'volume-tag': {'type': 'string'}},
+                                    'required': ['filesystem-tag', 'info'],
+                                    'type': 'object'},
+                     'FilesystemAttachment': {'additionalProperties': False,
+                                              'properties': {'filesystem-tag': {'type': 'string'},
+                                                             'info': {'$ref': '#/definitions/FilesystemAttachmentInfo'},
+                                                             'machine-tag': {'type': 'string'}},
+                                              'required': ['filesystem-tag',
+                                                           'machine-tag',
+                                                           'info'],
+                                              'type': 'object'},
+                     'FilesystemAttachmentInfo': {'additionalProperties': False,
+                                                  'properties': {'mount-point': {'type': 'string'},
+                                                                 'read-only': {'type': 'boolean'}},
+                                                  'type': 'object'},
+                     'FilesystemAttachmentParams': {'additionalProperties': False,
+                                                    'properties': {'filesystem-id': {'type': 'string'},
+                                                                   'filesystem-tag': {'type': 'string'},
+                                                                   'instance-id': {'type': 'string'},
+                                                                   'machine-tag': {'type': 'string'},
+                                                                   'mount-point': {'type': 'string'},
+                                                                   'provider': {'type': 'string'},
+                                                                   'read-only': {'type': 'boolean'}},
+                                                    'required': ['filesystem-tag',
+                                                                 'machine-tag',
+                                                                 'provider'],
+                                                    'type': 'object'},
+                     'FilesystemAttachmentParamsResult': {'additionalProperties': False,
+                                                          'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                         'result': {'$ref': '#/definitions/FilesystemAttachmentParams'}},
+                                                          'required': ['result'],
+                                                          'type': 'object'},
+                     'FilesystemAttachmentParamsResults': {'additionalProperties': False,
+                                                           'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemAttachmentParamsResult'},
+                                                                                      'type': 'array'}},
+                                                           'type': 'object'},
+                     'FilesystemAttachmentResult': {'additionalProperties': False,
+                                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                   'result': {'$ref': '#/definitions/FilesystemAttachment'}},
+                                                    'required': ['result'],
+                                                    'type': 'object'},
+                     'FilesystemAttachmentResults': {'additionalProperties': False,
+                                                     'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemAttachmentResult'},
+                                                                                'type': 'array'}},
+                                                     'type': 'object'},
+                     'FilesystemAttachments': {'additionalProperties': False,
+                                               'properties': {'filesystem-attachments': {'items': {'$ref': '#/definitions/FilesystemAttachment'},
+                                                                                         'type': 'array'}},
+                                               'required': ['filesystem-attachments'],
+                                               'type': 'object'},
+                     'FilesystemInfo': {'additionalProperties': False,
+                                        'properties': {'filesystem-id': {'type': 'string'},
+                                                       'pool': {'type': 'string'},
+                                                       'size': {'type': 'integer'}},
+                                        'required': ['filesystem-id',
+                                                     'pool',
+                                                     'size'],
+                                        'type': 'object'},
+                     'FilesystemParams': {'additionalProperties': False,
+                                          'properties': {'attachment': {'$ref': '#/definitions/FilesystemAttachmentParams'},
+                                                         'attributes': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                     'type': 'object'}},
+                                                                        'type': 'object'},
+                                                         'filesystem-tag': {'type': 'string'},
+                                                         'provider': {'type': 'string'},
+                                                         'size': {'type': 'integer'},
+                                                         'tags': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                  'type': 'object'},
+                                                         'volume-tag': {'type': 'string'}},
+                                          'required': ['filesystem-tag',
+                                                       'size',
+                                                       'provider'],
+                                          'type': 'object'},
+                     'FilesystemParamsResult': {'additionalProperties': False,
+                                                'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                               'result': {'$ref': '#/definitions/FilesystemParams'}},
+                                                'required': ['result'],
+                                                'type': 'object'},
+                     'FilesystemParamsResults': {'additionalProperties': False,
+                                                 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemParamsResult'},
+                                                                            'type': 'array'}},
+                                                 'type': 'object'},
+                     'FilesystemResult': {'additionalProperties': False,
+                                          'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                         'result': {'$ref': '#/definitions/Filesystem'}},
+                                          'required': ['result'],
+                                          'type': 'object'},
+                     'FilesystemResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemResult'},
+                                                                      'type': 'array'}},
+                                           'type': 'object'},
+                     'Filesystems': {'additionalProperties': False,
+                                     'properties': {'filesystems': {'items': {'$ref': '#/definitions/Filesystem'},
+                                                                    'type': 'array'}},
+                                     'required': ['filesystems'],
+                                     'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachineStorageId': {'additionalProperties': False,
+                                          'properties': {'attachment-tag': {'type': 'string'},
+                                                         'machine-tag': {'type': 'string'}},
+                                          'required': ['machine-tag',
+                                                       'attachment-tag'],
+                                          'type': 'object'},
+                     'MachineStorageIds': {'additionalProperties': False,
+                                           'properties': {'ids': {'items': {'$ref': '#/definitions/MachineStorageId'},
+                                                                  'type': 'array'}},
+                                           'required': ['ids'],
+                                           'type': 'object'},
+                     'MachineStorageIdsWatchResult': {'additionalProperties': False,
+                                                      'properties': {'changes': {'items': {'$ref': '#/definitions/MachineStorageId'},
+                                                                                 'type': 'array'},
+                                                                     'error': {'$ref': '#/definitions/Error'},
+                                                                     'watcher-id': {'type': 'string'}},
+                                                      'required': ['watcher-id',
+                                                                   'changes'],
+                                                      'type': 'object'},
+                     'MachineStorageIdsWatchResults': {'additionalProperties': False,
+                                                       'properties': {'results': {'items': {'$ref': '#/definitions/MachineStorageIdsWatchResult'},
+                                                                                  'type': 'array'}},
+                                                       'required': ['results'],
+                                                       'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'},
+                     'StringsWatchResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'Volume': {'additionalProperties': False,
+                                'properties': {'info': {'$ref': '#/definitions/VolumeInfo'},
+                                               'volume-tag': {'type': 'string'}},
+                                'required': ['volume-tag', 'info'],
+                                'type': 'object'},
+                     'VolumeAttachment': {'additionalProperties': False,
+                                          'properties': {'info': {'$ref': '#/definitions/VolumeAttachmentInfo'},
+                                                         'machine-tag': {'type': 'string'},
+                                                         'volume-tag': {'type': 'string'}},
+                                          'required': ['volume-tag',
+                                                       'machine-tag',
+                                                       'info'],
+                                          'type': 'object'},
+                     'VolumeAttachmentInfo': {'additionalProperties': False,
+                                              'properties': {'bus-address': {'type': 'string'},
+                                                             'device-link': {'type': 'string'},
+                                                             'device-name': {'type': 'string'},
+                                                             'read-only': {'type': 'boolean'}},
+                                              'type': 'object'},
+                     'VolumeAttachmentParams': {'additionalProperties': False,
+                                                'properties': {'instance-id': {'type': 'string'},
+                                                               'machine-tag': {'type': 'string'},
+                                                               'provider': {'type': 'string'},
+                                                               'read-only': {'type': 'boolean'},
+                                                               'volume-id': {'type': 'string'},
+                                                               'volume-tag': {'type': 'string'}},
+                                                'required': ['volume-tag',
+                                                             'machine-tag',
+                                                             'provider'],
+                                                'type': 'object'},
+                     'VolumeAttachmentParamsResult': {'additionalProperties': False,
+                                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                     'result': {'$ref': '#/definitions/VolumeAttachmentParams'}},
+                                                      'required': ['result'],
+                                                      'type': 'object'},
+                     'VolumeAttachmentParamsResults': {'additionalProperties': False,
+                                                       'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentParamsResult'},
+                                                                                  'type': 'array'}},
+                                                       'type': 'object'},
+                     'VolumeAttachmentResult': {'additionalProperties': False,
+                                                'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                               'result': {'$ref': '#/definitions/VolumeAttachment'}},
+                                                'required': ['result'],
+                                                'type': 'object'},
+                     'VolumeAttachmentResults': {'additionalProperties': False,
+                                                 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentResult'},
+                                                                            'type': 'array'}},
+                                                 'type': 'object'},
+                     'VolumeAttachments': {'additionalProperties': False,
+                                           'properties': {'volume-attachments': {'items': {'$ref': '#/definitions/VolumeAttachment'},
+                                                                                 'type': 'array'}},
+                                           'required': ['volume-attachments'],
+                                           'type': 'object'},
+                     'VolumeInfo': {'additionalProperties': False,
+                                    'properties': {'hardware-id': {'type': 'string'},
+                                                   'persistent': {'type': 'boolean'},
+                                                   'pool': {'type': 'string'},
+                                                   'size': {'type': 'integer'},
+                                                   'volume-id': {'type': 'string'},
+                                                   'wwn': {'type': 'string'}},
+                                    'required': ['volume-id', 'size', 'persistent'],
+                                    'type': 'object'},
+                     'VolumeParams': {'additionalProperties': False,
+                                      'properties': {'attachment': {'$ref': '#/definitions/VolumeAttachmentParams'},
+                                                     'attributes': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                 'type': 'object'}},
+                                                                    'type': 'object'},
+                                                     'provider': {'type': 'string'},
+                                                     'size': {'type': 'integer'},
+                                                     'tags': {'patternProperties': {'.*': {'type': 'string'}},
+                                                              'type': 'object'},
+                                                     'volume-tag': {'type': 'string'}},
+                                      'required': ['volume-tag',
+                                                   'size',
+                                                   'provider'],
+                                      'type': 'object'},
+                     'VolumeParamsResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'result': {'$ref': '#/definitions/VolumeParams'}},
+                                            'required': ['result'],
+                                            'type': 'object'},
+                     'VolumeParamsResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/VolumeParamsResult'},
+                                                                        'type': 'array'}},
+                                             'type': 'object'},
+                     'VolumeResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'$ref': '#/definitions/Volume'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'VolumeResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/VolumeResult'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'Volumes': {'additionalProperties': False,
+                                 'properties': {'volumes': {'items': {'$ref': '#/definitions/Volume'},
+                                                            'type': 'array'}},
+                                 'required': ['volumes'],
+                                 'type': 'object'}},
+     'properties': {'AttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                      'Result': {'$ref': '#/definitions/LifeResults'}},
+                                       'type': 'object'},
+                    'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'FilesystemAttachmentParams': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                                  'Result': {'$ref': '#/definitions/FilesystemAttachmentParamsResults'}},
+                                                   'type': 'object'},
+                    'FilesystemAttachments': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                             'Result': {'$ref': '#/definitions/FilesystemAttachmentResults'}},
+                                              'type': 'object'},
+                    'FilesystemParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/FilesystemParamsResults'}},
+                                         'type': 'object'},
+                    'Filesystems': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/FilesystemResults'}},
+                                    'type': 'object'},
+                    'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StringResults'}},
+                                   'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'RemoveAttachment': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                         'type': 'object'},
+                    'SetFilesystemAttachmentInfo': {'properties': {'Params': {'$ref': '#/definitions/FilesystemAttachments'},
+                                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                    'type': 'object'},
+                    'SetFilesystemInfo': {'properties': {'Params': {'$ref': '#/definitions/Filesystems'},
+                                                         'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                          'type': 'object'},
+                    'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'SetVolumeAttachmentInfo': {'properties': {'Params': {'$ref': '#/definitions/VolumeAttachments'},
+                                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                'type': 'object'},
+                    'SetVolumeInfo': {'properties': {'Params': {'$ref': '#/definitions/Volumes'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'VolumeAttachmentParams': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                              'Result': {'$ref': '#/definitions/VolumeAttachmentParamsResults'}},
+                                               'type': 'object'},
+                    'VolumeAttachments': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                         'Result': {'$ref': '#/definitions/VolumeAttachmentResults'}},
+                                          'type': 'object'},
+                    'VolumeBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'},
+                                                          'Result': {'$ref': '#/definitions/BlockDeviceResults'}},
+                                           'type': 'object'},
+                    'VolumeParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/VolumeParamsResults'}},
+                                     'type': 'object'},
+                    'Volumes': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/VolumeResults'}},
+                                'type': 'object'},
+                    'WatchBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                         'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                          'type': 'object'},
+                    'WatchFilesystemAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                  'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}},
+                                                   'type': 'object'},
+                    'WatchFilesystems': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                         'type': 'object'},
+                    'WatchMachines': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                      'type': 'object'},
+                    'WatchVolumeAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}},
+                                               'type': 'object'},
+                    'WatchVolumes': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                     'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(LifeResults)
+    async def AttachmentLife(self, ids):
+        '''
+        ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
+        Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='StorageProvisioner', request='WatchVolumes', version=3, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
diff --git a/juju/client/_client4.py b/juju/client/_client4.py
new file mode 100644 (file)
index 0000000..68ee3f9
--- /dev/null
@@ -0,0 +1,2671 @@
+# 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 = 4
+    schema =     {'definitions': {'AddApplicationUnits': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'num-units': {'type': 'integer'},
+                                                            'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                          'type': 'array'}},
+                                             'required': ['application',
+                                                          'num-units',
+                                                          'placement'],
+                                             'type': 'object'},
+                     'AddApplicationUnitsResults': {'additionalProperties': False,
+                                                    'properties': {'units': {'items': {'type': 'string'},
+                                                                             'type': 'array'}},
+                                                    'required': ['units'],
+                                                    'type': 'object'},
+                     'AddRelation': {'additionalProperties': False,
+                                     'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                     'required': ['endpoints'],
+                                     'type': 'object'},
+                     'AddRelationResults': {'additionalProperties': False,
+                                            'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+                                                                         'type': 'object'}},
+                                            'required': ['endpoints'],
+                                            'type': 'object'},
+                     'ApplicationCharmRelations': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'ApplicationCharmRelationsResults': {'additionalProperties': False,
+                                                          'properties': {'charm-relations': {'items': {'type': 'string'},
+                                                                                             'type': 'array'}},
+                                                          'required': ['charm-relations'],
+                                                          'type': 'object'},
+                     'ApplicationDeploy': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'channel': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'config': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                     'type': 'object'},
+                                                          'config-yaml': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                          'num-units': {'type': 'integer'},
+                                                          'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                        'type': 'array'},
+                                                          'resources': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                        'type': 'object'},
+                                                          'series': {'type': 'string'},
+                                                          'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}},
+                                                                      'type': 'object'}},
+                                           'required': ['application',
+                                                        'series',
+                                                        'charm-url',
+                                                        'channel',
+                                                        'num-units',
+                                                        'config-yaml',
+                                                        'constraints'],
+                                           'type': 'object'},
+                     'ApplicationDestroy': {'additionalProperties': False,
+                                            'properties': {'application': {'type': 'string'}},
+                                            'required': ['application'],
+                                            'type': 'object'},
+                     'ApplicationExpose': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'}},
+                                           'required': ['application'],
+                                           'type': 'object'},
+                     'ApplicationGet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'}},
+                                        'required': ['application'],
+                                        'type': 'object'},
+                     'ApplicationGetResults': {'additionalProperties': False,
+                                               'properties': {'application': {'type': 'string'},
+                                                              'charm': {'type': 'string'},
+                                                              'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                      'type': 'object'}},
+                                                                         'type': 'object'},
+                                                              'constraints': {'$ref': '#/definitions/Value'},
+                                                              'series': {'type': 'string'}},
+                                               'required': ['application',
+                                                            'charm',
+                                                            'config',
+                                                            'constraints',
+                                                            'series'],
+                                               'type': 'object'},
+                     'ApplicationMetricCredential': {'additionalProperties': False,
+                                                     'properties': {'application': {'type': 'string'},
+                                                                    'metrics-credentials': {'items': {'type': 'integer'},
+                                                                                            'type': 'array'}},
+                                                     'required': ['application',
+                                                                  'metrics-credentials'],
+                                                     'type': 'object'},
+                     'ApplicationMetricCredentials': {'additionalProperties': False,
+                                                      'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'},
+                                                                               'type': 'array'}},
+                                                      'required': ['creds'],
+                                                      'type': 'object'},
+                     'ApplicationSet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'options': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                   'type': 'object'}},
+                                        'required': ['application', 'options'],
+                                        'type': 'object'},
+                     'ApplicationSetCharm': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'channel': {'type': 'string'},
+                                                            'charm-url': {'type': 'string'},
+                                                            'config-settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                            'config-settings-yaml': {'type': 'string'},
+                                                            'force-series': {'type': 'boolean'},
+                                                            'force-units': {'type': 'boolean'},
+                                                            'resource-ids': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                             'type': 'object'},
+                                                            'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}},
+                                                                                    'type': 'object'}},
+                                             'required': ['application',
+                                                          'charm-url',
+                                                          'channel',
+                                                          'force-units',
+                                                          'force-series'],
+                                             'type': 'object'},
+                     'ApplicationURLs': {'additionalProperties': False,
+                                         'properties': {'application-urls': {'items': {'type': 'string'},
+                                                                             'type': 'array'}},
+                                         'type': 'object'},
+                     'ApplicationUnexpose': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'}},
+                                             'required': ['application'],
+                                             'type': 'object'},
+                     'ApplicationUnset': {'additionalProperties': False,
+                                          'properties': {'application': {'type': 'string'},
+                                                         'options': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                          'required': ['application', 'options'],
+                                          'type': 'object'},
+                     'ApplicationUpdate': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'force-charm-url': {'type': 'boolean'},
+                                                          'force-series': {'type': 'boolean'},
+                                                          'min-units': {'type': 'integer'},
+                                                          'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                       'type': 'object'},
+                                                          'settings-yaml': {'type': 'string'}},
+                                           'required': ['application',
+                                                        'charm-url',
+                                                        'force-charm-url',
+                                                        'force-series',
+                                                        'settings-yaml'],
+                                           'type': 'object'},
+                     'ApplicationsDeploy': {'additionalProperties': False,
+                                            'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'},
+                                                                            'type': 'array'}},
+                                            'required': ['applications'],
+                                            'type': 'object'},
+                     'CharmRelation': {'additionalProperties': False,
+                                       'properties': {'interface': {'type': 'string'},
+                                                      'limit': {'type': 'integer'},
+                                                      'name': {'type': 'string'},
+                                                      'optional': {'type': 'boolean'},
+                                                      'role': {'type': 'string'},
+                                                      'scope': {'type': 'string'}},
+                                       'required': ['name',
+                                                    'role',
+                                                    'interface',
+                                                    'optional',
+                                                    'limit',
+                                                    'scope'],
+                                       'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'ConsumeApplicationArg': {'additionalProperties': False,
+                                               'properties': {'application-alias': {'type': 'string'},
+                                                              'application-url': {'type': 'string'}},
+                                               'required': ['application-url'],
+                                               'type': 'object'},
+                     'ConsumeApplicationArgs': {'additionalProperties': False,
+                                                'properties': {'args': {'items': {'$ref': '#/definitions/ConsumeApplicationArg'},
+                                                                        'type': 'array'}},
+                                                'type': 'object'},
+                     'ConsumeApplicationResult': {'additionalProperties': False,
+                                                  'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                 'local-name': {'type': 'string'}},
+                                                  'type': 'object'},
+                     'ConsumeApplicationResults': {'additionalProperties': False,
+                                                   'properties': {'results': {'items': {'$ref': '#/definitions/ConsumeApplicationResult'},
+                                                                              'type': 'array'}},
+                                                   'required': ['results'],
+                                                   'type': 'object'},
+                     'DestroyApplicationInfo': {'additionalProperties': False,
+                                                'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                     'type': 'array'},
+                                                               'destroyed-units': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                   'type': 'array'},
+                                                               'detached-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                    'type': 'array'}},
+                                                'type': 'object'},
+                     'DestroyApplicationResult': {'additionalProperties': False,
+                                                  'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                 'info': {'$ref': '#/definitions/DestroyApplicationInfo'}},
+                                                  'type': 'object'},
+                     'DestroyApplicationResults': {'additionalProperties': False,
+                                                   'properties': {'results': {'items': {'$ref': '#/definitions/DestroyApplicationResult'},
+                                                                              'type': 'array'}},
+                                                   'type': 'object'},
+                     'DestroyApplicationUnits': {'additionalProperties': False,
+                                                 'properties': {'unit-names': {'items': {'type': 'string'},
+                                                                               'type': 'array'}},
+                                                 'required': ['unit-names'],
+                                                 'type': 'object'},
+                     'DestroyRelation': {'additionalProperties': False,
+                                         'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                      'type': 'array'}},
+                                         'required': ['endpoints'],
+                                         'type': 'object'},
+                     'DestroyUnitInfo': {'additionalProperties': False,
+                                         'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                              'type': 'array'},
+                                                        'detached-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                             'type': 'array'}},
+                                         'type': 'object'},
+                     'DestroyUnitResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'info': {'$ref': '#/definitions/DestroyUnitInfo'}},
+                                           'type': 'object'},
+                     'DestroyUnitResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/DestroyUnitResult'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'GetApplicationConstraints': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'GetConstraintsResults': {'additionalProperties': False,
+                                               'properties': {'constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['constraints'],
+                                               'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'RemoteApplicationInfo': {'additionalProperties': False,
+                                               'properties': {'application-url': {'type': 'string'},
+                                                              'description': {'type': 'string'},
+                                                              'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'},
+                                                                            'type': 'array'},
+                                                              'icon-url-path': {'type': 'string'},
+                                                              'model-tag': {'type': 'string'},
+                                                              'name': {'type': 'string'},
+                                                              'source-model-label': {'type': 'string'}},
+                                               'required': ['model-tag',
+                                                            'name',
+                                                            'description',
+                                                            'application-url',
+                                                            'endpoints',
+                                                            'icon-url-path'],
+                                               'type': 'object'},
+                     'RemoteApplicationInfoResult': {'additionalProperties': False,
+                                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                    'result': {'$ref': '#/definitions/RemoteApplicationInfo'}},
+                                                     'type': 'object'},
+                     'RemoteApplicationInfoResults': {'additionalProperties': False,
+                                                      'properties': {'results': {'items': {'$ref': '#/definitions/RemoteApplicationInfoResult'},
+                                                                                 'type': 'array'}},
+                                                      'required': ['results'],
+                                                      'type': 'object'},
+                     'RemoteEndpoint': {'additionalProperties': False,
+                                        'properties': {'interface': {'type': 'string'},
+                                                       'limit': {'type': 'integer'},
+                                                       'name': {'type': 'string'},
+                                                       'role': {'type': 'string'},
+                                                       'scope': {'type': 'string'}},
+                                        'required': ['name',
+                                                     'role',
+                                                     'interface',
+                                                     'limit',
+                                                     'scope'],
+                                        'type': 'object'},
+                     'SetConstraints': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['application', 'constraints'],
+                                        'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
+                                                   'Result': {'$ref': '#/definitions/AddRelationResults'}},
+                                    'type': 'object'},
+                    'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
+                                                'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
+                                 'type': 'object'},
+                    'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
+                                                      'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
+                                       'type': 'object'},
+                    'Consume': {'properties': {'Params': {'$ref': '#/definitions/ConsumeApplicationArgs'},
+                                               'Result': {'$ref': '#/definitions/ConsumeApplicationResults'}},
+                                'type': 'object'},
+                    'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}},
+                                'type': 'object'},
+                    'DestroyApplication': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/DestroyApplicationResults'}},
+                                           'type': 'object'},
+                    'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
+                                        'type': 'object'},
+                    'DestroyUnit': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/DestroyUnitResults'}},
+                                    'type': 'object'},
+                    'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}},
+                                     'type': 'object'},
+                    'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}},
+                               'type': 'object'},
+                    'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                           'Result': {'$ref': '#/definitions/ApplicationGetResults'}},
+                            'type': 'object'},
+                    'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                                   'Result': {'$ref': '#/definitions/StringResult'}},
+                                    'type': 'object'},
+                    'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'},
+                                                      'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+                                       'type': 'object'},
+                    'RemoteApplicationInfo': {'properties': {'Params': {'$ref': '#/definitions/ApplicationURLs'},
+                                                             'Result': {'$ref': '#/definitions/RemoteApplicationInfoResults'}},
+                                              'type': 'object'},
+                    'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}},
+                            'type': 'object'},
+                    'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}},
+                                 'type': 'object'},
+                    'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+                                       'type': 'object'},
+                    'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}},
+                                 'type': 'object'},
+                    'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}},
+                              'type': 'object'},
+                    'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}},
+                               'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddRelationResults)
+    async def AddRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='AddRelation', version=4, params=_params)
+        _params['endpoints'] = endpoints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(AddApplicationUnitsResults)
+    async def AddUnits(self, application, num_units, placement):
+        '''
+        application : str
+        num_units : int
+        placement : typing.Sequence<+T_co>[~Placement]<~Placement>
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='AddUnits', version=4, params=_params)
+        _params['application'] = application
+        _params['num-units'] = num_units
+        _params['placement'] = placement
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationCharmRelationsResults)
+    async def CharmRelations(self, application):
+        '''
+        application : str
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Deploy', version=4, params=_params)
+        _params['applications'] = applications
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Destroy(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Destroy', version=4, params=_params)
+        _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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='DestroyUnits', version=4, params=_params)
+        _params['unit-names'] = unit_names
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Expose(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Expose', version=4, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationGetResults)
+    async def Get(self, application):
+        '''
+        application : str
+        Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Get', version=4, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def GetCharmURL(self, application):
+        '''
+        application : str
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='GetCharmURL', version=4, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(GetConstraintsResults)
+    async def GetConstraints(self, application):
+        '''
+        application : str
+        Returns -> Value
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='GetConstraints', version=4, params=_params)
+        _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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='RemoteApplicationInfo', version=4, params=_params)
+        _params['application-urls'] = application_urls
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Set(self, application, options):
+        '''
+        application : str
+        options : typing.Mapping<~KT, +VT_co>[str, str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Set', version=4, params=_params)
+        _params['application'] = application
+        _params['options'] = options
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints):
+        '''
+        application : str
+        channel : str
+        charm_url : str
+        config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+        config_settings_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
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetCharm', version=4, params=_params)
+        _params['application'] = application
+        _params['channel'] = channel
+        _params['charm-url'] = charm_url
+        _params['config-settings'] = config_settings
+        _params['config-settings-yaml'] = config_settings_yaml
+        _params['force-series'] = force_series
+        _params['force-units'] = force_units
+        _params['resource-ids'] = resource_ids
+        _params['storage-constraints'] = storage_constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetConstraints(self, application, constraints):
+        '''
+        application : str
+        constraints : Value
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetConstraints', version=4, params=_params)
+        _params['application'] = application
+        _params['constraints'] = constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetMetricCredentials(self, creds):
+        '''
+        creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetMetricCredentials', version=4, params=_params)
+        _params['creds'] = creds
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Unexpose(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Unexpose', version=4, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Unset(self, application, options):
+        '''
+        application : str
+        options : typing.Sequence<+T_co>[str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Unset', version=4, params=_params)
+        _params['application'] = application
+        _params['options'] = options
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml):
+        '''
+        application : str
+        charm_url : str
+        constraints : Value
+        force_charm_url : bool
+        force_series : bool
+        min_units : int
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        settings_yaml : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Update', version=4, params=_params)
+        _params['application'] = application
+        _params['charm-url'] = charm_url
+        _params['constraints'] = constraints
+        _params['force-charm-url'] = force_charm_url
+        _params['force-series'] = force_series
+        _params['min-units'] = min_units
+        _params['settings'] = settings
+        _params['settings-yaml'] = settings_yaml
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class UniterFacade(Type):
+    name = 'Uniter'
+    version = 4
+    schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+                                            'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+                                                                                 'type': 'array'},
+                                                                       'type': 'array'}},
+                                            'required': ['servers'],
+                                            'type': 'object'},
+                     'Action': {'additionalProperties': False,
+                                'properties': {'name': {'type': 'string'},
+                                               'parameters': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                               'receiver': {'type': 'string'},
+                                               'tag': {'type': 'string'}},
+                                'required': ['tag', 'receiver', 'name'],
+                                'type': 'object'},
+                     'ActionExecutionResult': {'additionalProperties': False,
+                                               'properties': {'action-tag': {'type': 'string'},
+                                                              'message': {'type': 'string'},
+                                                              'results': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'},
+                                                              'status': {'type': 'string'}},
+                                               'required': ['action-tag', 'status'],
+                                               'type': 'object'},
+                     'ActionExecutionResults': {'additionalProperties': False,
+                                                'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'},
+                                                                           'type': 'array'}},
+                                                'type': 'object'},
+                     'ActionResult': {'additionalProperties': False,
+                                      'properties': {'action': {'$ref': '#/definitions/Action'},
+                                                     'completed': {'format': 'date-time',
+                                                                   'type': 'string'},
+                                                     'enqueued': {'format': 'date-time',
+                                                                  'type': 'string'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'message': {'type': 'string'},
+                                                     'output': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                             'type': 'object'}},
+                                                                'type': 'object'},
+                                                     'started': {'format': 'date-time',
+                                                                 'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'type': 'object'},
+                     'ActionResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'ApplicationStatusResult': {'additionalProperties': False,
+                                                 'properties': {'application': {'$ref': '#/definitions/StatusResult'},
+                                                                'error': {'$ref': '#/definitions/Error'},
+                                                                'units': {'patternProperties': {'.*': {'$ref': '#/definitions/StatusResult'}},
+                                                                          'type': 'object'}},
+                                                 'required': ['application',
+                                                              'units'],
+                                                 'type': 'object'},
+                     'ApplicationStatusResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationStatusResult'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'BoolResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'result': {'type': 'boolean'}},
+                                    'required': ['result'],
+                                    'type': 'object'},
+                     'BoolResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/BoolResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'BytesResult': {'additionalProperties': False,
+                                     'properties': {'result': {'items': {'type': 'integer'},
+                                                               'type': 'array'}},
+                                     'required': ['result'],
+                                     'type': 'object'},
+                     'CharmRelation': {'additionalProperties': False,
+                                       'properties': {'interface': {'type': 'string'},
+                                                      'limit': {'type': 'integer'},
+                                                      'name': {'type': 'string'},
+                                                      'optional': {'type': 'boolean'},
+                                                      'role': {'type': 'string'},
+                                                      'scope': {'type': 'string'}},
+                                       'required': ['name',
+                                                    'role',
+                                                    'interface',
+                                                    'optional',
+                                                    'limit',
+                                                    'scope'],
+                                       'type': 'object'},
+                     'CharmURL': {'additionalProperties': False,
+                                  'properties': {'url': {'type': 'string'}},
+                                  'required': ['url'],
+                                  'type': 'object'},
+                     'CharmURLs': {'additionalProperties': False,
+                                   'properties': {'urls': {'items': {'$ref': '#/definitions/CharmURL'},
+                                                           'type': 'array'}},
+                                   'required': ['urls'],
+                                   'type': 'object'},
+                     'ConfigSettingsResult': {'additionalProperties': False,
+                                              'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                             'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'}},
+                                              'required': ['settings'],
+                                              'type': 'object'},
+                     'ConfigSettingsResults': {'additionalProperties': False,
+                                               'properties': {'results': {'items': {'$ref': '#/definitions/ConfigSettingsResult'},
+                                                                          'type': 'array'}},
+                                               'required': ['results'],
+                                               'type': 'object'},
+                     'Endpoint': {'additionalProperties': False,
+                                  'properties': {'application-name': {'type': 'string'},
+                                                 'relation': {'$ref': '#/definitions/CharmRelation'}},
+                                  'required': ['application-name', 'relation'],
+                                  'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'EntitiesCharmURL': {'additionalProperties': False,
+                                          'properties': {'entities': {'items': {'$ref': '#/definitions/EntityCharmURL'},
+                                                                      'type': 'array'}},
+                                          'required': ['entities'],
+                                          'type': 'object'},
+                     'EntitiesPortRanges': {'additionalProperties': False,
+                                            'properties': {'entities': {'items': {'$ref': '#/definitions/EntityPortRange'},
+                                                                        'type': 'array'}},
+                                            'required': ['entities'],
+                                            'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityCharmURL': {'additionalProperties': False,
+                                        'properties': {'charm-url': {'type': 'string'},
+                                                       'tag': {'type': 'string'}},
+                                        'required': ['tag', 'charm-url'],
+                                        'type': 'object'},
+                     'EntityPortRange': {'additionalProperties': False,
+                                         'properties': {'from-port': {'type': 'integer'},
+                                                        'protocol': {'type': 'string'},
+                                                        'tag': {'type': 'string'},
+                                                        'to-port': {'type': 'integer'}},
+                                         'required': ['tag',
+                                                      'protocol',
+                                                      'from-port',
+                                                      'to-port'],
+                                         'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'EntityWorkloadVersion': {'additionalProperties': False,
+                                               'properties': {'tag': {'type': 'string'},
+                                                              'workload-version': {'type': 'string'}},
+                                               'required': ['tag',
+                                                            'workload-version'],
+                                               'type': 'object'},
+                     'EntityWorkloadVersions': {'additionalProperties': False,
+                                                'properties': {'entities': {'items': {'$ref': '#/definitions/EntityWorkloadVersion'},
+                                                                            'type': 'array'}},
+                                                'required': ['entities'],
+                                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'GetLeadershipSettingsBulkResults': {'additionalProperties': False,
+                                                          'properties': {'results': {'items': {'$ref': '#/definitions/GetLeadershipSettingsResult'},
+                                                                                     'type': 'array'}},
+                                                          'required': ['results'],
+                                                          'type': 'object'},
+                     'GetLeadershipSettingsResult': {'additionalProperties': False,
+                                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                    'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                 'type': 'object'}},
+                                                     'required': ['settings'],
+                                                     'type': 'object'},
+                     'HostPort': {'additionalProperties': False,
+                                  'properties': {'Address': {'$ref': '#/definitions/Address'},
+                                                 'port': {'type': 'integer'}},
+                                  'required': ['Address', 'port'],
+                                  'type': 'object'},
+                     'IntResult': {'additionalProperties': False,
+                                   'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                  'result': {'type': 'integer'}},
+                                   'required': ['result'],
+                                   'type': 'object'},
+                     'IntResults': {'additionalProperties': False,
+                                    'properties': {'results': {'items': {'$ref': '#/definitions/IntResult'},
+                                                               'type': 'array'}},
+                                    'required': ['results'],
+                                    'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachinePortRange': {'additionalProperties': False,
+                                          'properties': {'port-range': {'$ref': '#/definitions/PortRange'},
+                                                         'relation-tag': {'type': 'string'},
+                                                         'unit-tag': {'type': 'string'}},
+                                          'required': ['unit-tag',
+                                                       'relation-tag',
+                                                       'port-range'],
+                                          'type': 'object'},
+                     'MachinePortsResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'ports': {'items': {'$ref': '#/definitions/MachinePortRange'},
+                                                                     'type': 'array'}},
+                                            'required': ['ports'],
+                                            'type': 'object'},
+                     'MachinePortsResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'MergeLeadershipSettingsBulkParams': {'additionalProperties': False,
+                                                           'properties': {'params': {'items': {'$ref': '#/definitions/MergeLeadershipSettingsParam'},
+                                                                                     'type': 'array'}},
+                                                           'required': ['params'],
+                                                           'type': 'object'},
+                     'MergeLeadershipSettingsParam': {'additionalProperties': False,
+                                                      'properties': {'application-tag': {'type': 'string'},
+                                                                     'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                  'type': 'object'}},
+                                                      'required': ['application-tag',
+                                                                   'settings'],
+                                                      'type': 'object'},
+                     'MeterStatusResult': {'additionalProperties': False,
+                                           'properties': {'code': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'},
+                                                          'info': {'type': 'string'}},
+                                           'required': ['code', 'info'],
+                                           'type': 'object'},
+                     'MeterStatusResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/MeterStatusResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'Metric': {'additionalProperties': False,
+                                'properties': {'key': {'type': 'string'},
+                                               'time': {'format': 'date-time',
+                                                        'type': 'string'},
+                                               'value': {'type': 'string'}},
+                                'required': ['key', 'value', 'time'],
+                                'type': 'object'},
+                     'MetricBatch': {'additionalProperties': False,
+                                     'properties': {'charm-url': {'type': 'string'},
+                                                    'created': {'format': 'date-time',
+                                                                'type': 'string'},
+                                                    'metrics': {'items': {'$ref': '#/definitions/Metric'},
+                                                                'type': 'array'},
+                                                    'uuid': {'type': 'string'}},
+                                     'required': ['uuid',
+                                                  'charm-url',
+                                                  'created',
+                                                  'metrics'],
+                                     'type': 'object'},
+                     'MetricBatchParam': {'additionalProperties': False,
+                                          'properties': {'batch': {'$ref': '#/definitions/MetricBatch'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag', 'batch'],
+                                          'type': 'object'},
+                     'MetricBatchParams': {'additionalProperties': False,
+                                           'properties': {'batches': {'items': {'$ref': '#/definitions/MetricBatchParam'},
+                                                                      'type': 'array'}},
+                                           'required': ['batches'],
+                                           'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'ModelResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                    'name': {'type': 'string'},
+                                                    'uuid': {'type': 'string'}},
+                                     'required': ['name', 'uuid'],
+                                     'type': 'object'},
+                     'NetworkConfig': {'additionalProperties': False,
+                                       'properties': {'address': {'type': 'string'},
+                                                      'cidr': {'type': 'string'},
+                                                      'config-type': {'type': 'string'},
+                                                      'device-index': {'type': 'integer'},
+                                                      'disabled': {'type': 'boolean'},
+                                                      'dns-search-domains': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                      'dns-servers': {'items': {'type': 'string'},
+                                                                      'type': 'array'},
+                                                      'gateway-address': {'type': 'string'},
+                                                      'interface-name': {'type': 'string'},
+                                                      'interface-type': {'type': 'string'},
+                                                      'mac-address': {'type': 'string'},
+                                                      'mtu': {'type': 'integer'},
+                                                      'no-auto-start': {'type': 'boolean'},
+                                                      'parent-interface-name': {'type': 'string'},
+                                                      'provider-address-id': {'type': 'string'},
+                                                      'provider-id': {'type': 'string'},
+                                                      'provider-space-id': {'type': 'string'},
+                                                      'provider-subnet-id': {'type': 'string'},
+                                                      'provider-vlan-id': {'type': 'string'},
+                                                      'routes': {'items': {'$ref': '#/definitions/NetworkRoute'},
+                                                                 'type': 'array'},
+                                                      'vlan-tag': {'type': 'integer'}},
+                                       'required': ['device-index',
+                                                    'mac-address',
+                                                    'cidr',
+                                                    'mtu',
+                                                    'provider-id',
+                                                    'provider-subnet-id',
+                                                    'provider-space-id',
+                                                    'provider-address-id',
+                                                    'provider-vlan-id',
+                                                    'vlan-tag',
+                                                    'interface-name',
+                                                    'parent-interface-name',
+                                                    'interface-type',
+                                                    'disabled'],
+                                       'type': 'object'},
+                     'NetworkRoute': {'additionalProperties': False,
+                                      'properties': {'destination-cidr': {'type': 'string'},
+                                                     'gateway-ip': {'type': 'string'},
+                                                     'metric': {'type': 'integer'}},
+                                      'required': ['destination-cidr',
+                                                   'gateway-ip',
+                                                   'metric'],
+                                      'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'PortRange': {'additionalProperties': False,
+                                   'properties': {'from-port': {'type': 'integer'},
+                                                  'protocol': {'type': 'string'},
+                                                  'to-port': {'type': 'integer'}},
+                                   'required': ['from-port', 'to-port', 'protocol'],
+                                   'type': 'object'},
+                     'RelationIds': {'additionalProperties': False,
+                                     'properties': {'relation-ids': {'items': {'type': 'integer'},
+                                                                     'type': 'array'}},
+                                     'required': ['relation-ids'],
+                                     'type': 'object'},
+                     'RelationResult': {'additionalProperties': False,
+                                        'properties': {'endpoint': {'$ref': '#/definitions/Endpoint'},
+                                                       'error': {'$ref': '#/definitions/Error'},
+                                                       'id': {'type': 'integer'},
+                                                       'key': {'type': 'string'},
+                                                       'life': {'type': 'string'}},
+                                        'required': ['life',
+                                                     'id',
+                                                     'key',
+                                                     'endpoint'],
+                                        'type': 'object'},
+                     'RelationResults': {'additionalProperties': False,
+                                         'properties': {'results': {'items': {'$ref': '#/definitions/RelationResult'},
+                                                                    'type': 'array'}},
+                                         'required': ['results'],
+                                         'type': 'object'},
+                     'RelationUnit': {'additionalProperties': False,
+                                      'properties': {'relation': {'type': 'string'},
+                                                     'unit': {'type': 'string'}},
+                                      'required': ['relation', 'unit'],
+                                      'type': 'object'},
+                     'RelationUnitPair': {'additionalProperties': False,
+                                          'properties': {'local-unit': {'type': 'string'},
+                                                         'relation': {'type': 'string'},
+                                                         'remote-unit': {'type': 'string'}},
+                                          'required': ['relation',
+                                                       'local-unit',
+                                                       'remote-unit'],
+                                          'type': 'object'},
+                     'RelationUnitPairs': {'additionalProperties': False,
+                                           'properties': {'relation-unit-pairs': {'items': {'$ref': '#/definitions/RelationUnitPair'},
+                                                                                  'type': 'array'}},
+                                           'required': ['relation-unit-pairs'],
+                                           'type': 'object'},
+                     'RelationUnitSettings': {'additionalProperties': False,
+                                              'properties': {'relation': {'type': 'string'},
+                                                             'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                          'type': 'object'},
+                                                             'unit': {'type': 'string'}},
+                                              'required': ['relation',
+                                                           'unit',
+                                                           'settings'],
+                                              'type': 'object'},
+                     'RelationUnits': {'additionalProperties': False,
+                                       'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'},
+                                                                         'type': 'array'}},
+                                       'required': ['relation-units'],
+                                       'type': 'object'},
+                     'RelationUnitsChange': {'additionalProperties': False,
+                                             'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
+                                                                        'type': 'object'},
+                                                            'departed': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                             'required': ['changed'],
+                                             'type': 'object'},
+                     'RelationUnitsSettings': {'additionalProperties': False,
+                                               'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnitSettings'},
+                                                                                 'type': 'array'}},
+                                               'required': ['relation-units'],
+                                               'type': 'object'},
+                     'RelationUnitsWatchResult': {'additionalProperties': False,
+                                                  'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'},
+                                                                 'error': {'$ref': '#/definitions/Error'},
+                                                                 'watcher-id': {'type': 'string'}},
+                                                  'required': ['watcher-id',
+                                                               'changes'],
+                                                  'type': 'object'},
+                     'RelationUnitsWatchResults': {'additionalProperties': False,
+                                                   'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'},
+                                                                              'type': 'array'}},
+                                                   'required': ['results'],
+                                                   'type': 'object'},
+                     'ResolvedModeResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'mode': {'type': 'string'}},
+                                            'required': ['mode'],
+                                            'type': 'object'},
+                     'ResolvedModeResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/ResolvedModeResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'SettingsResult': {'additionalProperties': False,
+                                        'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                       'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                    'type': 'object'}},
+                                        'required': ['settings'],
+                                        'type': 'object'},
+                     'SettingsResults': {'additionalProperties': False,
+                                         'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'},
+                                                                    'type': 'array'}},
+                                         'required': ['results'],
+                                         'type': 'object'},
+                     'StatusResult': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'id': {'type': 'string'},
+                                                     'info': {'type': 'string'},
+                                                     'life': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['id',
+                                                   'life',
+                                                   'status',
+                                                   'info',
+                                                   'data',
+                                                   'since'],
+                                      'type': 'object'},
+                     'StatusResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StorageAddParams': {'additionalProperties': False,
+                                          'properties': {'name': {'type': 'string'},
+                                                         'storage': {'$ref': '#/definitions/StorageConstraints'},
+                                                         'unit': {'type': 'string'}},
+                                          'required': ['unit', 'name', 'storage'],
+                                          'type': 'object'},
+                     'StorageAttachment': {'additionalProperties': False,
+                                           'properties': {'kind': {'type': 'integer'},
+                                                          'life': {'type': 'string'},
+                                                          'location': {'type': 'string'},
+                                                          'owner-tag': {'type': 'string'},
+                                                          'storage-tag': {'type': 'string'},
+                                                          'unit-tag': {'type': 'string'}},
+                                           'required': ['storage-tag',
+                                                        'owner-tag',
+                                                        'unit-tag',
+                                                        'kind',
+                                                        'location',
+                                                        'life'],
+                                           'type': 'object'},
+                     'StorageAttachmentId': {'additionalProperties': False,
+                                             'properties': {'storage-tag': {'type': 'string'},
+                                                            'unit-tag': {'type': 'string'}},
+                                             'required': ['storage-tag',
+                                                          'unit-tag'],
+                                             'type': 'object'},
+                     'StorageAttachmentIds': {'additionalProperties': False,
+                                              'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'},
+                                                                     'type': 'array'}},
+                                              'required': ['ids'],
+                                              'type': 'object'},
+                     'StorageAttachmentIdsResult': {'additionalProperties': False,
+                                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                   'result': {'$ref': '#/definitions/StorageAttachmentIds'}},
+                                                    'required': ['result'],
+                                                    'type': 'object'},
+                     'StorageAttachmentIdsResults': {'additionalProperties': False,
+                                                     'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentIdsResult'},
+                                                                                'type': 'array'}},
+                                                     'type': 'object'},
+                     'StorageAttachmentResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'result': {'$ref': '#/definitions/StorageAttachment'}},
+                                                 'required': ['result'],
+                                                 'type': 'object'},
+                     'StorageAttachmentResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentResult'},
+                                                                             'type': 'array'}},
+                                                  'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StoragesAddParams': {'additionalProperties': False,
+                                           'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'},
+                                                                       'type': 'array'}},
+                                           'required': ['storages'],
+                                           'type': 'object'},
+                     'StringBoolResult': {'additionalProperties': False,
+                                          'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                         'ok': {'type': 'boolean'},
+                                                         'result': {'type': 'string'}},
+                                          'required': ['result', 'ok'],
+                                          'type': 'object'},
+                     'StringBoolResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/StringBoolResult'},
+                                                                      'type': 'array'}},
+                                           'required': ['results'],
+                                           'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringsResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'result': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                       'type': 'object'},
+                     'StringsResults': {'additionalProperties': False,
+                                        'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
+                                                                   'type': 'array'}},
+                                        'required': ['results'],
+                                        'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'},
+                     'StringsWatchResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'UnitNetworkConfig': {'additionalProperties': False,
+                                           'properties': {'binding-name': {'type': 'string'},
+                                                          'unit-tag': {'type': 'string'}},
+                                           'required': ['unit-tag', 'binding-name'],
+                                           'type': 'object'},
+                     'UnitNetworkConfigResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'info': {'items': {'$ref': '#/definitions/NetworkConfig'},
+                                                                         'type': 'array'}},
+                                                 'required': ['info'],
+                                                 'type': 'object'},
+                     'UnitNetworkConfigResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/UnitNetworkConfigResult'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'UnitSettings': {'additionalProperties': False,
+                                      'properties': {'version': {'type': 'integer'}},
+                                      'required': ['version'],
+                                      'type': 'object'},
+                     'UnitsNetworkConfig': {'additionalProperties': False,
+                                            'properties': {'args': {'items': {'$ref': '#/definitions/UnitNetworkConfig'},
+                                                                    'type': 'array'}},
+                                            'required': ['args'],
+                                            'type': 'object'}},
+     'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
+                                     'type': 'object'},
+                    'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+                                     'type': 'object'},
+                    'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'AddMetricBatches': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'},
+                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                         'type': 'object'},
+                    'AddUnitStorage': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'},
+                    'AllMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/MachinePortsResults'}},
+                                        'type': 'object'},
+                    'ApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                         'Result': {'$ref': '#/definitions/ApplicationStatusResults'}},
+                                          'type': 'object'},
+                    'AssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/StringResults'}},
+                                        'type': 'object'},
+                    'AvailabilityZone': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/StringResults'}},
+                                         'type': 'object'},
+                    'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+                               'type': 'object'},
+                    'CharmArchiveSha256': {'properties': {'Params': {'$ref': '#/definitions/CharmURLs'},
+                                                          'Result': {'$ref': '#/definitions/StringResults'}},
+                                           'type': 'object'},
+                    'CharmModifiedVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                            'Result': {'$ref': '#/definitions/IntResults'}},
+                                             'type': 'object'},
+                    'CharmURL': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                'Result': {'$ref': '#/definitions/StringBoolResults'}},
+                                 'type': 'object'},
+                    'ClearResolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'ClosePorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'ConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/ConfigSettingsResults'}},
+                                       'type': 'object'},
+                    'CurrentModel': {'properties': {'Result': {'$ref': '#/definitions/ModelResult'}},
+                                     'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'DestroyAllSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                               'type': 'object'},
+                    'DestroyUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                      'type': 'object'},
+                    'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'EnterScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/MeterStatusResults'}},
+                                       'type': 'object'},
+                    'GetPrincipal': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/StringBoolResults'}},
+                                     'type': 'object'},
+                    'HasSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/BoolResults'}},
+                                        'type': 'object'},
+                    'JoinedRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/StringsResults'}},
+                                        'type': 'object'},
+                    'LeaveScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'Merge': {'properties': {'Params': {'$ref': '#/definitions/MergeLeadershipSettingsBulkParams'},
+                                             'Result': {'$ref': '#/definitions/ErrorResults'}},
+                              'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                  'type': 'object'},
+                    'NetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/UnitsNetworkConfig'},
+                                                     'Result': {'$ref': '#/definitions/UnitNetworkConfigResults'}},
+                                      'type': 'object'},
+                    'OpenPorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/StringResults'}},
+                                       'type': 'object'},
+                    'ProviderType': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                     'type': 'object'},
+                    'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/StringResults'}},
+                                      'type': 'object'},
+                    'Read': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/GetLeadershipSettingsBulkResults'}},
+                             'type': 'object'},
+                    'ReadRemoteSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitPairs'},
+                                                          'Result': {'$ref': '#/definitions/SettingsResults'}},
+                                           'type': 'object'},
+                    'ReadSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                    'Result': {'$ref': '#/definitions/SettingsResults'}},
+                                     'type': 'object'},
+                    'Relation': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                'Result': {'$ref': '#/definitions/RelationResults'}},
+                                 'type': 'object'},
+                    'RelationById': {'properties': {'Params': {'$ref': '#/definitions/RelationIds'},
+                                                    'Result': {'$ref': '#/definitions/RelationResults'}},
+                                     'type': 'object'},
+                    'RemoveStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                                'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                 'type': 'object'},
+                    'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                'Result': {'$ref': '#/definitions/ResolvedModeResults'}},
+                                 'type': 'object'},
+                    'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'},
+                    'SetApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'SetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/EntitiesCharmURL'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                    'type': 'object'},
+                    'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'SetUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'SetWorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/EntityWorkloadVersions'},
+                                                          'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                           'type': 'object'},
+                    'StorageAttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                             'Result': {'$ref': '#/definitions/LifeResults'}},
+                                              'type': 'object'},
+                    'StorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                          'Result': {'$ref': '#/definitions/StorageAttachmentResults'}},
+                                           'type': 'object'},
+                    'UnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StatusResults'}},
+                                   'type': 'object'},
+                    'UnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/StorageAttachmentIdsResults'}},
+                                               'type': 'object'},
+                    'UpdateSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitsSettings'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'},
+                    'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                              'type': 'object'},
+                    'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                          'type': 'object'},
+                    'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                                 'type': 'object'},
+                    'WatchApplicationRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                 'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                                  'type': 'object'},
+                    'WatchConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                           'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                            'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'},
+                    'WatchLeadershipSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                               'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                                'type': 'object'},
+                    'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                         'type': 'object'},
+                    'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                          'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}},
+                                           'type': 'object'},
+                    'WatchStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                               'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                                'type': 'object'},
+                    'WatchUnitAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                           'type': 'object'},
+                    'WatchUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                   'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                                    'type': 'object'},
+                    'WorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/StringResults'}},
+                                        'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(StringsResult)
+    async def APIAddresses(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='APIAddresses', version=4, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(APIHostPortsResult)
+    async def APIHostPorts(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='BeginActions', version=4, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BytesResult)
+    async def CACert(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[int]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ConfigSettings', version=4, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelResult)
+    async def CurrentModel(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='CurrentModel', version=4, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='Merge', version=4, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ModelConfig', version=4, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def ModelUUID(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ModelUUID', version=4, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='PrivateAddress', version=4, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def ProviderType(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ProviderType', version=4, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='Watch', version=4, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchAPIHostPorts(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WatchAPIHostPorts', version=4, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WatchConfigSettings', version=4, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WatchForModelConfigChanges', version=4, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WorkloadVersion', version=4, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
diff --git a/juju/client/_client5.py b/juju/client/_client5.py
new file mode 100644 (file)
index 0000000..22805ed
--- /dev/null
@@ -0,0 +1,2654 @@
+# 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 = 5
+    schema =     {'definitions': {'AddApplicationUnits': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'attach-storage': {'items': {'type': 'string'},
+                                                                               'type': 'array'},
+                                                            'num-units': {'type': 'integer'},
+                                                            'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                          'type': 'array'}},
+                                             'required': ['application',
+                                                          'num-units',
+                                                          'placement'],
+                                             'type': 'object'},
+                     'AddApplicationUnitsResults': {'additionalProperties': False,
+                                                    'properties': {'units': {'items': {'type': 'string'},
+                                                                             'type': 'array'}},
+                                                    'required': ['units'],
+                                                    'type': 'object'},
+                     'AddRelation': {'additionalProperties': False,
+                                     'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                  'type': 'array'}},
+                                     'required': ['endpoints'],
+                                     'type': 'object'},
+                     'AddRelationResults': {'additionalProperties': False,
+                                            'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+                                                                         'type': 'object'}},
+                                            'required': ['endpoints'],
+                                            'type': 'object'},
+                     'ApplicationCharmRelations': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'ApplicationCharmRelationsResults': {'additionalProperties': False,
+                                                          'properties': {'charm-relations': {'items': {'type': 'string'},
+                                                                                             'type': 'array'}},
+                                                          'required': ['charm-relations'],
+                                                          'type': 'object'},
+                     'ApplicationDeploy': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'attach-storage': {'items': {'type': 'string'},
+                                                                             'type': 'array'},
+                                                          'channel': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'config': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                     'type': 'object'},
+                                                          'config-yaml': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                          'num-units': {'type': 'integer'},
+                                                          'placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                        'type': 'array'},
+                                                          'resources': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                        'type': 'object'},
+                                                          'series': {'type': 'string'},
+                                                          'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}},
+                                                                      'type': 'object'}},
+                                           'required': ['application',
+                                                        'series',
+                                                        'charm-url',
+                                                        'channel',
+                                                        'num-units',
+                                                        'config-yaml',
+                                                        'constraints'],
+                                           'type': 'object'},
+                     'ApplicationDestroy': {'additionalProperties': False,
+                                            'properties': {'application': {'type': 'string'}},
+                                            'required': ['application'],
+                                            'type': 'object'},
+                     'ApplicationExpose': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'}},
+                                           'required': ['application'],
+                                           'type': 'object'},
+                     'ApplicationGet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'}},
+                                        'required': ['application'],
+                                        'type': 'object'},
+                     'ApplicationGetResults': {'additionalProperties': False,
+                                               'properties': {'application': {'type': 'string'},
+                                                              'charm': {'type': 'string'},
+                                                              'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                      'type': 'object'}},
+                                                                         'type': 'object'},
+                                                              'constraints': {'$ref': '#/definitions/Value'},
+                                                              'series': {'type': 'string'}},
+                                               'required': ['application',
+                                                            'charm',
+                                                            'config',
+                                                            'constraints',
+                                                            'series'],
+                                               'type': 'object'},
+                     'ApplicationMetricCredential': {'additionalProperties': False,
+                                                     'properties': {'application': {'type': 'string'},
+                                                                    'metrics-credentials': {'items': {'type': 'integer'},
+                                                                                            'type': 'array'}},
+                                                     'required': ['application',
+                                                                  'metrics-credentials'],
+                                                     'type': 'object'},
+                     'ApplicationMetricCredentials': {'additionalProperties': False,
+                                                      'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'},
+                                                                               'type': 'array'}},
+                                                      'required': ['creds'],
+                                                      'type': 'object'},
+                     'ApplicationOffer': {'additionalProperties': False,
+                                          'properties': {'access': {'type': 'string'},
+                                                         'application-description': {'type': 'string'},
+                                                         'bindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                      'type': 'object'},
+                                                         'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'},
+                                                                       'type': 'array'},
+                                                         'offer-name': {'type': 'string'},
+                                                         'offer-url': {'type': 'string'},
+                                                         'source-model-tag': {'type': 'string'},
+                                                         'spaces': {'items': {'$ref': '#/definitions/RemoteSpace'},
+                                                                    'type': 'array'}},
+                                          'required': ['source-model-tag',
+                                                       'offer-url',
+                                                       'offer-name',
+                                                       'application-description',
+                                                       'endpoints',
+                                                       'spaces',
+                                                       'bindings',
+                                                       'access'],
+                                          'type': 'object'},
+                     'ApplicationSet': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'options': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                   'type': 'object'}},
+                                        'required': ['application', 'options'],
+                                        'type': 'object'},
+                     'ApplicationSetCharm': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'},
+                                                            'channel': {'type': 'string'},
+                                                            'charm-url': {'type': 'string'},
+                                                            'config-settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                'type': 'object'},
+                                                            'config-settings-yaml': {'type': 'string'},
+                                                            'force-series': {'type': 'boolean'},
+                                                            'force-units': {'type': 'boolean'},
+                                                            'resource-ids': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                             'type': 'object'},
+                                                            'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}},
+                                                                                    'type': 'object'}},
+                                             'required': ['application',
+                                                          'charm-url',
+                                                          'channel',
+                                                          'force-units',
+                                                          'force-series'],
+                                             'type': 'object'},
+                     'ApplicationUnexpose': {'additionalProperties': False,
+                                             'properties': {'application': {'type': 'string'}},
+                                             'required': ['application'],
+                                             'type': 'object'},
+                     'ApplicationUnset': {'additionalProperties': False,
+                                          'properties': {'application': {'type': 'string'},
+                                                         'options': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                          'required': ['application', 'options'],
+                                          'type': 'object'},
+                     'ApplicationUpdate': {'additionalProperties': False,
+                                           'properties': {'application': {'type': 'string'},
+                                                          'charm-url': {'type': 'string'},
+                                                          'constraints': {'$ref': '#/definitions/Value'},
+                                                          'force-charm-url': {'type': 'boolean'},
+                                                          'force-series': {'type': 'boolean'},
+                                                          'min-units': {'type': 'integer'},
+                                                          'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                       'type': 'object'},
+                                                          'settings-yaml': {'type': 'string'}},
+                                           'required': ['application',
+                                                        'charm-url',
+                                                        'force-charm-url',
+                                                        'force-series',
+                                                        'settings-yaml'],
+                                           'type': 'object'},
+                     'ApplicationsDeploy': {'additionalProperties': False,
+                                            'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'},
+                                                                            'type': 'array'}},
+                                            'required': ['applications'],
+                                            'type': 'object'},
+                     'CharmRelation': {'additionalProperties': False,
+                                       'properties': {'interface': {'type': 'string'},
+                                                      'limit': {'type': 'integer'},
+                                                      'name': {'type': 'string'},
+                                                      'optional': {'type': 'boolean'},
+                                                      'role': {'type': 'string'},
+                                                      'scope': {'type': 'string'}},
+                                       'required': ['name',
+                                                    'role',
+                                                    'interface',
+                                                    'optional',
+                                                    'limit',
+                                                    'scope'],
+                                       'type': 'object'},
+                     'Constraints': {'additionalProperties': False,
+                                     'properties': {'Count': {'type': 'integer'},
+                                                    'Pool': {'type': 'string'},
+                                                    'Size': {'type': 'integer'}},
+                                     'required': ['Pool', 'Size', 'Count'],
+                                     'type': 'object'},
+                     'ConsumeApplicationArg': {'additionalProperties': False,
+                                               'properties': {'ApplicationOffer': {'$ref': '#/definitions/ApplicationOffer'},
+                                                              'application-alias': {'type': 'string'},
+                                                              'macaroon': {'$ref': '#/definitions/Macaroon'}},
+                                               'required': ['ApplicationOffer'],
+                                               'type': 'object'},
+                     'ConsumeApplicationArgs': {'additionalProperties': False,
+                                                'properties': {'args': {'items': {'$ref': '#/definitions/ConsumeApplicationArg'},
+                                                                        'type': 'array'}},
+                                                'type': 'object'},
+                     'DestroyApplicationInfo': {'additionalProperties': False,
+                                                'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                     'type': 'array'},
+                                                               'destroyed-units': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                   'type': 'array'},
+                                                               'detached-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                                    'type': 'array'}},
+                                                'type': 'object'},
+                     'DestroyApplicationResult': {'additionalProperties': False,
+                                                  'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                 'info': {'$ref': '#/definitions/DestroyApplicationInfo'}},
+                                                  'type': 'object'},
+                     'DestroyApplicationResults': {'additionalProperties': False,
+                                                   'properties': {'results': {'items': {'$ref': '#/definitions/DestroyApplicationResult'},
+                                                                              'type': 'array'}},
+                                                   'type': 'object'},
+                     'DestroyApplicationUnits': {'additionalProperties': False,
+                                                 'properties': {'unit-names': {'items': {'type': 'string'},
+                                                                               'type': 'array'}},
+                                                 'required': ['unit-names'],
+                                                 'type': 'object'},
+                     'DestroyRelation': {'additionalProperties': False,
+                                         'properties': {'endpoints': {'items': {'type': 'string'},
+                                                                      'type': 'array'}},
+                                         'required': ['endpoints'],
+                                         'type': 'object'},
+                     'DestroyUnitInfo': {'additionalProperties': False,
+                                         'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                              'type': 'array'},
+                                                        'detached-storage': {'items': {'$ref': '#/definitions/Entity'},
+                                                                             'type': 'array'}},
+                                         'type': 'object'},
+                     'DestroyUnitResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'info': {'$ref': '#/definitions/DestroyUnitInfo'}},
+                                           'type': 'object'},
+                     'DestroyUnitResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/DestroyUnitResult'},
+                                                                       'type': 'array'}},
+                                            'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'GetApplicationConstraints': {'additionalProperties': False,
+                                                   'properties': {'application': {'type': 'string'}},
+                                                   'required': ['application'],
+                                                   'type': 'object'},
+                     'GetConstraintsResults': {'additionalProperties': False,
+                                               'properties': {'constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['constraints'],
+                                               'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'directive': {'type': 'string'},
+                                                  'scope': {'type': 'string'}},
+                                   'required': ['scope', 'directive'],
+                                   'type': 'object'},
+                     'RemoteEndpoint': {'additionalProperties': False,
+                                        'properties': {'interface': {'type': 'string'},
+                                                       'limit': {'type': 'integer'},
+                                                       'name': {'type': 'string'},
+                                                       'role': {'type': 'string'},
+                                                       'scope': {'type': 'string'}},
+                                        'required': ['name',
+                                                     'role',
+                                                     'interface',
+                                                     'limit',
+                                                     'scope'],
+                                        'type': 'object'},
+                     'RemoteSpace': {'additionalProperties': False,
+                                     'properties': {'cloud-type': {'type': 'string'},
+                                                    'name': {'type': 'string'},
+                                                    'provider-attributes': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                         'type': 'object'}},
+                                                                            'type': 'object'},
+                                                    'provider-id': {'type': 'string'},
+                                                    'subnets': {'items': {'$ref': '#/definitions/Subnet'},
+                                                                'type': 'array'}},
+                                     'required': ['cloud-type',
+                                                  'name',
+                                                  'provider-id',
+                                                  'provider-attributes',
+                                                  'subnets'],
+                                     'type': 'object'},
+                     'SetConstraints': {'additionalProperties': False,
+                                        'properties': {'application': {'type': 'string'},
+                                                       'constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['application', 'constraints'],
+                                        'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'Subnet': {'additionalProperties': False,
+                                'properties': {'cidr': {'type': 'string'},
+                                               'life': {'type': 'string'},
+                                               'provider-id': {'type': 'string'},
+                                               'provider-network-id': {'type': 'string'},
+                                               'provider-space-id': {'type': 'string'},
+                                               'space-tag': {'type': 'string'},
+                                               'status': {'type': 'string'},
+                                               'vlan-tag': {'type': 'integer'},
+                                               'zones': {'items': {'type': 'string'},
+                                                         'type': 'array'}},
+                                'required': ['cidr',
+                                             'vlan-tag',
+                                             'life',
+                                             'space-tag',
+                                             'zones'],
+                                'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cores': {'type': 'integer'},
+                                              'cpu-power': {'type': 'integer'},
+                                              'instance-type': {'type': 'string'},
+                                              'mem': {'type': 'integer'},
+                                              'root-disk': {'type': 'integer'},
+                                              'spaces': {'items': {'type': 'string'},
+                                                         'type': 'array'},
+                                              'tags': {'items': {'type': 'string'},
+                                                       'type': 'array'},
+                                              'virt-type': {'type': 'string'}},
+                               'type': 'object'}},
+     'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
+                                                   'Result': {'$ref': '#/definitions/AddRelationResults'}},
+                                    'type': 'object'},
+                    'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
+                                                'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
+                                 'type': 'object'},
+                    'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
+                                                      'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
+                                       'type': 'object'},
+                    'Consume': {'properties': {'Params': {'$ref': '#/definitions/ConsumeApplicationArgs'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
+                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                               'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}},
+                                'type': 'object'},
+                    'DestroyApplication': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/DestroyApplicationResults'}},
+                                           'type': 'object'},
+                    'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
+                                        'type': 'object'},
+                    'DestroyUnit': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/DestroyUnitResults'}},
+                                    'type': 'object'},
+                    'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}},
+                                     'type': 'object'},
+                    'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}},
+                               'type': 'object'},
+                    'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                           'Result': {'$ref': '#/definitions/ApplicationGetResults'}},
+                            'type': 'object'},
+                    'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+                                                   'Result': {'$ref': '#/definitions/StringResult'}},
+                                    'type': 'object'},
+                    'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'},
+                                                      'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+                                       'type': 'object'},
+                    'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}},
+                            'type': 'object'},
+                    'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}},
+                                 'type': 'object'},
+                    'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+                                       'type': 'object'},
+                    'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}},
+                                 'type': 'object'},
+                    'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}},
+                              'type': 'object'},
+                    'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}},
+                               'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(AddRelationResults)
+    async def AddRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='AddRelation', version=5, params=_params)
+        _params['endpoints'] = endpoints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(AddApplicationUnitsResults)
+    async def AddUnits(self, application, num_units, placement):
+        '''
+        application : str
+        num_units : int
+        placement : typing.Sequence<+T_co>[~Placement]<~Placement>
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='AddUnits', version=5, params=_params)
+        _params['application'] = application
+        _params['num-units'] = num_units
+        _params['placement'] = placement
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationCharmRelationsResults)
+    async def CharmRelations(self, application):
+        '''
+        application : str
+        Returns -> typing.Sequence<+T_co>[str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Deploy', version=5, params=_params)
+        _params['applications'] = applications
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Destroy(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Destroy', version=5, params=_params)
+        _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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='DestroyUnits', version=5, params=_params)
+        _params['unit-names'] = unit_names
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Expose(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Expose', version=5, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationGetResults)
+    async def Get(self, application):
+        '''
+        application : str
+        Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Get', version=5, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def GetCharmURL(self, application):
+        '''
+        application : str
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='GetCharmURL', version=5, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(GetConstraintsResults)
+    async def GetConstraints(self, application):
+        '''
+        application : str
+        Returns -> Value
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='GetConstraints', version=5, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Set(self, application, options):
+        '''
+        application : str
+        options : typing.Mapping<~KT, +VT_co>[str, str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Set', version=5, params=_params)
+        _params['application'] = application
+        _params['options'] = options
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints):
+        '''
+        application : str
+        channel : str
+        charm_url : str
+        config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+        config_settings_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
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetCharm', version=5, params=_params)
+        _params['application'] = application
+        _params['channel'] = channel
+        _params['charm-url'] = charm_url
+        _params['config-settings'] = config_settings
+        _params['config-settings-yaml'] = config_settings_yaml
+        _params['force-series'] = force_series
+        _params['force-units'] = force_units
+        _params['resource-ids'] = resource_ids
+        _params['storage-constraints'] = storage_constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def SetConstraints(self, application, constraints):
+        '''
+        application : str
+        constraints : Value
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetConstraints', version=5, params=_params)
+        _params['application'] = application
+        _params['constraints'] = constraints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetMetricCredentials(self, creds):
+        '''
+        creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='SetMetricCredentials', version=5, params=_params)
+        _params['creds'] = creds
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Unexpose(self, application):
+        '''
+        application : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Unexpose', version=5, params=_params)
+        _params['application'] = application
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Unset(self, application, options):
+        '''
+        application : str
+        options : typing.Sequence<+T_co>[str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Unset', version=5, params=_params)
+        _params['application'] = application
+        _params['options'] = options
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml):
+        '''
+        application : str
+        charm_url : str
+        constraints : Value
+        force_charm_url : bool
+        force_series : bool
+        min_units : int
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        settings_yaml : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Application', request='Update', version=5, params=_params)
+        _params['application'] = application
+        _params['charm-url'] = charm_url
+        _params['constraints'] = constraints
+        _params['force-charm-url'] = force_charm_url
+        _params['force-series'] = force_series
+        _params['min-units'] = min_units
+        _params['settings'] = settings
+        _params['settings-yaml'] = settings_yaml
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+class UniterFacade(Type):
+    name = 'Uniter'
+    version = 5
+    schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+                                            'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+                                                                                 'type': 'array'},
+                                                                       'type': 'array'}},
+                                            'required': ['servers'],
+                                            'type': 'object'},
+                     'Action': {'additionalProperties': False,
+                                'properties': {'name': {'type': 'string'},
+                                               'parameters': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                               'receiver': {'type': 'string'},
+                                               'tag': {'type': 'string'}},
+                                'required': ['tag', 'receiver', 'name'],
+                                'type': 'object'},
+                     'ActionExecutionResult': {'additionalProperties': False,
+                                               'properties': {'action-tag': {'type': 'string'},
+                                                              'message': {'type': 'string'},
+                                                              'results': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'},
+                                                              'status': {'type': 'string'}},
+                                               'required': ['action-tag', 'status'],
+                                               'type': 'object'},
+                     'ActionExecutionResults': {'additionalProperties': False,
+                                                'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'},
+                                                                           'type': 'array'}},
+                                                'type': 'object'},
+                     'ActionResult': {'additionalProperties': False,
+                                      'properties': {'action': {'$ref': '#/definitions/Action'},
+                                                     'completed': {'format': 'date-time',
+                                                                   'type': 'string'},
+                                                     'enqueued': {'format': 'date-time',
+                                                                  'type': 'string'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'message': {'type': 'string'},
+                                                     'output': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                             'type': 'object'}},
+                                                                'type': 'object'},
+                                                     'started': {'format': 'date-time',
+                                                                 'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'type': 'object'},
+                     'ActionResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'},
+                                                                  'type': 'array'}},
+                                       'type': 'object'},
+                     'Address': {'additionalProperties': False,
+                                 'properties': {'scope': {'type': 'string'},
+                                                'space-name': {'type': 'string'},
+                                                'type': {'type': 'string'},
+                                                'value': {'type': 'string'}},
+                                 'required': ['value', 'type', 'scope'],
+                                 'type': 'object'},
+                     'ApplicationStatusResult': {'additionalProperties': False,
+                                                 'properties': {'application': {'$ref': '#/definitions/StatusResult'},
+                                                                'error': {'$ref': '#/definitions/Error'},
+                                                                'units': {'patternProperties': {'.*': {'$ref': '#/definitions/StatusResult'}},
+                                                                          'type': 'object'}},
+                                                 'required': ['application',
+                                                              'units'],
+                                                 'type': 'object'},
+                     'ApplicationStatusResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationStatusResult'},
+                                                                             'type': 'array'}},
+                                                  'required': ['results'],
+                                                  'type': 'object'},
+                     'BoolResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'result': {'type': 'boolean'}},
+                                    'required': ['result'],
+                                    'type': 'object'},
+                     'BoolResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/BoolResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'BytesResult': {'additionalProperties': False,
+                                     'properties': {'result': {'items': {'type': 'integer'},
+                                                               'type': 'array'}},
+                                     'required': ['result'],
+                                     'type': 'object'},
+                     'CharmRelation': {'additionalProperties': False,
+                                       'properties': {'interface': {'type': 'string'},
+                                                      'limit': {'type': 'integer'},
+                                                      'name': {'type': 'string'},
+                                                      'optional': {'type': 'boolean'},
+                                                      'role': {'type': 'string'},
+                                                      'scope': {'type': 'string'}},
+                                       'required': ['name',
+                                                    'role',
+                                                    'interface',
+                                                    'optional',
+                                                    'limit',
+                                                    'scope'],
+                                       'type': 'object'},
+                     'CharmURL': {'additionalProperties': False,
+                                  'properties': {'url': {'type': 'string'}},
+                                  'required': ['url'],
+                                  'type': 'object'},
+                     'CharmURLs': {'additionalProperties': False,
+                                   'properties': {'urls': {'items': {'$ref': '#/definitions/CharmURL'},
+                                                           'type': 'array'}},
+                                   'required': ['urls'],
+                                   'type': 'object'},
+                     'ConfigSettingsResult': {'additionalProperties': False,
+                                              'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                             'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                       'type': 'object'}},
+                                                                          'type': 'object'}},
+                                              'required': ['settings'],
+                                              'type': 'object'},
+                     'ConfigSettingsResults': {'additionalProperties': False,
+                                               'properties': {'results': {'items': {'$ref': '#/definitions/ConfigSettingsResult'},
+                                                                          'type': 'array'}},
+                                               'required': ['results'],
+                                               'type': 'object'},
+                     'Endpoint': {'additionalProperties': False,
+                                  'properties': {'application-name': {'type': 'string'},
+                                                 'relation': {'$ref': '#/definitions/CharmRelation'}},
+                                  'required': ['application-name', 'relation'],
+                                  'type': 'object'},
+                     'Entities': {'additionalProperties': False,
+                                  'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+                                                              'type': 'array'}},
+                                  'required': ['entities'],
+                                  'type': 'object'},
+                     'EntitiesCharmURL': {'additionalProperties': False,
+                                          'properties': {'entities': {'items': {'$ref': '#/definitions/EntityCharmURL'},
+                                                                      'type': 'array'}},
+                                          'required': ['entities'],
+                                          'type': 'object'},
+                     'EntitiesPortRanges': {'additionalProperties': False,
+                                            'properties': {'entities': {'items': {'$ref': '#/definitions/EntityPortRange'},
+                                                                        'type': 'array'}},
+                                            'required': ['entities'],
+                                            'type': 'object'},
+                     'Entity': {'additionalProperties': False,
+                                'properties': {'tag': {'type': 'string'}},
+                                'required': ['tag'],
+                                'type': 'object'},
+                     'EntityCharmURL': {'additionalProperties': False,
+                                        'properties': {'charm-url': {'type': 'string'},
+                                                       'tag': {'type': 'string'}},
+                                        'required': ['tag', 'charm-url'],
+                                        'type': 'object'},
+                     'EntityPortRange': {'additionalProperties': False,
+                                         'properties': {'from-port': {'type': 'integer'},
+                                                        'protocol': {'type': 'string'},
+                                                        'tag': {'type': 'string'},
+                                                        'to-port': {'type': 'integer'}},
+                                         'required': ['tag',
+                                                      'protocol',
+                                                      'from-port',
+                                                      'to-port'],
+                                         'type': 'object'},
+                     'EntityStatusArgs': {'additionalProperties': False,
+                                          'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                               'type': 'object'}},
+                                                                  'type': 'object'},
+                                                         'info': {'type': 'string'},
+                                                         'status': {'type': 'string'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag',
+                                                       'status',
+                                                       'info',
+                                                       'data'],
+                                          'type': 'object'},
+                     'EntityWorkloadVersion': {'additionalProperties': False,
+                                               'properties': {'tag': {'type': 'string'},
+                                                              'workload-version': {'type': 'string'}},
+                                               'required': ['tag',
+                                                            'workload-version'],
+                                               'type': 'object'},
+                     'EntityWorkloadVersions': {'additionalProperties': False,
+                                                'properties': {'entities': {'items': {'$ref': '#/definitions/EntityWorkloadVersion'},
+                                                                            'type': 'array'}},
+                                                'required': ['entities'],
+                                                'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'code': {'type': 'string'},
+                                              'info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'message': {'type': 'string'}},
+                               'required': ['message', 'code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'macaroon-path': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'}},
+                                     'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['results'],
+                                      'type': 'object'},
+                     'GetLeadershipSettingsBulkResults': {'additionalProperties': False,
+                                                          'properties': {'results': {'items': {'$ref': '#/definitions/GetLeadershipSettingsResult'},
+                                                                                     'type': 'array'}},
+                                                          'required': ['results'],
+                                                          'type': 'object'},
+                     'GetLeadershipSettingsResult': {'additionalProperties': False,
+                                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                    'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                 'type': 'object'}},
+                                                     'required': ['settings'],
+                                                     'type': 'object'},
+                     'HostPort': {'additionalProperties': False,
+                                  'properties': {'Address': {'$ref': '#/definitions/Address'},
+                                                 'port': {'type': 'integer'}},
+                                  'required': ['Address', 'port'],
+                                  'type': 'object'},
+                     'IntResult': {'additionalProperties': False,
+                                   'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                  'result': {'type': 'integer'}},
+                                   'required': ['result'],
+                                   'type': 'object'},
+                     'IntResults': {'additionalProperties': False,
+                                    'properties': {'results': {'items': {'$ref': '#/definitions/IntResult'},
+                                                               'type': 'array'}},
+                                    'required': ['results'],
+                                    'type': 'object'},
+                     'InterfaceAddress': {'additionalProperties': False,
+                                          'properties': {'cidr': {'type': 'string'},
+                                                         'value': {'type': 'string'}},
+                                          'required': ['value', 'cidr'],
+                                          'type': 'object'},
+                     'LifeResult': {'additionalProperties': False,
+                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                   'life': {'type': 'string'}},
+                                    'required': ['life'],
+                                    'type': 'object'},
+                     'LifeResults': {'additionalProperties': False,
+                                     'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+                                                                'type': 'array'}},
+                                     'required': ['results'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False, 'type': 'object'},
+                     'MachinePortRange': {'additionalProperties': False,
+                                          'properties': {'port-range': {'$ref': '#/definitions/PortRange'},
+                                                         'relation-tag': {'type': 'string'},
+                                                         'unit-tag': {'type': 'string'}},
+                                          'required': ['unit-tag',
+                                                       'relation-tag',
+                                                       'port-range'],
+                                          'type': 'object'},
+                     'MachinePortsResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'ports': {'items': {'$ref': '#/definitions/MachinePortRange'},
+                                                                     'type': 'array'}},
+                                            'required': ['ports'],
+                                            'type': 'object'},
+                     'MachinePortsResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'MergeLeadershipSettingsBulkParams': {'additionalProperties': False,
+                                                           'properties': {'params': {'items': {'$ref': '#/definitions/MergeLeadershipSettingsParam'},
+                                                                                     'type': 'array'}},
+                                                           'required': ['params'],
+                                                           'type': 'object'},
+                     'MergeLeadershipSettingsParam': {'additionalProperties': False,
+                                                      'properties': {'application-tag': {'type': 'string'},
+                                                                     'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                                  'type': 'object'}},
+                                                      'required': ['application-tag',
+                                                                   'settings'],
+                                                      'type': 'object'},
+                     'MeterStatusResult': {'additionalProperties': False,
+                                           'properties': {'code': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'},
+                                                          'info': {'type': 'string'}},
+                                           'required': ['code', 'info'],
+                                           'type': 'object'},
+                     'MeterStatusResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/MeterStatusResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'Metric': {'additionalProperties': False,
+                                'properties': {'key': {'type': 'string'},
+                                               'time': {'format': 'date-time',
+                                                        'type': 'string'},
+                                               'value': {'type': 'string'}},
+                                'required': ['key', 'value', 'time'],
+                                'type': 'object'},
+                     'MetricBatch': {'additionalProperties': False,
+                                     'properties': {'charm-url': {'type': 'string'},
+                                                    'created': {'format': 'date-time',
+                                                                'type': 'string'},
+                                                    'metrics': {'items': {'$ref': '#/definitions/Metric'},
+                                                                'type': 'array'},
+                                                    'uuid': {'type': 'string'}},
+                                     'required': ['uuid',
+                                                  'charm-url',
+                                                  'created',
+                                                  'metrics'],
+                                     'type': 'object'},
+                     'MetricBatchParam': {'additionalProperties': False,
+                                          'properties': {'batch': {'$ref': '#/definitions/MetricBatch'},
+                                                         'tag': {'type': 'string'}},
+                                          'required': ['tag', 'batch'],
+                                          'type': 'object'},
+                     'MetricBatchParams': {'additionalProperties': False,
+                                           'properties': {'batches': {'items': {'$ref': '#/definitions/MetricBatchParam'},
+                                                                      'type': 'array'}},
+                                           'required': ['batches'],
+                                           'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['config'],
+                                           'type': 'object'},
+                     'ModelResult': {'additionalProperties': False,
+                                     'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                    'name': {'type': 'string'},
+                                                    'uuid': {'type': 'string'}},
+                                     'required': ['name', 'uuid'],
+                                     'type': 'object'},
+                     'NetworkInfo': {'additionalProperties': False,
+                                     'properties': {'addresses': {'items': {'$ref': '#/definitions/InterfaceAddress'},
+                                                                  'type': 'array'},
+                                                    'interface-name': {'type': 'string'},
+                                                    'mac-address': {'type': 'string'}},
+                                     'required': ['mac-address',
+                                                  'interface-name',
+                                                  'addresses'],
+                                     'type': 'object'},
+                     'NetworkInfoParams': {'additionalProperties': False,
+                                           'properties': {'bindings': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                          'unit': {'type': 'string'}},
+                                           'required': ['unit', 'bindings'],
+                                           'type': 'object'},
+                     'NetworkInfoResult': {'additionalProperties': False,
+                                           'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                          'network-info': {'items': {'$ref': '#/definitions/NetworkInfo'},
+                                                                           'type': 'array'}},
+                                           'required': ['network-info'],
+                                           'type': 'object'},
+                     'NetworkInfoResults': {'additionalProperties': False,
+                                            'properties': {'results': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInfoResult'}},
+                                                                       'type': 'object'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'NotifyWatcherId': {'type': 'string'},
+                                                          'error': {'$ref': '#/definitions/Error'}},
+                                           'required': ['NotifyWatcherId'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['results'],
+                                            'type': 'object'},
+                     'PortRange': {'additionalProperties': False,
+                                   'properties': {'from-port': {'type': 'integer'},
+                                                  'protocol': {'type': 'string'},
+                                                  'to-port': {'type': 'integer'}},
+                                   'required': ['from-port', 'to-port', 'protocol'],
+                                   'type': 'object'},
+                     'RelationIds': {'additionalProperties': False,
+                                     'properties': {'relation-ids': {'items': {'type': 'integer'},
+                                                                     'type': 'array'}},
+                                     'required': ['relation-ids'],
+                                     'type': 'object'},
+                     'RelationResult': {'additionalProperties': False,
+                                        'properties': {'endpoint': {'$ref': '#/definitions/Endpoint'},
+                                                       'error': {'$ref': '#/definitions/Error'},
+                                                       'id': {'type': 'integer'},
+                                                       'key': {'type': 'string'},
+                                                       'life': {'type': 'string'}},
+                                        'required': ['life',
+                                                     'id',
+                                                     'key',
+                                                     'endpoint'],
+                                        'type': 'object'},
+                     'RelationResults': {'additionalProperties': False,
+                                         'properties': {'results': {'items': {'$ref': '#/definitions/RelationResult'},
+                                                                    'type': 'array'}},
+                                         'required': ['results'],
+                                         'type': 'object'},
+                     'RelationUnit': {'additionalProperties': False,
+                                      'properties': {'relation': {'type': 'string'},
+                                                     'unit': {'type': 'string'}},
+                                      'required': ['relation', 'unit'],
+                                      'type': 'object'},
+                     'RelationUnitPair': {'additionalProperties': False,
+                                          'properties': {'local-unit': {'type': 'string'},
+                                                         'relation': {'type': 'string'},
+                                                         'remote-unit': {'type': 'string'}},
+                                          'required': ['relation',
+                                                       'local-unit',
+                                                       'remote-unit'],
+                                          'type': 'object'},
+                     'RelationUnitPairs': {'additionalProperties': False,
+                                           'properties': {'relation-unit-pairs': {'items': {'$ref': '#/definitions/RelationUnitPair'},
+                                                                                  'type': 'array'}},
+                                           'required': ['relation-unit-pairs'],
+                                           'type': 'object'},
+                     'RelationUnitSettings': {'additionalProperties': False,
+                                              'properties': {'relation': {'type': 'string'},
+                                                             'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                          'type': 'object'},
+                                                             'unit': {'type': 'string'}},
+                                              'required': ['relation',
+                                                           'unit',
+                                                           'settings'],
+                                              'type': 'object'},
+                     'RelationUnits': {'additionalProperties': False,
+                                       'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'},
+                                                                         'type': 'array'}},
+                                       'required': ['relation-units'],
+                                       'type': 'object'},
+                     'RelationUnitsChange': {'additionalProperties': False,
+                                             'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
+                                                                        'type': 'object'},
+                                                            'departed': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                             'required': ['changed'],
+                                             'type': 'object'},
+                     'RelationUnitsSettings': {'additionalProperties': False,
+                                               'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnitSettings'},
+                                                                                 'type': 'array'}},
+                                               'required': ['relation-units'],
+                                               'type': 'object'},
+                     'RelationUnitsWatchResult': {'additionalProperties': False,
+                                                  'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'},
+                                                                 'error': {'$ref': '#/definitions/Error'},
+                                                                 'watcher-id': {'type': 'string'}},
+                                                  'required': ['watcher-id',
+                                                               'changes'],
+                                                  'type': 'object'},
+                     'RelationUnitsWatchResults': {'additionalProperties': False,
+                                                   'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'},
+                                                                              'type': 'array'}},
+                                                   'required': ['results'],
+                                                   'type': 'object'},
+                     'ResolvedModeResult': {'additionalProperties': False,
+                                            'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                           'mode': {'type': 'string'}},
+                                            'required': ['mode'],
+                                            'type': 'object'},
+                     'ResolvedModeResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/ResolvedModeResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'SetStatus': {'additionalProperties': False,
+                                   'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+                                                               'type': 'array'}},
+                                   'required': ['entities'],
+                                   'type': 'object'},
+                     'SettingsResult': {'additionalProperties': False,
+                                        'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                       'settings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                    'type': 'object'}},
+                                        'required': ['settings'],
+                                        'type': 'object'},
+                     'SettingsResults': {'additionalProperties': False,
+                                         'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'},
+                                                                    'type': 'array'}},
+                                         'required': ['results'],
+                                         'type': 'object'},
+                     'StatusResult': {'additionalProperties': False,
+                                      'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                           'type': 'object'}},
+                                                              'type': 'object'},
+                                                     'error': {'$ref': '#/definitions/Error'},
+                                                     'id': {'type': 'string'},
+                                                     'info': {'type': 'string'},
+                                                     'life': {'type': 'string'},
+                                                     'since': {'format': 'date-time',
+                                                               'type': 'string'},
+                                                     'status': {'type': 'string'}},
+                                      'required': ['id',
+                                                   'life',
+                                                   'status',
+                                                   'info',
+                                                   'data',
+                                                   'since'],
+                                      'type': 'object'},
+                     'StatusResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StorageAddParams': {'additionalProperties': False,
+                                          'properties': {'name': {'type': 'string'},
+                                                         'storage': {'$ref': '#/definitions/StorageConstraints'},
+                                                         'unit': {'type': 'string'}},
+                                          'required': ['unit', 'name', 'storage'],
+                                          'type': 'object'},
+                     'StorageAttachment': {'additionalProperties': False,
+                                           'properties': {'kind': {'type': 'integer'},
+                                                          'life': {'type': 'string'},
+                                                          'location': {'type': 'string'},
+                                                          'owner-tag': {'type': 'string'},
+                                                          'storage-tag': {'type': 'string'},
+                                                          'unit-tag': {'type': 'string'}},
+                                           'required': ['storage-tag',
+                                                        'owner-tag',
+                                                        'unit-tag',
+                                                        'kind',
+                                                        'location',
+                                                        'life'],
+                                           'type': 'object'},
+                     'StorageAttachmentId': {'additionalProperties': False,
+                                             'properties': {'storage-tag': {'type': 'string'},
+                                                            'unit-tag': {'type': 'string'}},
+                                             'required': ['storage-tag',
+                                                          'unit-tag'],
+                                             'type': 'object'},
+                     'StorageAttachmentIds': {'additionalProperties': False,
+                                              'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'},
+                                                                     'type': 'array'}},
+                                              'required': ['ids'],
+                                              'type': 'object'},
+                     'StorageAttachmentIdsResult': {'additionalProperties': False,
+                                                    'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                   'result': {'$ref': '#/definitions/StorageAttachmentIds'}},
+                                                    'required': ['result'],
+                                                    'type': 'object'},
+                     'StorageAttachmentIdsResults': {'additionalProperties': False,
+                                                     'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentIdsResult'},
+                                                                                'type': 'array'}},
+                                                     'type': 'object'},
+                     'StorageAttachmentResult': {'additionalProperties': False,
+                                                 'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                                'result': {'$ref': '#/definitions/StorageAttachment'}},
+                                                 'required': ['result'],
+                                                 'type': 'object'},
+                     'StorageAttachmentResults': {'additionalProperties': False,
+                                                  'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentResult'},
+                                                                             'type': 'array'}},
+                                                  'type': 'object'},
+                     'StorageConstraints': {'additionalProperties': False,
+                                            'properties': {'count': {'type': 'integer'},
+                                                           'pool': {'type': 'string'},
+                                                           'size': {'type': 'integer'}},
+                                            'type': 'object'},
+                     'StoragesAddParams': {'additionalProperties': False,
+                                           'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'},
+                                                                       'type': 'array'}},
+                                           'required': ['storages'],
+                                           'type': 'object'},
+                     'StringBoolResult': {'additionalProperties': False,
+                                          'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                         'ok': {'type': 'boolean'},
+                                                         'result': {'type': 'string'}},
+                                          'required': ['result', 'ok'],
+                                          'type': 'object'},
+                     'StringBoolResults': {'additionalProperties': False,
+                                           'properties': {'results': {'items': {'$ref': '#/definitions/StringBoolResult'},
+                                                                      'type': 'array'}},
+                                           'required': ['results'],
+                                           'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                     'result': {'type': 'string'}},
+                                      'required': ['result'],
+                                      'type': 'object'},
+                     'StringResults': {'additionalProperties': False,
+                                       'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+                                                                  'type': 'array'}},
+                                       'required': ['results'],
+                                       'type': 'object'},
+                     'StringsResult': {'additionalProperties': False,
+                                       'properties': {'error': {'$ref': '#/definitions/Error'},
+                                                      'result': {'items': {'type': 'string'},
+                                                                 'type': 'array'}},
+                                       'type': 'object'},
+                     'StringsResults': {'additionalProperties': False,
+                                        'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
+                                                                   'type': 'array'}},
+                                        'required': ['results'],
+                                        'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'error': {'$ref': '#/definitions/Error'},
+                                                           'watcher-id': {'type': 'string'}},
+                                            'required': ['watcher-id'],
+                                            'type': 'object'},
+                     'StringsWatchResults': {'additionalProperties': False,
+                                             'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+                                                                        'type': 'array'}},
+                                             'required': ['results'],
+                                             'type': 'object'},
+                     'UnitSettings': {'additionalProperties': False,
+                                      'properties': {'version': {'type': 'integer'}},
+                                      'required': ['version'],
+                                      'type': 'object'}},
+     'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
+                                     'type': 'object'},
+                    'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+                                     'type': 'object'},
+                    'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'AddMetricBatches': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'},
+                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                         'type': 'object'},
+                    'AddUnitStorage': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'},
+                    'AllMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/MachinePortsResults'}},
+                                        'type': 'object'},
+                    'ApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                         'Result': {'$ref': '#/definitions/ApplicationStatusResults'}},
+                                          'type': 'object'},
+                    'AssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/StringResults'}},
+                                        'type': 'object'},
+                    'AvailabilityZone': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/StringResults'}},
+                                         'type': 'object'},
+                    'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                     'type': 'object'},
+                    'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+                               'type': 'object'},
+                    'CharmArchiveSha256': {'properties': {'Params': {'$ref': '#/definitions/CharmURLs'},
+                                                          'Result': {'$ref': '#/definitions/StringResults'}},
+                                           'type': 'object'},
+                    'CharmModifiedVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                            'Result': {'$ref': '#/definitions/IntResults'}},
+                                             'type': 'object'},
+                    'CharmURL': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                'Result': {'$ref': '#/definitions/StringBoolResults'}},
+                                 'type': 'object'},
+                    'ClearResolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'ClosePorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'ConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/ConfigSettingsResults'}},
+                                       'type': 'object'},
+                    'CurrentModel': {'properties': {'Result': {'$ref': '#/definitions/ModelResult'}},
+                                     'type': 'object'},
+                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'DestroyAllSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                               'type': 'object'},
+                    'DestroyUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                      'type': 'object'},
+                    'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'EnterScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/MeterStatusResults'}},
+                                       'type': 'object'},
+                    'GetPrincipal': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                    'Result': {'$ref': '#/definitions/StringBoolResults'}},
+                                     'type': 'object'},
+                    'HasSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/BoolResults'}},
+                                        'type': 'object'},
+                    'JoinedRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/StringsResults'}},
+                                        'type': 'object'},
+                    'LeaveScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                   'type': 'object'},
+                    'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/LifeResults'}},
+                             'type': 'object'},
+                    'Merge': {'properties': {'Params': {'$ref': '#/definitions/MergeLeadershipSettingsBulkParams'},
+                                             'Result': {'$ref': '#/definitions/ErrorResults'}},
+                              'type': 'object'},
+                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+                                    'type': 'object'},
+                    'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                  'type': 'object'},
+                    'NetworkInfo': {'properties': {'Params': {'$ref': '#/definitions/NetworkInfoParams'},
+                                                   'Result': {'$ref': '#/definitions/NetworkInfoResults'}},
+                                    'type': 'object'},
+                    'OpenPorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                      'Result': {'$ref': '#/definitions/StringResults'}},
+                                       'type': 'object'},
+                    'ProviderType': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                     'type': 'object'},
+                    'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/StringResults'}},
+                                      'type': 'object'},
+                    'Read': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                            'Result': {'$ref': '#/definitions/GetLeadershipSettingsBulkResults'}},
+                             'type': 'object'},
+                    'ReadRemoteSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitPairs'},
+                                                          'Result': {'$ref': '#/definitions/SettingsResults'}},
+                                           'type': 'object'},
+                    'ReadSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                    'Result': {'$ref': '#/definitions/SettingsResults'}},
+                                     'type': 'object'},
+                    'Relation': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                'Result': {'$ref': '#/definitions/RelationResults'}},
+                                 'type': 'object'},
+                    'RelationById': {'properties': {'Params': {'$ref': '#/definitions/RelationIds'},
+                                                    'Result': {'$ref': '#/definitions/RelationResults'}},
+                                     'type': 'object'},
+                    'RemoveStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                                'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                                 'type': 'object'},
+                    'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                'Result': {'$ref': '#/definitions/ResolvedModeResults'}},
+                                 'type': 'object'},
+                    'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+                                 'type': 'object'},
+                    'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'},
+                    'SetApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                             'type': 'object'},
+                    'SetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/EntitiesCharmURL'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                    'type': 'object'},
+                    'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                 'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                  'type': 'object'},
+                    'SetUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+                                                     'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                      'type': 'object'},
+                    'SetWorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/EntityWorkloadVersions'},
+                                                          'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                           'type': 'object'},
+                    'StorageAttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                             'Result': {'$ref': '#/definitions/LifeResults'}},
+                                              'type': 'object'},
+                    'StorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                          'Result': {'$ref': '#/definitions/StorageAttachmentResults'}},
+                                           'type': 'object'},
+                    'UnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                  'Result': {'$ref': '#/definitions/StatusResults'}},
+                                   'type': 'object'},
+                    'UnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                              'Result': {'$ref': '#/definitions/StorageAttachmentIdsResults'}},
+                                               'type': 'object'},
+                    'UpdateSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitsSettings'},
+                                                      'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                       'type': 'object'},
+                    'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                             'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                              'type': 'object'},
+                    'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                          'type': 'object'},
+                    'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                                 'type': 'object'},
+                    'WatchConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                           'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                            'type': 'object'},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'},
+                    'WatchLeadershipSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                               'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                                'type': 'object'},
+                    'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                         'type': 'object'},
+                    'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+                                                          'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}},
+                                           'type': 'object'},
+                    'WatchStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
+                                                               'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                                'type': 'object'},
+                    'WatchUnitAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+                                           'type': 'object'},
+                    'WatchUnitRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                          'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                           'type': 'object'},
+                    'WatchUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                   'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+                                                    'type': 'object'},
+                    'WorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                       'Result': {'$ref': '#/definitions/StringResults'}},
+                                        'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(StringsResult)
+    async def APIAddresses(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='APIAddresses', version=5, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(APIHostPortsResult)
+    async def APIHostPorts(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='BeginActions', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(BytesResult)
+    async def CACert(self):
+        '''
+
+        Returns -> typing.Sequence<+T_co>[int]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ConfigSettings', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelResult)
+    async def CurrentModel(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='CurrentModel', version=5, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='Merge', version=5, params=_params)
+        _params['params'] = params
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
+        '''
+
+        Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ModelConfig', version=5, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def ModelUUID(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ModelUUID', version=5, params=_params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NetworkInfoResults)
+    async def NetworkInfo(self, bindings, unit):
+        '''
+        bindings : typing.Sequence<+T_co>[str]
+        unit : str
+        Returns -> typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='NetworkInfo', version=5, params=_params)
+        _params['bindings'] = bindings
+        _params['unit'] = unit
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def OpenPorts(self, entities):
+        '''
+        entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
+        Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='PrivateAddress', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def ProviderType(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='ProviderType', version=5, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='Resolved', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResult)
+    async def SLALevel(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='SLALevel', version=5, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='Watch', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchAPIHostPorts(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WatchAPIHostPorts', version=5, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WatchConfigSettings', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
+        '''
+
+        Returns -> typing.Union[str, _ForwardRef('Error')]
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WatchForModelConfigChanges', version=5, params=_params)
+
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        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>
+        '''
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Uniter', request='WorkloadVersion', version=5, params=_params)
+        _params['entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
diff --git a/juju/client/_definitions.py b/juju/client/_definitions.py
new file mode 100644 (file)
index 0000000..198784d
--- /dev/null
@@ -0,0 +1,8022 @@
+# 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
+
+
+class APIHostPortsResult(Type):
+    _toSchema = {'servers': 'servers'}
+    _toPy = {'servers': 'servers'}
+    def __init__(self, servers=None, **unknown_fields):
+        '''
+        servers : typing.Sequence<+T_co>[~HostPort]<~HostPort>
+        '''
+        self.servers = [HostPort.from_json(o) for o in servers or []]
+
+
+
+class Action(Type):
+    _toSchema = {'name': 'name', 'parameters': 'parameters', 'receiver': 'receiver', 'tag': 'tag'}
+    _toPy = {'name': 'name', 'parameters': 'parameters', 'receiver': 'receiver', 'tag': 'tag'}
+    def __init__(self, name=None, parameters=None, receiver=None, tag=None, **unknown_fields):
+        '''
+        name : str
+        parameters : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        receiver : str
+        tag : str
+        '''
+        self.name = name
+        self.parameters = parameters
+        self.receiver = receiver
+        self.tag = tag
+
+
+
+class ActionExecutionResult(Type):
+    _toSchema = {'action_tag': 'action-tag', 'message': 'message', 'results': 'results', 'status': 'status'}
+    _toPy = {'action-tag': 'action_tag', 'message': 'message', 'results': 'results', 'status': 'status'}
+    def __init__(self, action_tag=None, message=None, results=None, status=None, **unknown_fields):
+        '''
+        action_tag : str
+        message : str
+        results : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        status : str
+        '''
+        self.action_tag = action_tag
+        self.message = message
+        self.results = results
+        self.status = status
+
+
+
+class ActionExecutionResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
+        '''
+        self.results = [ActionExecutionResult.from_json(o) for o in results or []]
+
+
+
+class ActionResult(Type):
+    _toSchema = {'action': 'action', 'completed': 'completed', 'enqueued': 'enqueued', 'error': 'error', 'message': 'message', 'output': 'output', 'started': 'started', 'status': 'status'}
+    _toPy = {'action': 'action', 'completed': 'completed', 'enqueued': 'enqueued', 'error': 'error', 'message': 'message', 'output': 'output', 'started': 'started', 'status': 'status'}
+    def __init__(self, action=None, completed=None, enqueued=None, error=None, message=None, output=None, started=None, status=None, **unknown_fields):
+        '''
+        action : Action
+        completed : str
+        enqueued : str
+        error : Error
+        message : str
+        output : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        started : str
+        status : str
+        '''
+        self.action = Action.from_json(action) if action else None
+        self.completed = completed
+        self.enqueued = enqueued
+        self.error = Error.from_json(error) if error else None
+        self.message = message
+        self.output = output
+        self.started = started
+        self.status = status
+
+
+
+class ActionResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        '''
+        self.results = [ActionResult.from_json(o) for o in results or []]
+
+
+
+class ActionSpec(Type):
+    _toSchema = {'description': 'description', 'params': 'params'}
+    _toPy = {'description': 'description', 'params': 'params'}
+    def __init__(self, description=None, params=None, **unknown_fields):
+        '''
+        description : str
+        params : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.description = description
+        self.params = params
+
+
+
+class Actions(Type):
+    _toSchema = {'actions': 'actions'}
+    _toPy = {'actions': 'actions'}
+    def __init__(self, actions=None, **unknown_fields):
+        '''
+        actions : typing.Sequence<+T_co>[~Action]<~Action>
+        '''
+        self.actions = [Action.from_json(o) for o in actions or []]
+
+
+
+class ActionsByName(Type):
+    _toSchema = {'actions': 'actions', 'error': 'error', 'name': 'name'}
+    _toPy = {'actions': 'actions', 'error': 'error', 'name': 'name'}
+    def __init__(self, actions=None, error=None, name=None, **unknown_fields):
+        '''
+        actions : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        error : Error
+        name : str
+        '''
+        self.actions = [ActionResult.from_json(o) for o in actions or []]
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+
+
+
+class ActionsByNames(Type):
+    _toSchema = {'actions': 'actions'}
+    _toPy = {'actions': 'actions'}
+    def __init__(self, actions=None, **unknown_fields):
+        '''
+        actions : typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName>
+        '''
+        self.actions = [ActionsByName.from_json(o) for o in actions or []]
+
+
+
+class ActionsByReceiver(Type):
+    _toSchema = {'actions': 'actions', 'error': 'error', 'receiver': 'receiver'}
+    _toPy = {'actions': 'actions', 'error': 'error', 'receiver': 'receiver'}
+    def __init__(self, actions=None, error=None, receiver=None, **unknown_fields):
+        '''
+        actions : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+        error : Error
+        receiver : str
+        '''
+        self.actions = [ActionResult.from_json(o) for o in actions or []]
+        self.error = Error.from_json(error) if error else None
+        self.receiver = receiver
+
+
+
+class ActionsByReceivers(Type):
+    _toSchema = {'actions': 'actions'}
+    _toPy = {'actions': 'actions'}
+    def __init__(self, actions=None, **unknown_fields):
+        '''
+        actions : typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+        '''
+        self.actions = [ActionsByReceiver.from_json(o) for o in actions or []]
+
+
+
+class AddApplicationUnits(Type):
+    _toSchema = {'application': 'application', 'num_units': 'num-units', 'placement': 'placement'}
+    _toPy = {'application': 'application', 'num-units': 'num_units', 'placement': 'placement'}
+    def __init__(self, application=None, num_units=None, placement=None, **unknown_fields):
+        '''
+        application : str
+        num_units : int
+        placement : typing.Sequence<+T_co>[~Placement]<~Placement>
+        '''
+        self.application = application
+        self.num_units = num_units
+        self.placement = [Placement.from_json(o) for o in placement or []]
+
+
+
+class AddApplicationUnitsResults(Type):
+    _toSchema = {'units': 'units'}
+    _toPy = {'units': 'units'}
+    def __init__(self, units=None, **unknown_fields):
+        '''
+        units : typing.Sequence<+T_co>[str]
+        '''
+        self.units = units
+
+
+
+class AddCharm(Type):
+    _toSchema = {'channel': 'channel', 'url': 'url'}
+    _toPy = {'channel': 'channel', 'url': 'url'}
+    def __init__(self, channel=None, url=None, **unknown_fields):
+        '''
+        channel : str
+        url : str
+        '''
+        self.channel = channel
+        self.url = url
+
+
+
+class AddCharmWithAuthorization(Type):
+    _toSchema = {'channel': 'channel', 'macaroon': 'macaroon', 'url': 'url'}
+    _toPy = {'channel': 'channel', 'macaroon': 'macaroon', 'url': 'url'}
+    def __init__(self, channel=None, macaroon=None, url=None, **unknown_fields):
+        '''
+        channel : str
+        macaroon : Macaroon
+        url : str
+        '''
+        self.channel = channel
+        self.macaroon = Macaroon.from_json(macaroon) if macaroon else None
+        self.url = url
+
+
+
+class 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>
+        constraints : Value
+        container_type : str
+        disks : typing.Sequence<+T_co>[~Constraints]<~Constraints>
+        hardware_characteristics : HardwareCharacteristics
+        instance_id : str
+        jobs : typing.Sequence<+T_co>[str]
+        nonce : str
+        parent_id : str
+        placement : Placement
+        series : str
+        '''
+        self.addresses = [Address.from_json(o) for o in addresses or []]
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.container_type = container_type
+        self.disks = [Constraints.from_json(o) for o in disks or []]
+        self.hardware_characteristics = HardwareCharacteristics.from_json(hardware_characteristics) if hardware_characteristics else None
+        self.instance_id = instance_id
+        self.jobs = jobs
+        self.nonce = nonce
+        self.parent_id = parent_id
+        self.placement = Placement.from_json(placement) if placement else None
+        self.series = series
+
+
+
+class AddMachines(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
+        '''
+        self.params = [AddMachineParams.from_json(o) for o in params or []]
+
+
+
+class AddMachinesResult(Type):
+    _toSchema = {'error': 'error', 'machine': 'machine'}
+    _toPy = {'error': 'error', 'machine': 'machine'}
+    def __init__(self, error=None, machine=None, **unknown_fields):
+        '''
+        error : Error
+        machine : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.machine = machine
+
+
+
+class AddMachinesResults(Type):
+    _toSchema = {'machines': 'machines'}
+    _toPy = {'machines': 'machines'}
+    def __init__(self, machines=None, **unknown_fields):
+        '''
+        machines : typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+        '''
+        self.machines = [AddMachinesResult.from_json(o) for o in machines or []]
+
+
+
+class AddPendingResourcesArgs(Type):
+    _toSchema = {'addcharmwithauthorization': 'AddCharmWithAuthorization', 'entity': 'Entity', 'resources': 'Resources'}
+    _toPy = {'AddCharmWithAuthorization': 'addcharmwithauthorization', 'Entity': 'entity', 'Resources': 'resources'}
+    def __init__(self, addcharmwithauthorization=None, entity=None, resources=None, **unknown_fields):
+        '''
+        addcharmwithauthorization : AddCharmWithAuthorization
+        entity : Entity
+        resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
+        '''
+        self.addcharmwithauthorization = AddCharmWithAuthorization.from_json(addcharmwithauthorization) if addcharmwithauthorization else None
+        self.entity = Entity.from_json(entity) if entity else None
+        self.resources = [CharmResource.from_json(o) for o in resources or []]
+
+
+
+class AddPendingResourcesResult(Type):
+    _toSchema = {'errorresult': 'ErrorResult', 'pending_ids': 'pending-ids'}
+    _toPy = {'ErrorResult': 'errorresult', 'pending-ids': 'pending_ids'}
+    def __init__(self, errorresult=None, pending_ids=None, **unknown_fields):
+        '''
+        errorresult : ErrorResult
+        pending_ids : typing.Sequence<+T_co>[str]
+        '''
+        self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
+        self.pending_ids = pending_ids
+
+
+
+class AddRelation(Type):
+    _toSchema = {'endpoints': 'endpoints'}
+    _toPy = {'endpoints': 'endpoints'}
+    def __init__(self, endpoints=None, **unknown_fields):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        '''
+        self.endpoints = endpoints
+
+
+
+class AddRelationResults(Type):
+    _toSchema = {'endpoints': 'endpoints'}
+    _toPy = {'endpoints': 'endpoints'}
+    def __init__(self, endpoints=None, **unknown_fields):
+        '''
+        endpoints : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+        '''
+        self.endpoints = endpoints
+
+
+
+class AddSubnetParams(Type):
+    _toSchema = {'space_tag': 'space-tag', 'subnet_provider_id': 'subnet-provider-id', 'subnet_tag': 'subnet-tag', 'zones': 'zones'}
+    _toPy = {'space-tag': 'space_tag', 'subnet-provider-id': 'subnet_provider_id', 'subnet-tag': 'subnet_tag', 'zones': 'zones'}
+    def __init__(self, space_tag=None, subnet_provider_id=None, subnet_tag=None, zones=None, **unknown_fields):
+        '''
+        space_tag : str
+        subnet_provider_id : str
+        subnet_tag : str
+        zones : typing.Sequence<+T_co>[str]
+        '''
+        self.space_tag = space_tag
+        self.subnet_provider_id = subnet_provider_id
+        self.subnet_tag = subnet_tag
+        self.zones = zones
+
+
+
+class AddSubnetsParams(Type):
+    _toSchema = {'subnets': 'subnets'}
+    _toPy = {'subnets': 'subnets'}
+    def __init__(self, subnets=None, **unknown_fields):
+        '''
+        subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
+        '''
+        self.subnets = [AddSubnetParams.from_json(o) for o in subnets or []]
+
+
+
+class AddUser(Type):
+    _toSchema = {'display_name': 'display-name', 'password': 'password', 'username': 'username'}
+    _toPy = {'display-name': 'display_name', 'password': 'password', 'username': 'username'}
+    def __init__(self, display_name=None, password=None, username=None, **unknown_fields):
+        '''
+        display_name : str
+        password : str
+        username : str
+        '''
+        self.display_name = display_name
+        self.password = password
+        self.username = username
+
+
+
+class AddUserResult(Type):
+    _toSchema = {'error': 'error', 'secret_key': 'secret-key', 'tag': 'tag'}
+    _toPy = {'error': 'error', 'secret-key': 'secret_key', 'tag': 'tag'}
+    def __init__(self, error=None, secret_key=None, tag=None, **unknown_fields):
+        '''
+        error : Error
+        secret_key : typing.Sequence<+T_co>[int]
+        tag : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.secret_key = secret_key
+        self.tag = tag
+
+
+
+class AddUserResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult>
+        '''
+        self.results = [AddUserResult.from_json(o) for o in results or []]
+
+
+
+class AddUsers(Type):
+    _toSchema = {'users': 'users'}
+    _toPy = {'users': 'users'}
+    def __init__(self, users=None, **unknown_fields):
+        '''
+        users : typing.Sequence<+T_co>[~AddUser]<~AddUser>
+        '''
+        self.users = [AddUser.from_json(o) for o in users or []]
+
+
+
+class Address(Type):
+    _toSchema = {'scope': 'scope', 'space_name': 'space-name', 'type_': 'type', 'value': 'value'}
+    _toPy = {'scope': 'scope', 'space-name': 'space_name', 'type': 'type_', 'value': 'value'}
+    def __init__(self, scope=None, space_name=None, type_=None, value=None, **unknown_fields):
+        '''
+        scope : str
+        space_name : str
+        type_ : str
+        value : str
+        '''
+        self.scope = scope
+        self.space_name = space_name
+        self.type_ = type_
+        self.value = value
+
+
+
+class AdoptResourcesArgs(Type):
+    _toSchema = {'model_tag': 'model-tag', 'source_controller_version': 'source-controller-version'}
+    _toPy = {'model-tag': 'model_tag', 'source-controller-version': 'source_controller_version'}
+    def __init__(self, model_tag=None, source_controller_version=None, **unknown_fields):
+        '''
+        model_tag : str
+        source_controller_version : Number
+        '''
+        self.model_tag = model_tag
+        self.source_controller_version = Number.from_json(source_controller_version) if source_controller_version else None
+
+
+
+class AgentGetEntitiesResult(Type):
+    _toSchema = {'container_type': 'container-type', 'error': 'error', 'jobs': 'jobs', 'life': 'life'}
+    _toPy = {'container-type': 'container_type', 'error': 'error', 'jobs': 'jobs', 'life': 'life'}
+    def __init__(self, container_type=None, error=None, jobs=None, life=None, **unknown_fields):
+        '''
+        container_type : str
+        error : Error
+        jobs : typing.Sequence<+T_co>[str]
+        life : str
+        '''
+        self.container_type = container_type
+        self.error = Error.from_json(error) if error else None
+        self.jobs = jobs
+        self.life = life
+
+
+
+class AgentGetEntitiesResults(Type):
+    _toSchema = {'entities': 'entities'}
+    _toPy = {'entities': 'entities'}
+    def __init__(self, entities=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult>
+        '''
+        self.entities = [AgentGetEntitiesResult.from_json(o) for o in entities or []]
+
+
+
+class AgentVersionResult(Type):
+    _toSchema = {'version': 'version'}
+    _toPy = {'version': 'version'}
+    def __init__(self, version=None, **unknown_fields):
+        '''
+        version : Number
+        '''
+        self.version = Number.from_json(version) if version else None
+
+
+
+class AllWatcherId(Type):
+    _toSchema = {'watcher_id': 'watcher-id'}
+    _toPy = {'watcher-id': 'watcher_id'}
+    def __init__(self, watcher_id=None, **unknown_fields):
+        '''
+        watcher_id : str
+        '''
+        self.watcher_id = watcher_id
+
+
+
+class AllWatcherNextResults(Type):
+    _toSchema = {'deltas': 'deltas'}
+    _toPy = {'deltas': 'deltas'}
+    def __init__(self, deltas=None, **unknown_fields):
+        '''
+        deltas : typing.Sequence<+T_co>[~Delta]<~Delta>
+        '''
+        self.deltas = [Delta.from_json(o) for o in deltas or []]
+
+
+
+class AnnotationsGetResult(Type):
+    _toSchema = {'annotations': 'annotations', 'entity': 'entity', 'error': 'error'}
+    _toPy = {'annotations': 'annotations', 'entity': 'entity', 'error': 'error'}
+    def __init__(self, annotations=None, entity=None, error=None, **unknown_fields):
+        '''
+        annotations : typing.Mapping<~KT, +VT_co>[str, str]
+        entity : str
+        error : ErrorResult
+        '''
+        self.annotations = annotations
+        self.entity = entity
+        self.error = ErrorResult.from_json(error) if error else None
+
+
+
+class AnnotationsGetResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult>
+        '''
+        self.results = [AnnotationsGetResult.from_json(o) for o in results or []]
+
+
+
+class AnnotationsSet(Type):
+    _toSchema = {'annotations': 'annotations'}
+    _toPy = {'annotations': 'annotations'}
+    def __init__(self, annotations=None, **unknown_fields):
+        '''
+        annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations>
+        '''
+        self.annotations = [EntityAnnotations.from_json(o) for o in annotations or []]
+
+
+
+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>
+        application_tag : str
+        error : Error
+        '''
+        self.actions = actions
+        self.application_tag = application_tag
+        self.error = Error.from_json(error) if error else None
+
+
+
+class ApplicationCharmRelations(Type):
+    _toSchema = {'application': 'application'}
+    _toPy = {'application': 'application'}
+    def __init__(self, application=None, **unknown_fields):
+        '''
+        application : str
+        '''
+        self.application = application
+
+
+
+class ApplicationCharmRelationsResults(Type):
+    _toSchema = {'charm_relations': 'charm-relations'}
+    _toPy = {'charm-relations': 'charm_relations'}
+    def __init__(self, charm_relations=None, **unknown_fields):
+        '''
+        charm_relations : typing.Sequence<+T_co>[str]
+        '''
+        self.charm_relations = charm_relations
+
+
+
+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):
+        '''
+        application : str
+        channel : str
+        charm_url : str
+        config : typing.Mapping<~KT, +VT_co>[str, str]
+        config_yaml : str
+        constraints : Value
+        endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str]
+        num_units : int
+        placement : typing.Sequence<+T_co>[~Placement]<~Placement>
+        resources : typing.Mapping<~KT, +VT_co>[str, str]
+        series : str
+        storage : typing.Mapping<~KT, +VT_co>[str, ~Constraints]<~Constraints>
+        '''
+        self.application = application
+        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.endpoint_bindings = endpoint_bindings
+        self.num_units = num_units
+        self.placement = [Placement.from_json(o) for o in placement or []]
+        self.resources = resources
+        self.series = series
+        self.storage = storage
+
+
+
+class ApplicationDestroy(Type):
+    _toSchema = {'application': 'application'}
+    _toPy = {'application': 'application'}
+    def __init__(self, application=None, **unknown_fields):
+        '''
+        application : str
+        '''
+        self.application = application
+
+
+
+class ApplicationExpose(Type):
+    _toSchema = {'application': 'application'}
+    _toPy = {'application': 'application'}
+    def __init__(self, application=None, **unknown_fields):
+        '''
+        application : str
+        '''
+        self.application = application
+
+
+
+class ApplicationGet(Type):
+    _toSchema = {'application': 'application'}
+    _toPy = {'application': 'application'}
+    def __init__(self, application=None, **unknown_fields):
+        '''
+        application : str
+        '''
+        self.application = application
+
+
+
+class ApplicationGetResults(Type):
+    _toSchema = {'application': 'application', 'charm': 'charm', 'config': 'config', 'constraints': 'constraints', 'series': 'series'}
+    _toPy = {'application': 'application', 'charm': 'charm', 'config': 'config', 'constraints': 'constraints', 'series': 'series'}
+    def __init__(self, application=None, charm=None, config=None, constraints=None, series=None, **unknown_fields):
+        '''
+        application : str
+        charm : str
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        constraints : Value
+        series : str
+        '''
+        self.application = application
+        self.charm = charm
+        self.config = config
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.series = series
+
+
+
+class ApplicationMetricCredential(Type):
+    _toSchema = {'application': 'application', 'metrics_credentials': 'metrics-credentials'}
+    _toPy = {'application': 'application', 'metrics-credentials': 'metrics_credentials'}
+    def __init__(self, application=None, metrics_credentials=None, **unknown_fields):
+        '''
+        application : str
+        metrics_credentials : typing.Sequence<+T_co>[int]
+        '''
+        self.application = application
+        self.metrics_credentials = metrics_credentials
+
+
+
+class ApplicationMetricCredentials(Type):
+    _toSchema = {'creds': 'creds'}
+    _toPy = {'creds': 'creds'}
+    def __init__(self, creds=None, **unknown_fields):
+        '''
+        creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
+        '''
+        self.creds = [ApplicationMetricCredential.from_json(o) for o in creds or []]
+
+
+
+class ApplicationOffer(Type):
+    _toSchema = {'access': 'access', 'application_description': 'application-description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer_name': 'offer-name', 'offer_url': 'offer-url', 'source_model_tag': 'source-model-tag', 'spaces': 'spaces'}
+    _toPy = {'access': 'access', 'application-description': 'application_description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer-name': 'offer_name', 'offer-url': 'offer_url', 'source-model-tag': 'source_model_tag', 'spaces': 'spaces'}
+    def __init__(self, access=None, application_description=None, bindings=None, endpoints=None, offer_name=None, offer_url=None, source_model_tag=None, spaces=None, **unknown_fields):
+        '''
+        access : str
+        application_description : str
+        bindings : typing.Mapping<~KT, +VT_co>[str, str]
+        endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
+        offer_name : str
+        offer_url : str
+        source_model_tag : str
+        spaces : typing.Sequence<+T_co>[~RemoteSpace]<~RemoteSpace>
+        '''
+        self.access = access
+        self.application_description = application_description
+        self.bindings = bindings
+        self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []]
+        self.offer_name = offer_name
+        self.offer_url = offer_url
+        self.source_model_tag = source_model_tag
+        self.spaces = [RemoteSpace.from_json(o) for o in spaces or []]
+
+
+
+class 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]
+        '''
+        self.changed = [RelationChange.from_json(o) for o in changed or []]
+        self.removed = removed
+
+
+
+class ApplicationRelationsWatchResult(Type):
+    _toSchema = {'applicationrelationswatcherid': 'ApplicationRelationsWatcherId', 'changes': 'changes', 'error': 'error'}
+    _toPy = {'ApplicationRelationsWatcherId': 'applicationrelationswatcherid', 'changes': 'changes', 'error': 'error'}
+    def __init__(self, applicationrelationswatcherid=None, changes=None, error=None, **unknown_fields):
+        '''
+        applicationrelationswatcherid : str
+        changes : ApplicationRelationsChange
+        error : Error
+        '''
+        self.applicationrelationswatcherid = applicationrelationswatcherid
+        self.changes = ApplicationRelationsChange.from_json(changes) if changes else None
+        self.error = Error.from_json(error) if error else None
+
+
+
+class ApplicationSet(Type):
+    _toSchema = {'application': 'application', 'options': 'options'}
+    _toPy = {'application': 'application', 'options': 'options'}
+    def __init__(self, application=None, options=None, **unknown_fields):
+        '''
+        application : str
+        options : typing.Mapping<~KT, +VT_co>[str, str]
+        '''
+        self.application = application
+        self.options = options
+
+
+
+class ApplicationSetCharm(Type):
+    _toSchema = {'application': 'application', 'channel': 'channel', 'charm_url': 'charm-url', 'config_settings': 'config-settings', 'config_settings_yaml': 'config-settings-yaml', 'force_series': 'force-series', 'force_units': 'force-units', 'resource_ids': 'resource-ids', 'storage_constraints': 'storage-constraints'}
+    _toPy = {'application': 'application', 'channel': 'channel', 'charm-url': 'charm_url', 'config-settings': 'config_settings', 'config-settings-yaml': 'config_settings_yaml', 'force-series': 'force_series', 'force-units': 'force_units', 'resource-ids': 'resource_ids', 'storage-constraints': 'storage_constraints'}
+    def __init__(self, application=None, channel=None, charm_url=None, config_settings=None, config_settings_yaml=None, force_series=None, force_units=None, resource_ids=None, storage_constraints=None, **unknown_fields):
+        '''
+        application : str
+        channel : str
+        charm_url : str
+        config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+        config_settings_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>
+        '''
+        self.application = application
+        self.channel = channel
+        self.charm_url = charm_url
+        self.config_settings = config_settings
+        self.config_settings_yaml = config_settings_yaml
+        self.force_series = force_series
+        self.force_units = force_units
+        self.resource_ids = resource_ids
+        self.storage_constraints = storage_constraints
+
+
+
+class ApplicationStatus(Type):
+    _toSchema = {'can_upgrade_to': 'can-upgrade-to', 'charm': 'charm', 'err': 'err', 'exposed': 'exposed', 'life': 'life', 'meter_statuses': 'meter-statuses', 'relations': 'relations', 'series': 'series', 'status': 'status', 'subordinate_to': 'subordinate-to', 'units': 'units', 'workload_version': 'workload-version'}
+    _toPy = {'can-upgrade-to': 'can_upgrade_to', 'charm': 'charm', 'err': 'err', 'exposed': 'exposed', 'life': 'life', 'meter-statuses': 'meter_statuses', 'relations': 'relations', 'series': 'series', 'status': 'status', 'subordinate-to': 'subordinate_to', 'units': 'units', 'workload-version': 'workload_version'}
+    def __init__(self, can_upgrade_to=None, charm=None, err=None, exposed=None, life=None, meter_statuses=None, relations=None, series=None, status=None, subordinate_to=None, units=None, workload_version=None, **unknown_fields):
+        '''
+        can_upgrade_to : str
+        charm : str
+        err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        exposed : bool
+        life : str
+        meter_statuses : typing.Mapping<~KT, +VT_co>[str, ~MeterStatus]<~MeterStatus>
+        relations : typing.Sequence<+T_co>[str]
+        series : str
+        status : DetailedStatus
+        subordinate_to : typing.Sequence<+T_co>[str]
+        units : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus>
+        workload_version : str
+        '''
+        self.can_upgrade_to = can_upgrade_to
+        self.charm = charm
+        self.err = err
+        self.exposed = exposed
+        self.life = life
+        self.meter_statuses = meter_statuses
+        self.relations = relations
+        self.series = series
+        self.status = DetailedStatus.from_json(status) if status else None
+        self.subordinate_to = subordinate_to
+        self.units = units
+        self.workload_version = workload_version
+
+
+
+class ApplicationStatusResult(Type):
+    _toSchema = {'application': 'application', 'error': 'error', 'units': 'units'}
+    _toPy = {'application': 'application', 'error': 'error', 'units': 'units'}
+    def __init__(self, application=None, error=None, units=None, **unknown_fields):
+        '''
+        application : StatusResult
+        error : Error
+        units : typing.Mapping<~KT, +VT_co>[str, ~StatusResult]<~StatusResult>
+        '''
+        self.application = StatusResult.from_json(application) if application else None
+        self.error = Error.from_json(error) if error else None
+        self.units = units
+
+
+
+class ApplicationStatusResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
+        '''
+        self.results = [ApplicationStatusResult.from_json(o) for o in results or []]
+
+
+
+class ApplicationTag(Type):
+    _toSchema = {'name': 'Name'}
+    _toPy = {'Name': 'name'}
+    def __init__(self, name=None, **unknown_fields):
+        '''
+        name : str
+        '''
+        self.name = name
+
+
+
+class ApplicationURLs(Type):
+    _toSchema = {'application_urls': 'application-urls'}
+    _toPy = {'application-urls': 'application_urls'}
+    def __init__(self, application_urls=None, **unknown_fields):
+        '''
+        application_urls : typing.Sequence<+T_co>[str]
+        '''
+        self.application_urls = application_urls
+
+
+
+class ApplicationUnexpose(Type):
+    _toSchema = {'application': 'application'}
+    _toPy = {'application': 'application'}
+    def __init__(self, application=None, **unknown_fields):
+        '''
+        application : str
+        '''
+        self.application = application
+
+
+
+class 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]
+        '''
+        self.application = application
+        self.options = options
+
+
+
+class ApplicationUpdate(Type):
+    _toSchema = {'application': 'application', 'charm_url': 'charm-url', 'constraints': 'constraints', 'force_charm_url': 'force-charm-url', 'force_series': 'force-series', 'min_units': 'min-units', 'settings': 'settings', 'settings_yaml': 'settings-yaml'}
+    _toPy = {'application': 'application', 'charm-url': 'charm_url', 'constraints': 'constraints', 'force-charm-url': 'force_charm_url', 'force-series': 'force_series', 'min-units': 'min_units', 'settings': 'settings', 'settings-yaml': 'settings_yaml'}
+    def __init__(self, application=None, charm_url=None, constraints=None, force_charm_url=None, force_series=None, min_units=None, settings=None, settings_yaml=None, **unknown_fields):
+        '''
+        application : str
+        charm_url : str
+        constraints : Value
+        force_charm_url : bool
+        force_series : bool
+        min_units : int
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        settings_yaml : str
+        '''
+        self.application = application
+        self.charm_url = charm_url
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.force_charm_url = force_charm_url
+        self.force_series = force_series
+        self.min_units = min_units
+        self.settings = settings
+        self.settings_yaml = settings_yaml
+
+
+
+class ApplicationsCharmActionsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult>
+        '''
+        self.results = [ApplicationCharmActionsResult.from_json(o) for o in results or []]
+
+
+
+class ApplicationsDeploy(Type):
+    _toSchema = {'applications': 'applications'}
+    _toPy = {'applications': 'applications'}
+    def __init__(self, applications=None, **unknown_fields):
+        '''
+        applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
+        '''
+        self.applications = [ApplicationDeploy.from_json(o) for o in applications or []]
+
+
+
+class BackupsCreateArgs(Type):
+    _toSchema = {'notes': 'notes'}
+    _toPy = {'notes': 'notes'}
+    def __init__(self, notes=None, **unknown_fields):
+        '''
+        notes : str
+        '''
+        self.notes = notes
+
+
+
+class BackupsInfoArgs(Type):
+    _toSchema = {'id_': 'id'}
+    _toPy = {'id': 'id_'}
+    def __init__(self, id_=None, **unknown_fields):
+        '''
+        id_ : str
+        '''
+        self.id_ = id_
+
+
+
+class BackupsListArgs(Type):
+    _toSchema = {}
+    _toPy = {}
+    def __init__(self, **unknown_fields):
+        '''
+
+        '''
+        pass
+
+
+
+class BackupsListResult(Type):
+    _toSchema = {'list_': 'list'}
+    _toPy = {'list': 'list_'}
+    def __init__(self, list_=None, **unknown_fields):
+        '''
+        list_ : typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult>
+        '''
+        self.list_ = [BackupsMetadataResult.from_json(o) for o in list_ or []]
+
+
+
+class BackupsMetadataResult(Type):
+    _toSchema = {'ca_cert': 'ca-cert', 'ca_private_key': 'ca-private-key', 'checksum': 'checksum', 'checksum_format': 'checksum-format', 'finished': 'finished', 'hostname': 'hostname', 'id_': 'id', 'machine': 'machine', 'model': 'model', 'notes': 'notes', 'series': 'series', 'size': 'size', 'started': 'started', 'stored': 'stored', 'version': 'version'}
+    _toPy = {'ca-cert': 'ca_cert', 'ca-private-key': 'ca_private_key', 'checksum': 'checksum', 'checksum-format': 'checksum_format', 'finished': 'finished', 'hostname': 'hostname', 'id': 'id_', 'machine': 'machine', 'model': 'model', 'notes': 'notes', 'series': 'series', 'size': 'size', 'started': 'started', 'stored': 'stored', 'version': 'version'}
+    def __init__(self, ca_cert=None, ca_private_key=None, checksum=None, checksum_format=None, finished=None, hostname=None, id_=None, machine=None, model=None, notes=None, series=None, size=None, started=None, stored=None, version=None, **unknown_fields):
+        '''
+        ca_cert : str
+        ca_private_key : str
+        checksum : str
+        checksum_format : str
+        finished : str
+        hostname : str
+        id_ : str
+        machine : str
+        model : str
+        notes : str
+        series : str
+        size : int
+        started : str
+        stored : str
+        version : Number
+        '''
+        self.ca_cert = ca_cert
+        self.ca_private_key = ca_private_key
+        self.checksum = checksum
+        self.checksum_format = checksum_format
+        self.finished = finished
+        self.hostname = hostname
+        self.id_ = id_
+        self.machine = machine
+        self.model = model
+        self.notes = notes
+        self.series = series
+        self.size = size
+        self.started = started
+        self.stored = stored
+        self.version = Number.from_json(version) if version else None
+
+
+
+class BackupsRemoveArgs(Type):
+    _toSchema = {'id_': 'id'}
+    _toPy = {'id': 'id_'}
+    def __init__(self, id_=None, **unknown_fields):
+        '''
+        id_ : str
+        '''
+        self.id_ = id_
+
+
+
+class Binary(Type):
+    _toSchema = {'arch': 'Arch', 'number': 'Number', 'series': 'Series'}
+    _toPy = {'Arch': 'arch', 'Number': 'number', 'Series': 'series'}
+    def __init__(self, arch=None, number=None, series=None, **unknown_fields):
+        '''
+        arch : str
+        number : Number
+        series : str
+        '''
+        self.arch = arch
+        self.number = Number.from_json(number) if number else None
+        self.series = series
+
+
+
+class Block(Type):
+    _toSchema = {'id_': 'id', 'message': 'message', 'tag': 'tag', 'type_': 'type'}
+    _toPy = {'id': 'id_', 'message': 'message', 'tag': 'tag', 'type': 'type_'}
+    def __init__(self, id_=None, message=None, tag=None, type_=None, **unknown_fields):
+        '''
+        id_ : str
+        message : str
+        tag : str
+        type_ : str
+        '''
+        self.id_ = id_
+        self.message = message
+        self.tag = tag
+        self.type_ = type_
+
+
+
+class BlockDevice(Type):
+    _toSchema = {'busaddress': 'BusAddress', 'devicelinks': 'DeviceLinks', 'devicename': 'DeviceName', 'filesystemtype': 'FilesystemType', 'hardwareid': 'HardwareId', 'inuse': 'InUse', 'label': 'Label', 'mountpoint': 'MountPoint', 'size': 'Size', 'uuid': 'UUID'}
+    _toPy = {'BusAddress': 'busaddress', 'DeviceLinks': 'devicelinks', 'DeviceName': 'devicename', 'FilesystemType': 'filesystemtype', 'HardwareId': 'hardwareid', 'InUse': 'inuse', 'Label': 'label', 'MountPoint': 'mountpoint', 'Size': 'size', 'UUID': 'uuid'}
+    def __init__(self, busaddress=None, devicelinks=None, devicename=None, filesystemtype=None, hardwareid=None, inuse=None, label=None, mountpoint=None, size=None, uuid=None, **unknown_fields):
+        '''
+        busaddress : str
+        devicelinks : typing.Sequence<+T_co>[str]
+        devicename : str
+        filesystemtype : str
+        hardwareid : str
+        inuse : bool
+        label : str
+        mountpoint : str
+        size : int
+        uuid : str
+        '''
+        self.busaddress = busaddress
+        self.devicelinks = devicelinks
+        self.devicename = devicename
+        self.filesystemtype = filesystemtype
+        self.hardwareid = hardwareid
+        self.inuse = inuse
+        self.label = label
+        self.mountpoint = mountpoint
+        self.size = size
+        self.uuid = uuid
+
+
+
+class BlockDeviceResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : BlockDevice
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = BlockDevice.from_json(result) if result else None
+
+
+
+class BlockDeviceResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult>
+        '''
+        self.results = [BlockDeviceResult.from_json(o) for o in results or []]
+
+
+
+class BlockResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : Block
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = Block.from_json(result) if result else None
+
+
+
+class BlockResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~BlockResult]<~BlockResult>
+        '''
+        self.results = [BlockResult.from_json(o) for o in results or []]
+
+
+
+class BlockSwitchParams(Type):
+    _toSchema = {'message': 'message', 'type_': 'type'}
+    _toPy = {'message': 'message', 'type': 'type_'}
+    def __init__(self, message=None, type_=None, **unknown_fields):
+        '''
+        message : str
+        type_ : str
+        '''
+        self.message = message
+        self.type_ = type_
+
+
+
+class BoolResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : bool
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class BoolResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+        '''
+        self.results = [BoolResult.from_json(o) for o in results 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]
+        id_ : str
+        method : str
+        requires : typing.Sequence<+T_co>[str]
+        '''
+        self.args = args
+        self.id_ = id_
+        self.method = method
+        self.requires = requires
+
+
+
+class BundleChangesParams(Type):
+    _toSchema = {'yaml': 'yaml'}
+    _toPy = {'yaml': 'yaml'}
+    def __init__(self, yaml=None, **unknown_fields):
+        '''
+        yaml : str
+        '''
+        self.yaml = yaml
+
+
+
+class BundleChangesResults(Type):
+    _toSchema = {'changes': 'changes', 'errors': 'errors'}
+    _toPy = {'changes': 'changes', 'errors': 'errors'}
+    def __init__(self, changes=None, errors=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
+        errors : typing.Sequence<+T_co>[str]
+        '''
+        self.changes = [BundleChange.from_json(o) for o in changes or []]
+        self.errors = errors
+
+
+
+class BytesResult(Type):
+    _toSchema = {'result': 'result'}
+    _toPy = {'result': 'result'}
+    def __init__(self, result=None, **unknown_fields):
+        '''
+        result : typing.Sequence<+T_co>[int]
+        '''
+        self.result = result
+
+
+
+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]
+        '''
+        self.description = description
+        self.params = params
+
+
+
+class CharmActions(Type):
+    _toSchema = {'specs': 'specs'}
+    _toPy = {'specs': 'specs'}
+    def __init__(self, specs=None, **unknown_fields):
+        '''
+        specs : typing.Mapping<~KT, +VT_co>[str, ~CharmActionSpec]<~CharmActionSpec>
+        '''
+        self.specs = specs
+
+
+
+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>
+        meta : CharmMeta
+        metrics : CharmMetrics
+        revision : int
+        url : str
+        '''
+        self.actions = CharmActions.from_json(actions) if actions else None
+        self.config = config
+        self.meta = CharmMeta.from_json(meta) if meta else None
+        self.metrics = CharmMetrics.from_json(metrics) if metrics else None
+        self.revision = revision
+        self.url = url
+
+
+
+class 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]
+        description : str
+        extra_bindings : typing.Mapping<~KT, +VT_co>[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>
+        subordinate : bool
+        summary : str
+        tags : typing.Sequence<+T_co>[str]
+        terms : typing.Sequence<+T_co>[str]
+        '''
+        self.categories = categories
+        self.description = description
+        self.extra_bindings = extra_bindings
+        self.min_juju_version = min_juju_version
+        self.name = name
+        self.payload_classes = payload_classes
+        self.peers = peers
+        self.provides = provides
+        self.requires = requires
+        self.resources = resources
+        self.series = series
+        self.storage = storage
+        self.subordinate = subordinate
+        self.summary = summary
+        self.tags = tags
+        self.terms = terms
+
+
+
+class CharmMetric(Type):
+    _toSchema = {'description': 'description', 'type_': 'type'}
+    _toPy = {'description': 'description', 'type': 'type_'}
+    def __init__(self, description=None, type_=None, **unknown_fields):
+        '''
+        description : str
+        type_ : str
+        '''
+        self.description = description
+        self.type_ = type_
+
+
+
+class CharmMetrics(Type):
+    _toSchema = {'metrics': 'metrics', 'plan': 'plan'}
+    _toPy = {'metrics': 'metrics', 'plan': 'plan'}
+    def __init__(self, metrics=None, plan=None, **unknown_fields):
+        '''
+        metrics : typing.Mapping<~KT, +VT_co>[str, ~CharmMetric]<~CharmMetric>
+        plan : CharmPlan
+        '''
+        self.metrics = metrics
+        self.plan = CharmPlan.from_json(plan) if plan else None
+
+
+
+class CharmOption(Type):
+    _toSchema = {'default': 'default', 'description': 'description', 'type_': 'type'}
+    _toPy = {'default': 'default', 'description': 'description', 'type': 'type_'}
+    def __init__(self, default=None, description=None, type_=None, **unknown_fields):
+        '''
+        default : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        description : str
+        type_ : str
+        '''
+        self.default = default
+        self.description = description
+        self.type_ = type_
+
+
+
+class CharmPayloadClass(Type):
+    _toSchema = {'name': 'name', 'type_': 'type'}
+    _toPy = {'name': 'name', 'type': 'type_'}
+    def __init__(self, name=None, type_=None, **unknown_fields):
+        '''
+        name : str
+        type_ : str
+        '''
+        self.name = name
+        self.type_ = type_
+
+
+
+class CharmPlan(Type):
+    _toSchema = {'required': 'required'}
+    _toPy = {'required': 'required'}
+    def __init__(self, required=None, **unknown_fields):
+        '''
+        required : bool
+        '''
+        self.required = required
+
+
+
+class CharmRelation(Type):
+    _toSchema = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'optional': 'optional', 'role': 'role', 'scope': 'scope'}
+    _toPy = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'optional': 'optional', 'role': 'role', 'scope': 'scope'}
+    def __init__(self, interface=None, limit=None, name=None, optional=None, role=None, scope=None, **unknown_fields):
+        '''
+        interface : str
+        limit : int
+        name : str
+        optional : bool
+        role : str
+        scope : str
+        '''
+        self.interface = interface
+        self.limit = limit
+        self.name = name
+        self.optional = optional
+        self.role = role
+        self.scope = scope
+
+
+
+class CharmResource(Type):
+    _toSchema = {'description': 'description', 'fingerprint': 'fingerprint', 'name': 'name', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'type_': 'type'}
+    _toPy = {'description': 'description', 'fingerprint': 'fingerprint', 'name': 'name', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'type': 'type_'}
+    def __init__(self, description=None, fingerprint=None, name=None, origin=None, path=None, revision=None, size=None, type_=None, **unknown_fields):
+        '''
+        description : str
+        fingerprint : typing.Sequence<+T_co>[int]
+        name : str
+        origin : str
+        path : str
+        revision : int
+        size : int
+        type_ : str
+        '''
+        self.description = description
+        self.fingerprint = fingerprint
+        self.name = name
+        self.origin = origin
+        self.path = path
+        self.revision = revision
+        self.size = size
+        self.type_ = type_
+
+
+
+class CharmResourceMeta(Type):
+    _toSchema = {'description': 'description', 'name': 'name', 'path': 'path', 'type_': 'type'}
+    _toPy = {'description': 'description', 'name': 'name', 'path': 'path', 'type': 'type_'}
+    def __init__(self, description=None, name=None, path=None, type_=None, **unknown_fields):
+        '''
+        description : str
+        name : str
+        path : str
+        type_ : str
+        '''
+        self.description = description
+        self.name = name
+        self.path = path
+        self.type_ = type_
+
+
+
+class CharmStorage(Type):
+    _toSchema = {'count_max': 'count-max', 'count_min': 'count-min', 'description': 'description', 'location': 'location', 'minimum_size': 'minimum-size', 'name': 'name', 'properties': 'properties', 'read_only': 'read-only', 'shared': 'shared', 'type_': 'type'}
+    _toPy = {'count-max': 'count_max', 'count-min': 'count_min', 'description': 'description', 'location': 'location', 'minimum-size': 'minimum_size', 'name': 'name', 'properties': 'properties', 'read-only': 'read_only', 'shared': 'shared', 'type': 'type_'}
+    def __init__(self, count_max=None, count_min=None, description=None, location=None, minimum_size=None, name=None, properties=None, read_only=None, shared=None, type_=None, **unknown_fields):
+        '''
+        count_max : int
+        count_min : int
+        description : str
+        location : str
+        minimum_size : int
+        name : str
+        properties : typing.Sequence<+T_co>[str]
+        read_only : bool
+        shared : bool
+        type_ : str
+        '''
+        self.count_max = count_max
+        self.count_min = count_min
+        self.description = description
+        self.location = location
+        self.minimum_size = minimum_size
+        self.name = name
+        self.properties = properties
+        self.read_only = read_only
+        self.shared = shared
+        self.type_ = type_
+
+
+
+class CharmURL(Type):
+    _toSchema = {'url': 'url'}
+    _toPy = {'url': 'url'}
+    def __init__(self, url=None, **unknown_fields):
+        '''
+        url : str
+        '''
+        self.url = url
+
+
+
+class CharmURLs(Type):
+    _toSchema = {'urls': 'urls'}
+    _toPy = {'urls': 'urls'}
+    def __init__(self, urls=None, **unknown_fields):
+        '''
+        urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
+        '''
+        self.urls = [CharmURL.from_json(o) for o in urls or []]
+
+
+
+class CharmsList(Type):
+    _toSchema = {'names': 'names'}
+    _toPy = {'names': 'names'}
+    def __init__(self, names=None, **unknown_fields):
+        '''
+        names : typing.Sequence<+T_co>[str]
+        '''
+        self.names = names
+
+
+
+class CharmsListResult(Type):
+    _toSchema = {'charm_urls': 'charm-urls'}
+    _toPy = {'charm-urls': 'charm_urls'}
+    def __init__(self, charm_urls=None, **unknown_fields):
+        '''
+        charm_urls : typing.Sequence<+T_co>[str]
+        '''
+        self.charm_urls = charm_urls
+
+
+
+class ClaimLeadershipBulkParams(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams>
+        '''
+        self.params = [ClaimLeadershipParams.from_json(o) for o in params or []]
+
+
+
+class ClaimLeadershipBulkResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        self.results = [ErrorResult.from_json(o) for o in results or []]
+
+
+
+class ClaimLeadershipParams(Type):
+    _toSchema = {'application_tag': 'application-tag', 'duration': 'duration', 'unit_tag': 'unit-tag'}
+    _toPy = {'application-tag': 'application_tag', 'duration': 'duration', 'unit-tag': 'unit_tag'}
+    def __init__(self, application_tag=None, duration=None, unit_tag=None, **unknown_fields):
+        '''
+        application_tag : str
+        duration : float
+        unit_tag : str
+        '''
+        self.application_tag = application_tag
+        self.duration = duration
+        self.unit_tag = unit_tag
+
+
+
+class Cloud(Type):
+    _toSchema = {'auth_types': 'auth-types', 'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'regions': 'regions', 'storage_endpoint': 'storage-endpoint', 'type_': 'type'}
+    _toPy = {'auth-types': 'auth_types', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'regions': 'regions', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'}
+    def __init__(self, auth_types=None, endpoint=None, identity_endpoint=None, regions=None, storage_endpoint=None, type_=None, **unknown_fields):
+        '''
+        auth_types : typing.Sequence<+T_co>[str]
+        endpoint : str
+        identity_endpoint : str
+        regions : typing.Sequence<+T_co>[~CloudRegion]<~CloudRegion>
+        storage_endpoint : str
+        type_ : str
+        '''
+        self.auth_types = auth_types
+        self.endpoint = endpoint
+        self.identity_endpoint = identity_endpoint
+        self.regions = [CloudRegion.from_json(o) for o in regions or []]
+        self.storage_endpoint = storage_endpoint
+        self.type_ = type_
+
+
+
+class CloudCredential(Type):
+    _toSchema = {'attrs': 'attrs', 'auth_type': 'auth-type', 'redacted': 'redacted'}
+    _toPy = {'attrs': 'attrs', 'auth-type': 'auth_type', 'redacted': 'redacted'}
+    def __init__(self, attrs=None, auth_type=None, redacted=None, **unknown_fields):
+        '''
+        attrs : typing.Mapping<~KT, +VT_co>[str, str]
+        auth_type : str
+        redacted : typing.Sequence<+T_co>[str]
+        '''
+        self.attrs = attrs
+        self.auth_type = auth_type
+        self.redacted = redacted
+
+
+
+class CloudCredentialResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : CloudCredential
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = CloudCredential.from_json(result) if result else None
+
+
+
+class CloudCredentialResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult>
+        '''
+        self.results = [CloudCredentialResult.from_json(o) for o in results or []]
+
+
+
+class CloudImageMetadata(Type):
+    _toSchema = {'arch': 'arch', 'image_id': 'image-id', 'priority': 'priority', 'region': 'region', 'root_storage_size': 'root-storage-size', 'root_storage_type': 'root-storage-type', 'series': 'series', 'source': 'source', 'stream': 'stream', 'version': 'version', 'virt_type': 'virt-type'}
+    _toPy = {'arch': 'arch', 'image-id': 'image_id', 'priority': 'priority', 'region': 'region', 'root-storage-size': 'root_storage_size', 'root-storage-type': 'root_storage_type', 'series': 'series', 'source': 'source', 'stream': 'stream', 'version': 'version', 'virt-type': 'virt_type'}
+    def __init__(self, arch=None, image_id=None, priority=None, region=None, root_storage_size=None, root_storage_type=None, series=None, source=None, stream=None, version=None, virt_type=None, **unknown_fields):
+        '''
+        arch : str
+        image_id : str
+        priority : int
+        region : str
+        root_storage_size : int
+        root_storage_type : str
+        series : str
+        source : str
+        stream : str
+        version : str
+        virt_type : str
+        '''
+        self.arch = arch
+        self.image_id = image_id
+        self.priority = priority
+        self.region = region
+        self.root_storage_size = root_storage_size
+        self.root_storage_type = root_storage_type
+        self.series = series
+        self.source = source
+        self.stream = stream
+        self.version = version
+        self.virt_type = virt_type
+
+
+
+class CloudImageMetadataList(Type):
+    _toSchema = {'metadata': 'metadata'}
+    _toPy = {'metadata': 'metadata'}
+    def __init__(self, metadata=None, **unknown_fields):
+        '''
+        metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+        '''
+        self.metadata = [CloudImageMetadata.from_json(o) for o in metadata or []]
+
+
+
+class CloudInstanceTypesConstraint(Type):
+    _toSchema = {'cloud_tag': 'cloud-tag', 'constraints': 'constraints', 'region': 'region'}
+    _toPy = {'cloud-tag': 'cloud_tag', 'constraints': 'constraints', 'region': 'region'}
+    def __init__(self, cloud_tag=None, constraints=None, region=None, **unknown_fields):
+        '''
+        cloud_tag : str
+        constraints : Value
+        region : str
+        '''
+        self.cloud_tag = cloud_tag
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.region = region
+
+
+
+class CloudInstanceTypesConstraints(Type):
+    _toSchema = {'constraints': 'constraints'}
+    _toPy = {'constraints': 'constraints'}
+    def __init__(self, constraints=None, **unknown_fields):
+        '''
+        constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint>
+        '''
+        self.constraints = [CloudInstanceTypesConstraint.from_json(o) for o in constraints or []]
+
+
+
+class CloudRegion(Type):
+    _toSchema = {'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'name': 'name', 'storage_endpoint': 'storage-endpoint'}
+    _toPy = {'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'name': 'name', 'storage-endpoint': 'storage_endpoint'}
+    def __init__(self, endpoint=None, identity_endpoint=None, name=None, storage_endpoint=None, **unknown_fields):
+        '''
+        endpoint : str
+        identity_endpoint : str
+        name : str
+        storage_endpoint : str
+        '''
+        self.endpoint = endpoint
+        self.identity_endpoint = identity_endpoint
+        self.name = name
+        self.storage_endpoint = storage_endpoint
+
+
+
+class CloudResult(Type):
+    _toSchema = {'cloud': 'cloud', 'error': 'error'}
+    _toPy = {'cloud': 'cloud', 'error': 'error'}
+    def __init__(self, cloud=None, error=None, **unknown_fields):
+        '''
+        cloud : Cloud
+        error : Error
+        '''
+        self.cloud = Cloud.from_json(cloud) if cloud else None
+        self.error = Error.from_json(error) if error else None
+
+
+
+class CloudResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~CloudResult]<~CloudResult>
+        '''
+        self.results = [CloudResult.from_json(o) for o in results or []]
+
+
+
+class CloudSpec(Type):
+    _toSchema = {'credential': 'credential', 'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'name': 'name', 'region': 'region', 'storage_endpoint': 'storage-endpoint', 'type_': 'type'}
+    _toPy = {'credential': 'credential', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'name': 'name', 'region': 'region', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'}
+    def __init__(self, credential=None, endpoint=None, identity_endpoint=None, name=None, region=None, storage_endpoint=None, type_=None, **unknown_fields):
+        '''
+        credential : CloudCredential
+        endpoint : str
+        identity_endpoint : str
+        name : str
+        region : str
+        storage_endpoint : str
+        type_ : str
+        '''
+        self.credential = CloudCredential.from_json(credential) if credential else None
+        self.endpoint = endpoint
+        self.identity_endpoint = identity_endpoint
+        self.name = name
+        self.region = region
+        self.storage_endpoint = storage_endpoint
+        self.type_ = type_
+
+
+
+class CloudSpecResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : CloudSpec
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = CloudSpec.from_json(result) if result else None
+
+
+
+class CloudSpecResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
+        '''
+        self.results = [CloudSpecResult.from_json(o) for o in results or []]
+
+
+
+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>
+        '''
+        self.clouds = clouds
+
+
+
+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]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.settings = settings
+
+
+
+class ConfigSettingsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
+        '''
+        self.results = [ConfigSettingsResult.from_json(o) for o in results or []]
+
+
+
+class ConfigValue(Type):
+    _toSchema = {'source': 'source', 'value': 'value'}
+    _toPy = {'source': 'source', 'value': 'value'}
+    def __init__(self, source=None, value=None, **unknown_fields):
+        '''
+        source : str
+        value : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.source = source
+        self.value = value
+
+
+
+class Constraints(Type):
+    _toSchema = {'count': 'Count', 'pool': 'Pool', 'size': 'Size'}
+    _toPy = {'Count': 'count', 'Pool': 'pool', 'Size': 'size'}
+    def __init__(self, count=None, pool=None, size=None, **unknown_fields):
+        '''
+        count : int
+        pool : str
+        size : int
+        '''
+        self.count = count
+        self.pool = pool
+        self.size = size
+
+
+
+class ConstraintsResult(Type):
+    _toSchema = {'constraints': 'constraints', 'error': 'error'}
+    _toPy = {'constraints': 'constraints', 'error': 'error'}
+    def __init__(self, constraints=None, error=None, **unknown_fields):
+        '''
+        constraints : Value
+        error : Error
+        '''
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.error = Error.from_json(error) if error else None
+
+
+
+class ConstraintsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult>
+        '''
+        self.results = [ConstraintsResult.from_json(o) for o in results or []]
+
+
+
+class ConsumeApplicationArg(Type):
+    _toSchema = {'application_alias': 'application-alias', 'application_url': 'application-url'}
+    _toPy = {'application-alias': 'application_alias', 'application-url': 'application_url'}
+    def __init__(self, application_alias=None, application_url=None, **unknown_fields):
+        '''
+        application_alias : str
+        application_url : str
+        '''
+        self.application_alias = application_alias
+        self.application_url = application_url
+
+
+
+class ConsumeApplicationArgs(Type):
+    _toSchema = {'args': 'args'}
+    _toPy = {'args': 'args'}
+    def __init__(self, args=None, **unknown_fields):
+        '''
+        args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
+        '''
+        self.args = [ConsumeApplicationArg.from_json(o) for o in args or []]
+
+
+
+class ConsumeApplicationResult(Type):
+    _toSchema = {'error': 'error', 'local_name': 'local-name'}
+    _toPy = {'error': 'error', 'local-name': 'local_name'}
+    def __init__(self, error=None, local_name=None, **unknown_fields):
+        '''
+        error : Error
+        local_name : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.local_name = local_name
+
+
+
+class ConsumeApplicationResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult>
+        '''
+        self.results = [ConsumeApplicationResult.from_json(o) for o in results or []]
+
+
+
+class ContainerConfig(Type):
+    _toSchema = {'apt_mirror': 'apt-mirror', 'apt_proxy': 'apt-proxy', 'authorized_keys': 'authorized-keys', 'provider_type': 'provider-type', 'proxy': 'proxy', 'ssl_hostname_verification': 'ssl-hostname-verification', 'updatebehavior': 'UpdateBehavior'}
+    _toPy = {'UpdateBehavior': 'updatebehavior', 'apt-mirror': 'apt_mirror', 'apt-proxy': 'apt_proxy', 'authorized-keys': 'authorized_keys', 'provider-type': 'provider_type', 'proxy': 'proxy', 'ssl-hostname-verification': 'ssl_hostname_verification'}
+    def __init__(self, updatebehavior=None, apt_mirror=None, apt_proxy=None, authorized_keys=None, provider_type=None, proxy=None, ssl_hostname_verification=None, **unknown_fields):
+        '''
+        updatebehavior : UpdateBehavior
+        apt_mirror : str
+        apt_proxy : Settings
+        authorized_keys : str
+        provider_type : str
+        proxy : Settings
+        ssl_hostname_verification : bool
+        '''
+        self.updatebehavior = UpdateBehavior.from_json(updatebehavior) if updatebehavior else None
+        self.apt_mirror = apt_mirror
+        self.apt_proxy = Settings.from_json(apt_proxy) if apt_proxy else None
+        self.authorized_keys = authorized_keys
+        self.provider_type = provider_type
+        self.proxy = Settings.from_json(proxy) if proxy else None
+        self.ssl_hostname_verification = ssl_hostname_verification
+
+
+
+class ContainerManagerConfig(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Mapping<~KT, +VT_co>[str, str]
+        '''
+        self.config = config
+
+
+
+class ContainerManagerConfigParams(Type):
+    _toSchema = {'type_': 'type'}
+    _toPy = {'type': 'type_'}
+    def __init__(self, type_=None, **unknown_fields):
+        '''
+        type_ : str
+        '''
+        self.type_ = type_
+
+
+
+class ControllerConfigResult(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.config = config
+
+
+
+class ControllersChangeResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : ControllersChanges
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = ControllersChanges.from_json(result) if result else None
+
+
+
+class ControllersChangeResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult>
+        '''
+        self.results = [ControllersChangeResult.from_json(o) for o in results or []]
+
+
+
+class ControllersChanges(Type):
+    _toSchema = {'added': 'added', 'converted': 'converted', 'demoted': 'demoted', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed'}
+    _toPy = {'added': 'added', 'converted': 'converted', 'demoted': 'demoted', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed'}
+    def __init__(self, added=None, converted=None, demoted=None, maintained=None, promoted=None, removed=None, **unknown_fields):
+        '''
+        added : typing.Sequence<+T_co>[str]
+        converted : typing.Sequence<+T_co>[str]
+        demoted : typing.Sequence<+T_co>[str]
+        maintained : typing.Sequence<+T_co>[str]
+        promoted : typing.Sequence<+T_co>[str]
+        removed : typing.Sequence<+T_co>[str]
+        '''
+        self.added = added
+        self.converted = converted
+        self.demoted = demoted
+        self.maintained = maintained
+        self.promoted = promoted
+        self.removed = removed
+
+
+
+class ControllersSpec(Type):
+    _toSchema = {'constraints': 'constraints', 'num_controllers': 'num-controllers', 'placement': 'placement', 'series': 'series'}
+    _toPy = {'constraints': 'constraints', 'num-controllers': 'num_controllers', 'placement': 'placement', 'series': 'series'}
+    def __init__(self, constraints=None, num_controllers=None, placement=None, series=None, **unknown_fields):
+        '''
+        constraints : Value
+        num_controllers : int
+        placement : typing.Sequence<+T_co>[str]
+        series : str
+        '''
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.num_controllers = num_controllers
+        self.placement = placement
+        self.series = series
+
+
+
+class ControllersSpecs(Type):
+    _toSchema = {'specs': 'specs'}
+    _toPy = {'specs': 'specs'}
+    def __init__(self, specs=None, **unknown_fields):
+        '''
+        specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec>
+        '''
+        self.specs = [ControllersSpec.from_json(o) for o in specs or []]
+
+
+
+class CreateSpaceParams(Type):
+    _toSchema = {'provider_id': 'provider-id', 'public': 'public', 'space_tag': 'space-tag', 'subnet_tags': 'subnet-tags'}
+    _toPy = {'provider-id': 'provider_id', 'public': 'public', 'space-tag': 'space_tag', 'subnet-tags': 'subnet_tags'}
+    def __init__(self, provider_id=None, public=None, space_tag=None, subnet_tags=None, **unknown_fields):
+        '''
+        provider_id : str
+        public : bool
+        space_tag : str
+        subnet_tags : typing.Sequence<+T_co>[str]
+        '''
+        self.provider_id = provider_id
+        self.public = public
+        self.space_tag = space_tag
+        self.subnet_tags = subnet_tags
+
+
+
+class CreateSpacesParams(Type):
+    _toSchema = {'spaces': 'spaces'}
+    _toPy = {'spaces': 'spaces'}
+    def __init__(self, spaces=None, **unknown_fields):
+        '''
+        spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
+        '''
+        self.spaces = [CreateSpaceParams.from_json(o) for o in spaces 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]
+        removed : bool
+        '''
+        self.entity = entity
+        self.removed = removed
+
+
+
+class DeployerConnectionValues(Type):
+    _toSchema = {'api_addresses': 'api-addresses', 'state_addresses': 'state-addresses'}
+    _toPy = {'api-addresses': 'api_addresses', 'state-addresses': 'state_addresses'}
+    def __init__(self, api_addresses=None, state_addresses=None, **unknown_fields):
+        '''
+        api_addresses : typing.Sequence<+T_co>[str]
+        state_addresses : typing.Sequence<+T_co>[str]
+        '''
+        self.api_addresses = api_addresses
+        self.state_addresses = state_addresses
+
+
+
+class DestroyApplicationInfo(Type):
+    _toSchema = {'destroyed_storage': 'destroyed-storage', 'destroyed_units': 'destroyed-units', 'detached_storage': 'detached-storage'}
+    _toPy = {'destroyed-storage': 'destroyed_storage', 'destroyed-units': 'destroyed_units', 'detached-storage': 'detached_storage'}
+    def __init__(self, destroyed_storage=None, destroyed_units=None, detached_storage=None, **unknown_fields):
+        '''
+        destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+        destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity>
+        detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+        '''
+        self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []]
+        self.destroyed_units = [Entity.from_json(o) for o in destroyed_units or []]
+        self.detached_storage = [Entity.from_json(o) for o in detached_storage or []]
+
+
+
+class DestroyApplicationResult(Type):
+    _toSchema = {'error': 'error', 'info': 'info'}
+    _toPy = {'error': 'error', 'info': 'info'}
+    def __init__(self, error=None, info=None, **unknown_fields):
+        '''
+        error : Error
+        info : DestroyApplicationInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.info = DestroyApplicationInfo.from_json(info) if info else None
+
+
+
+class DestroyApplicationResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
+        '''
+        self.results = [DestroyApplicationResult.from_json(o) for o in results or []]
+
+
+
+class DestroyApplicationUnits(Type):
+    _toSchema = {'unit_names': 'unit-names'}
+    _toPy = {'unit-names': 'unit_names'}
+    def __init__(self, unit_names=None, **unknown_fields):
+        '''
+        unit_names : typing.Sequence<+T_co>[str]
+        '''
+        self.unit_names = unit_names
+
+
+
+class DestroyControllerArgs(Type):
+    _toSchema = {'destroy_models': 'destroy-models'}
+    _toPy = {'destroy-models': 'destroy_models'}
+    def __init__(self, destroy_models=None, **unknown_fields):
+        '''
+        destroy_models : bool
+        '''
+        self.destroy_models = destroy_models
+
+
+
+class DestroyMachineInfo(Type):
+    _toSchema = {'destroyed_storage': 'destroyed-storage', 'destroyed_units': 'destroyed-units', 'detached_storage': 'detached-storage'}
+    _toPy = {'destroyed-storage': 'destroyed_storage', 'destroyed-units': 'destroyed_units', 'detached-storage': 'detached_storage'}
+    def __init__(self, destroyed_storage=None, destroyed_units=None, detached_storage=None, **unknown_fields):
+        '''
+        destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+        destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity>
+        detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+        '''
+        self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []]
+        self.destroyed_units = [Entity.from_json(o) for o in destroyed_units or []]
+        self.detached_storage = [Entity.from_json(o) for o in detached_storage or []]
+
+
+
+class DestroyMachineResult(Type):
+    _toSchema = {'error': 'error', 'info': 'info'}
+    _toPy = {'error': 'error', 'info': 'info'}
+    def __init__(self, error=None, info=None, **unknown_fields):
+        '''
+        error : Error
+        info : DestroyMachineInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.info = DestroyMachineInfo.from_json(info) if info else None
+
+
+
+class DestroyMachineResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
+        '''
+        self.results = [DestroyMachineResult.from_json(o) for o in results or []]
+
+
+
+class DestroyMachines(Type):
+    _toSchema = {'force': 'force', 'machine_names': 'machine-names'}
+    _toPy = {'force': 'force', 'machine-names': 'machine_names'}
+    def __init__(self, force=None, machine_names=None, **unknown_fields):
+        '''
+        force : bool
+        machine_names : typing.Sequence<+T_co>[str]
+        '''
+        self.force = force
+        self.machine_names = machine_names
+
+
+
+class DestroyRelation(Type):
+    _toSchema = {'endpoints': 'endpoints'}
+    _toPy = {'endpoints': 'endpoints'}
+    def __init__(self, endpoints=None, **unknown_fields):
+        '''
+        endpoints : typing.Sequence<+T_co>[str]
+        '''
+        self.endpoints = endpoints
+
+
+
+class DestroyUnitInfo(Type):
+    _toSchema = {'destroyed_storage': 'destroyed-storage', 'detached_storage': 'detached-storage'}
+    _toPy = {'destroyed-storage': 'destroyed_storage', 'detached-storage': 'detached_storage'}
+    def __init__(self, destroyed_storage=None, detached_storage=None, **unknown_fields):
+        '''
+        destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+        detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+        '''
+        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 DestroyUnitResult(Type):
+    _toSchema = {'error': 'error', 'info': 'info'}
+    _toPy = {'error': 'error', 'info': 'info'}
+    def __init__(self, error=None, info=None, **unknown_fields):
+        '''
+        error : Error
+        info : DestroyUnitInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.info = DestroyUnitInfo.from_json(info) if info else None
+
+
+
+class DestroyUnitResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
+        '''
+        self.results = [DestroyUnitResult.from_json(o) for o in results 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]
+        info : str
+        kind : str
+        life : str
+        since : str
+        status : str
+        version : str
+        '''
+        self.data = data
+        self.err = err
+        self.info = info
+        self.kind = kind
+        self.life = life
+        self.since = since
+        self.status = status
+        self.version = version
+
+
+
+class DeviceBridgeInfo(Type):
+    _toSchema = {'bridge_name': 'bridge-name', 'host_device_name': 'host-device-name'}
+    _toPy = {'bridge-name': 'bridge_name', 'host-device-name': 'host_device_name'}
+    def __init__(self, bridge_name=None, host_device_name=None, **unknown_fields):
+        '''
+        bridge_name : str
+        host_device_name : str
+        '''
+        self.bridge_name = bridge_name
+        self.host_device_name = host_device_name
+
+
+
+class DiscoverSpacesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace>
+        '''
+        self.results = [ProviderSpace.from_json(o) for o in results or []]
+
+
+
+class DistributionGroupResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : typing.Sequence<+T_co>[str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class DistributionGroupResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult>
+        '''
+        self.results = [DistributionGroupResult.from_json(o) for o in results or []]
+
+
+
+class DumpModelRequest(Type):
+    _toSchema = {'entities': 'entities', 'simplified': 'simplified'}
+    _toPy = {'entities': 'entities', 'simplified': 'simplified'}
+    def __init__(self, entities=None, simplified=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        simplified : bool
+        '''
+        self.entities = [Entity.from_json(o) for o in entities or []]
+        self.simplified = simplified
+
+
+
+class Endpoint(Type):
+    _toSchema = {'application_name': 'application-name', 'relation': 'relation'}
+    _toPy = {'application-name': 'application_name', 'relation': 'relation'}
+    def __init__(self, application_name=None, relation=None, **unknown_fields):
+        '''
+        application_name : str
+        relation : CharmRelation
+        '''
+        self.application_name = application_name
+        self.relation = CharmRelation.from_json(relation) if relation else None
+
+
+
+class EndpointStatus(Type):
+    _toSchema = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'}
+    _toPy = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'}
+    def __init__(self, application=None, name=None, role=None, subordinate=None, **unknown_fields):
+        '''
+        application : str
+        name : str
+        role : str
+        subordinate : bool
+        '''
+        self.application = application
+        self.name = name
+        self.role = role
+        self.subordinate = subordinate
+
+
+
+class Entities(Type):
+    _toSchema = {'entities': 'entities'}
+    _toPy = {'entities': 'entities'}
+    def __init__(self, entities=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        '''
+        self.entities = [Entity.from_json(o) for o in entities or []]
+
+
+
+class EntitiesCharmURL(Type):
+    _toSchema = {'entities': 'entities'}
+    _toPy = {'entities': 'entities'}
+    def __init__(self, entities=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL>
+        '''
+        self.entities = [EntityCharmURL.from_json(o) for o in entities or []]
+
+
+
+class EntitiesPortRanges(Type):
+    _toSchema = {'entities': 'entities'}
+    _toPy = {'entities': 'entities'}
+    def __init__(self, entities=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
+        '''
+        self.entities = [EntityPortRange.from_json(o) for o in entities or []]
+
+
+
+class EntitiesResult(Type):
+    _toSchema = {'entities': 'entities', 'error': 'error'}
+    _toPy = {'entities': 'entities', 'error': 'error'}
+    def __init__(self, entities=None, error=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        error : Error
+        '''
+        self.entities = [Entity.from_json(o) for o in entities or []]
+        self.error = Error.from_json(error) if error else None
+
+
+
+class EntitiesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~EntitiesResult]<~EntitiesResult>
+        '''
+        self.results = [EntitiesResult.from_json(o) for o in results or []]
+
+
+
+class EntitiesVersion(Type):
+    _toSchema = {'agent_tools': 'agent-tools'}
+    _toPy = {'agent-tools': 'agent_tools'}
+    def __init__(self, agent_tools=None, **unknown_fields):
+        '''
+        agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion>
+        '''
+        self.agent_tools = [EntityVersion.from_json(o) for o in agent_tools or []]
+
+
+
+class EntitiesWatchResult(Type):
+    _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'}
+    _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
+    def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[str]
+        error : Error
+        watcher_id : str
+        '''
+        self.changes = changes
+        self.error = Error.from_json(error) if error else None
+        self.watcher_id = watcher_id
+
+
+
+class Entity(Type):
+    _toSchema = {'tag': 'tag'}
+    _toPy = {'tag': 'tag'}
+    def __init__(self, tag=None, **unknown_fields):
+        '''
+        tag : str
+        '''
+        self.tag = tag
+
+
+
+class EntityAnnotations(Type):
+    _toSchema = {'annotations': 'annotations', 'entity': 'entity'}
+    _toPy = {'annotations': 'annotations', 'entity': 'entity'}
+    def __init__(self, annotations=None, entity=None, **unknown_fields):
+        '''
+        annotations : typing.Mapping<~KT, +VT_co>[str, str]
+        entity : str
+        '''
+        self.annotations = annotations
+        self.entity = entity
+
+
+
+class EntityCharmURL(Type):
+    _toSchema = {'charm_url': 'charm-url', 'tag': 'tag'}
+    _toPy = {'charm-url': 'charm_url', 'tag': 'tag'}
+    def __init__(self, charm_url=None, tag=None, **unknown_fields):
+        '''
+        charm_url : str
+        tag : str
+        '''
+        self.charm_url = charm_url
+        self.tag = tag
+
+
+
+class 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>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.metrics = [MetricResult.from_json(o) for o in metrics or []]
+
+
+
+class EntityPassword(Type):
+    _toSchema = {'password': 'password', 'tag': 'tag'}
+    _toPy = {'password': 'password', 'tag': 'tag'}
+    def __init__(self, password=None, tag=None, **unknown_fields):
+        '''
+        password : str
+        tag : str
+        '''
+        self.password = password
+        self.tag = tag
+
+
+
+class EntityPasswords(Type):
+    _toSchema = {'changes': 'changes'}
+    _toPy = {'changes': 'changes'}
+    def __init__(self, changes=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
+        '''
+        self.changes = [EntityPassword.from_json(o) for o in changes or []]
+
+
+
+class EntityPortRange(Type):
+    _toSchema = {'from_port': 'from-port', 'protocol': 'protocol', 'tag': 'tag', 'to_port': 'to-port'}
+    _toPy = {'from-port': 'from_port', 'protocol': 'protocol', 'tag': 'tag', 'to-port': 'to_port'}
+    def __init__(self, from_port=None, protocol=None, tag=None, to_port=None, **unknown_fields):
+        '''
+        from_port : int
+        protocol : str
+        tag : str
+        to_port : int
+        '''
+        self.from_port = from_port
+        self.protocol = protocol
+        self.tag = tag
+        self.to_port = to_port
+
+
+
+class EntityStatus(Type):
+    _toSchema = {'data': 'data', 'info': 'info', 'since': 'since', 'status': 'status'}
+    _toPy = {'data': 'data', 'info': 'info', 'since': 'since', 'status': 'status'}
+    def __init__(self, data=None, info=None, since=None, status=None, **unknown_fields):
+        '''
+        data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        info : str
+        since : str
+        status : str
+        '''
+        self.data = data
+        self.info = info
+        self.since = since
+        self.status = status
+
+
+
+class EntityStatusArgs(Type):
+    _toSchema = {'data': 'data', 'info': 'info', 'status': 'status', 'tag': 'tag'}
+    _toPy = {'data': 'data', 'info': 'info', 'status': 'status', 'tag': 'tag'}
+    def __init__(self, data=None, info=None, status=None, tag=None, **unknown_fields):
+        '''
+        data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        info : str
+        status : str
+        tag : str
+        '''
+        self.data = data
+        self.info = info
+        self.status = status
+        self.tag = tag
+
+
+
+class EntityVersion(Type):
+    _toSchema = {'tag': 'tag', 'tools': 'tools'}
+    _toPy = {'tag': 'tag', 'tools': 'tools'}
+    def __init__(self, tag=None, tools=None, **unknown_fields):
+        '''
+        tag : str
+        tools : Version
+        '''
+        self.tag = tag
+        self.tools = Version.from_json(tools) if tools else None
+
+
+
+class EntityWorkloadVersion(Type):
+    _toSchema = {'tag': 'tag', 'workload_version': 'workload-version'}
+    _toPy = {'tag': 'tag', 'workload-version': 'workload_version'}
+    def __init__(self, tag=None, workload_version=None, **unknown_fields):
+        '''
+        tag : str
+        workload_version : str
+        '''
+        self.tag = tag
+        self.workload_version = workload_version
+
+
+
+class EntityWorkloadVersions(Type):
+    _toSchema = {'entities': 'entities'}
+    _toPy = {'entities': 'entities'}
+    def __init__(self, entities=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
+        '''
+        self.entities = [EntityWorkloadVersion.from_json(o) for o in entities or []]
+
+
+
+class EnvListArgs(Type):
+    _toSchema = {'patterns': 'patterns'}
+    _toPy = {'patterns': 'patterns'}
+    def __init__(self, patterns=None, **unknown_fields):
+        '''
+        patterns : typing.Sequence<+T_co>[str]
+        '''
+        self.patterns = patterns
+
+
+
+class EnvListResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~Payload]<~Payload>
+        '''
+        self.results = [Payload.from_json(o) for o in results or []]
+
+
+
+class Error(Type):
+    _toSchema = {'code': 'code', 'info': 'info', 'message': 'message'}
+    _toPy = {'code': 'code', 'info': 'info', 'message': 'message'}
+    def __init__(self, code=None, info=None, message=None, **unknown_fields):
+        '''
+        code : str
+        info : ErrorInfo
+        message : str
+        '''
+        self.code = code
+        self.info = ErrorInfo.from_json(info) if info else None
+        self.message = message
+
+
+
+class ErrorInfo(Type):
+    _toSchema = {'macaroon': 'macaroon', 'macaroon_path': 'macaroon-path'}
+    _toPy = {'macaroon': 'macaroon', 'macaroon-path': 'macaroon_path'}
+    def __init__(self, macaroon=None, macaroon_path=None, **unknown_fields):
+        '''
+        macaroon : Macaroon
+        macaroon_path : str
+        '''
+        self.macaroon = Macaroon.from_json(macaroon) if macaroon else None
+        self.macaroon_path = macaroon_path
+
+
+
+class ErrorResult(Type):
+    _toSchema = {'error': 'error'}
+    _toPy = {'error': 'error'}
+    def __init__(self, error=None, **unknown_fields):
+        '''
+        error : Error
+        '''
+        self.error = Error.from_json(error) if error else None
+
+
+
+class ErrorResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+        '''
+        self.results = [ErrorResult.from_json(o) for o in results or []]
+
+
+
+class Filesystem(Type):
+    _toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'volume_tag': 'volume-tag'}
+    _toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'volume-tag': 'volume_tag'}
+    def __init__(self, filesystem_tag=None, info=None, volume_tag=None, **unknown_fields):
+        '''
+        filesystem_tag : str
+        info : FilesystemInfo
+        volume_tag : str
+        '''
+        self.filesystem_tag = filesystem_tag
+        self.info = FilesystemInfo.from_json(info) if info else None
+        self.volume_tag = volume_tag
+
+
+
+class FilesystemAttachment(Type):
+    _toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'machine_tag': 'machine-tag'}
+    _toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'machine-tag': 'machine_tag'}
+    def __init__(self, filesystem_tag=None, info=None, machine_tag=None, **unknown_fields):
+        '''
+        filesystem_tag : str
+        info : FilesystemAttachmentInfo
+        machine_tag : str
+        '''
+        self.filesystem_tag = filesystem_tag
+        self.info = FilesystemAttachmentInfo.from_json(info) if info else None
+        self.machine_tag = machine_tag
+
+
+
+class FilesystemAttachmentDetails(Type):
+    _toSchema = {'filesystemattachmentinfo': 'FilesystemAttachmentInfo', 'life': 'life'}
+    _toPy = {'FilesystemAttachmentInfo': 'filesystemattachmentinfo', 'life': 'life'}
+    def __init__(self, filesystemattachmentinfo=None, life=None, **unknown_fields):
+        '''
+        filesystemattachmentinfo : FilesystemAttachmentInfo
+        life : str
+        '''
+        self.filesystemattachmentinfo = FilesystemAttachmentInfo.from_json(filesystemattachmentinfo) if filesystemattachmentinfo else None
+        self.life = life
+
+
+
+class FilesystemAttachmentInfo(Type):
+    _toSchema = {'mount_point': 'mount-point', 'read_only': 'read-only'}
+    _toPy = {'mount-point': 'mount_point', 'read-only': 'read_only'}
+    def __init__(self, mount_point=None, read_only=None, **unknown_fields):
+        '''
+        mount_point : str
+        read_only : bool
+        '''
+        self.mount_point = mount_point
+        self.read_only = read_only
+
+
+
+class FilesystemAttachmentParams(Type):
+    _toSchema = {'filesystem_id': 'filesystem-id', 'filesystem_tag': 'filesystem-tag', 'instance_id': 'instance-id', 'machine_tag': 'machine-tag', 'mount_point': 'mount-point', 'provider': 'provider', 'read_only': 'read-only'}
+    _toPy = {'filesystem-id': 'filesystem_id', 'filesystem-tag': 'filesystem_tag', 'instance-id': 'instance_id', 'machine-tag': 'machine_tag', 'mount-point': 'mount_point', 'provider': 'provider', 'read-only': 'read_only'}
+    def __init__(self, filesystem_id=None, filesystem_tag=None, instance_id=None, machine_tag=None, mount_point=None, provider=None, read_only=None, **unknown_fields):
+        '''
+        filesystem_id : str
+        filesystem_tag : str
+        instance_id : str
+        machine_tag : str
+        mount_point : str
+        provider : str
+        read_only : bool
+        '''
+        self.filesystem_id = filesystem_id
+        self.filesystem_tag = filesystem_tag
+        self.instance_id = instance_id
+        self.machine_tag = machine_tag
+        self.mount_point = mount_point
+        self.provider = provider
+        self.read_only = read_only
+
+
+
+class FilesystemAttachmentParamsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : FilesystemAttachmentParams
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = FilesystemAttachmentParams.from_json(result) if result else None
+
+
+
+class FilesystemAttachmentParamsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult>
+        '''
+        self.results = [FilesystemAttachmentParamsResult.from_json(o) for o in results or []]
+
+
+
+class FilesystemAttachmentResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : FilesystemAttachment
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = FilesystemAttachment.from_json(result) if result else None
+
+
+
+class FilesystemAttachmentResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult>
+        '''
+        self.results = [FilesystemAttachmentResult.from_json(o) for o in results or []]
+
+
+
+class FilesystemAttachments(Type):
+    _toSchema = {'filesystem_attachments': 'filesystem-attachments'}
+    _toPy = {'filesystem-attachments': 'filesystem_attachments'}
+    def __init__(self, filesystem_attachments=None, **unknown_fields):
+        '''
+        filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment>
+        '''
+        self.filesystem_attachments = [FilesystemAttachment.from_json(o) for o in filesystem_attachments or []]
+
+
+
+class FilesystemDetails(Type):
+    _toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'machine_attachments': 'machine-attachments', 'status': 'status', 'storage': 'storage', 'volume_tag': 'volume-tag'}
+    _toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'machine-attachments': 'machine_attachments', 'status': 'status', 'storage': 'storage', 'volume-tag': 'volume_tag'}
+    def __init__(self, filesystem_tag=None, info=None, machine_attachments=None, status=None, storage=None, volume_tag=None, **unknown_fields):
+        '''
+        filesystem_tag : str
+        info : FilesystemInfo
+        machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~FilesystemAttachmentInfo]<~FilesystemAttachmentInfo>
+        status : EntityStatus
+        storage : StorageDetails
+        volume_tag : str
+        '''
+        self.filesystem_tag = filesystem_tag
+        self.info = FilesystemInfo.from_json(info) if info else None
+        self.machine_attachments = machine_attachments
+        self.status = EntityStatus.from_json(status) if status else None
+        self.storage = StorageDetails.from_json(storage) if storage else None
+        self.volume_tag = volume_tag
+
+
+
+class FilesystemDetailsListResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : typing.Sequence<+T_co>[~FilesystemDetails]<~FilesystemDetails>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = [FilesystemDetails.from_json(o) for o in result or []]
+
+
+
+class FilesystemDetailsListResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult>
+        '''
+        self.results = [FilesystemDetailsListResult.from_json(o) for o in results or []]
+
+
+
+class FilesystemFilter(Type):
+    _toSchema = {'machines': 'machines'}
+    _toPy = {'machines': 'machines'}
+    def __init__(self, machines=None, **unknown_fields):
+        '''
+        machines : typing.Sequence<+T_co>[str]
+        '''
+        self.machines = machines
+
+
+
+class FilesystemFilters(Type):
+    _toSchema = {'filters': 'filters'}
+    _toPy = {'filters': 'filters'}
+    def __init__(self, filters=None, **unknown_fields):
+        '''
+        filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter>
+        '''
+        self.filters = [FilesystemFilter.from_json(o) for o in filters or []]
+
+
+
+class FilesystemInfo(Type):
+    _toSchema = {'filesystem_id': 'filesystem-id', 'size': 'size'}
+    _toPy = {'filesystem-id': 'filesystem_id', 'size': 'size'}
+    def __init__(self, filesystem_id=None, size=None, **unknown_fields):
+        '''
+        filesystem_id : str
+        size : int
+        '''
+        self.filesystem_id = filesystem_id
+        self.size = size
+
+
+
+class FilesystemParams(Type):
+    _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'filesystem_tag': 'filesystem-tag', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume_tag': 'volume-tag'}
+    _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'filesystem-tag': 'filesystem_tag', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume-tag': 'volume_tag'}
+    def __init__(self, attachment=None, attributes=None, filesystem_tag=None, provider=None, size=None, tags=None, volume_tag=None, **unknown_fields):
+        '''
+        attachment : FilesystemAttachmentParams
+        attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        filesystem_tag : str
+        provider : str
+        size : int
+        tags : typing.Mapping<~KT, +VT_co>[str, str]
+        volume_tag : str
+        '''
+        self.attachment = FilesystemAttachmentParams.from_json(attachment) if attachment else None
+        self.attributes = attributes
+        self.filesystem_tag = filesystem_tag
+        self.provider = provider
+        self.size = size
+        self.tags = tags
+        self.volume_tag = volume_tag
+
+
+
+class FilesystemParamsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : FilesystemParams
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = FilesystemParams.from_json(result) if result else None
+
+
+
+class FilesystemParamsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult>
+        '''
+        self.results = [FilesystemParamsResult.from_json(o) for o in results or []]
+
+
+
+class FilesystemResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : Filesystem
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = Filesystem.from_json(result) if result else None
+
+
+
+class FilesystemResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~FilesystemResult]<~FilesystemResult>
+        '''
+        self.results = [FilesystemResult.from_json(o) for o in results or []]
+
+
+
+class Filesystems(Type):
+    _toSchema = {'filesystems': 'filesystems'}
+    _toPy = {'filesystems': 'filesystems'}
+    def __init__(self, filesystems=None, **unknown_fields):
+        '''
+        filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem>
+        '''
+        self.filesystems = [Filesystem.from_json(o) for o in filesystems or []]
+
+
+
+class FindActionsByNames(Type):
+    _toSchema = {'names': 'names'}
+    _toPy = {'names': 'names'}
+    def __init__(self, names=None, **unknown_fields):
+        '''
+        names : typing.Sequence<+T_co>[str]
+        '''
+        self.names = names
+
+
+
+class FindTags(Type):
+    _toSchema = {'prefixes': 'prefixes'}
+    _toPy = {'prefixes': 'prefixes'}
+    def __init__(self, prefixes=None, **unknown_fields):
+        '''
+        prefixes : typing.Sequence<+T_co>[str]
+        '''
+        self.prefixes = prefixes
+
+
+
+class FindTagsResults(Type):
+    _toSchema = {'matches': 'matches'}
+    _toPy = {'matches': 'matches'}
+    def __init__(self, matches=None, **unknown_fields):
+        '''
+        matches : typing.Sequence<+T_co>[~Entity]<~Entity>
+        '''
+        self.matches = [Entity.from_json(o) for o in matches or []]
+
+
+
+class FindToolsParams(Type):
+    _toSchema = {'arch': 'arch', 'major': 'major', 'minor': 'minor', 'number': 'number', 'series': 'series'}
+    _toPy = {'arch': 'arch', 'major': 'major', 'minor': 'minor', 'number': 'number', 'series': 'series'}
+    def __init__(self, arch=None, major=None, minor=None, number=None, series=None, **unknown_fields):
+        '''
+        arch : str
+        major : int
+        minor : int
+        number : Number
+        series : str
+        '''
+        self.arch = arch
+        self.major = major
+        self.minor = minor
+        self.number = Number.from_json(number) if number else None
+        self.series = series
+
+
+
+class FindToolsResult(Type):
+    _toSchema = {'error': 'error', 'list_': 'list'}
+    _toPy = {'error': 'error', 'list': 'list_'}
+    def __init__(self, error=None, list_=None, **unknown_fields):
+        '''
+        error : Error
+        list_ : typing.Sequence<+T_co>[~Tools]<~Tools>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.list_ = [Tools.from_json(o) for o in list_ 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):
+        '''
+        applications : typing.Mapping<~KT, +VT_co>[str, ~ApplicationStatus]<~ApplicationStatus>
+        machines : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus>
+        model : ModelStatusInfo
+        relations : typing.Sequence<+T_co>[~RelationStatus]<~RelationStatus>
+        remote_applications : typing.Mapping<~KT, +VT_co>[str, ~RemoteApplicationStatus]<~RemoteApplicationStatus>
+        '''
+        self.applications = applications
+        self.machines = machines
+        self.model = ModelStatusInfo.from_json(model) if model else None
+        self.relations = [RelationStatus.from_json(o) for o in relations or []]
+        self.remote_applications = remote_applications
+
+
+
+class GetApplicationConstraints(Type):
+    _toSchema = {'application': 'application'}
+    _toPy = {'application': 'application'}
+    def __init__(self, application=None, **unknown_fields):
+        '''
+        application : str
+        '''
+        self.application = application
+
+
+
+class GetConstraintsResults(Type):
+    _toSchema = {'constraints': 'constraints'}
+    _toPy = {'constraints': 'constraints'}
+    def __init__(self, constraints=None, **unknown_fields):
+        '''
+        constraints : Value
+        '''
+        self.constraints = Value.from_json(constraints) if constraints else None
+
+
+
+class GetLeadershipSettingsBulkResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
+        '''
+        self.results = [GetLeadershipSettingsResult.from_json(o) for o in results or []]
+
+
+
+class GetLeadershipSettingsResult(Type):
+    _toSchema = {'error': 'error', 'settings': 'settings'}
+    _toPy = {'error': 'error', 'settings': 'settings'}
+    def __init__(self, error=None, settings=None, **unknown_fields):
+        '''
+        error : Error
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.settings = settings
+
+
+
+class HAMember(Type):
+    _toSchema = {'public_address': 'public-address', 'series': 'series', 'tag': 'tag'}
+    _toPy = {'public-address': 'public_address', 'series': 'series', 'tag': 'tag'}
+    def __init__(self, public_address=None, series=None, tag=None, **unknown_fields):
+        '''
+        public_address : Address
+        series : str
+        tag : str
+        '''
+        self.public_address = Address.from_json(public_address) if public_address else None
+        self.series = series
+        self.tag = tag
+
+
+
+class HardwareCharacteristics(Type):
+    _toSchema = {'arch': 'arch', 'availability_zone': 'availability-zone', 'cpu_cores': 'cpu-cores', 'cpu_power': 'cpu-power', 'mem': 'mem', 'root_disk': 'root-disk', 'tags': 'tags'}
+    _toPy = {'arch': 'arch', 'availability-zone': 'availability_zone', 'cpu-cores': 'cpu_cores', 'cpu-power': 'cpu_power', 'mem': 'mem', 'root-disk': 'root_disk', 'tags': 'tags'}
+    def __init__(self, arch=None, availability_zone=None, cpu_cores=None, cpu_power=None, mem=None, root_disk=None, tags=None, **unknown_fields):
+        '''
+        arch : str
+        availability_zone : str
+        cpu_cores : int
+        cpu_power : int
+        mem : int
+        root_disk : int
+        tags : typing.Sequence<+T_co>[str]
+        '''
+        self.arch = arch
+        self.availability_zone = availability_zone
+        self.cpu_cores = cpu_cores
+        self.cpu_power = cpu_power
+        self.mem = mem
+        self.root_disk = root_disk
+        self.tags = tags
+
+
+
+class History(Type):
+    _toSchema = {'error': 'error', 'statuses': 'statuses'}
+    _toPy = {'error': 'error', 'statuses': 'statuses'}
+    def __init__(self, error=None, statuses=None, **unknown_fields):
+        '''
+        error : Error
+        statuses : typing.Sequence<+T_co>[~DetailedStatus]<~DetailedStatus>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.statuses = [DetailedStatus.from_json(o) for o in statuses or []]
+
+
+
+class HostNetworkChange(Type):
+    _toSchema = {'error': 'error', 'new_bridges': 'new-bridges', 'reconfigure_delay': 'reconfigure-delay'}
+    _toPy = {'error': 'error', 'new-bridges': 'new_bridges', 'reconfigure-delay': 'reconfigure_delay'}
+    def __init__(self, error=None, new_bridges=None, reconfigure_delay=None, **unknown_fields):
+        '''
+        error : Error
+        new_bridges : typing.Sequence<+T_co>[~DeviceBridgeInfo]<~DeviceBridgeInfo>
+        reconfigure_delay : int
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.new_bridges = [DeviceBridgeInfo.from_json(o) for o in new_bridges or []]
+        self.reconfigure_delay = reconfigure_delay
+
+
+
+class HostNetworkChangeResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange>
+        '''
+        self.results = [HostNetworkChange.from_json(o) for o in results or []]
+
+
+
+class HostPort(Type):
+    _toSchema = {'address': 'Address', 'port': 'port'}
+    _toPy = {'Address': 'address', 'port': 'port'}
+    def __init__(self, address=None, port=None, **unknown_fields):
+        '''
+        address : Address
+        port : int
+        '''
+        self.address = Address.from_json(address) if address else None
+        self.port = port
+
+
+
+class HostedModelConfig(Type):
+    _toSchema = {'cloud_spec': 'cloud-spec', 'config': 'config', 'error': 'error', 'name': 'name', 'owner': 'owner'}
+    _toPy = {'cloud-spec': 'cloud_spec', 'config': 'config', 'error': 'error', 'name': 'name', 'owner': 'owner'}
+    def __init__(self, cloud_spec=None, config=None, error=None, name=None, owner=None, **unknown_fields):
+        '''
+        cloud_spec : CloudSpec
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        error : Error
+        name : str
+        owner : str
+        '''
+        self.cloud_spec = CloudSpec.from_json(cloud_spec) if cloud_spec else None
+        self.config = config
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+        self.owner = owner
+
+
+
+class HostedModelConfigsResults(Type):
+    _toSchema = {'models': 'models'}
+    _toPy = {'models': 'models'}
+    def __init__(self, models=None, **unknown_fields):
+        '''
+        models : typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig>
+        '''
+        self.models = [HostedModelConfig.from_json(o) for o in models or []]
+
+
+
+class ImageFilterParams(Type):
+    _toSchema = {'images': 'images'}
+    _toPy = {'images': 'images'}
+    def __init__(self, images=None, **unknown_fields):
+        '''
+        images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
+        '''
+        self.images = [ImageSpec.from_json(o) for o in images or []]
+
+
+
+class ImageMetadata(Type):
+    _toSchema = {'arch': 'arch', 'created': 'created', 'kind': 'kind', 'series': 'series', 'url': 'url'}
+    _toPy = {'arch': 'arch', 'created': 'created', 'kind': 'kind', 'series': 'series', 'url': 'url'}
+    def __init__(self, arch=None, created=None, kind=None, series=None, url=None, **unknown_fields):
+        '''
+        arch : str
+        created : str
+        kind : str
+        series : str
+        url : str
+        '''
+        self.arch = arch
+        self.created = created
+        self.kind = kind
+        self.series = series
+        self.url = url
+
+
+
+class ImageMetadataFilter(Type):
+    _toSchema = {'arches': 'arches', 'region': 'region', 'root_storage_type': 'root-storage-type', 'series': 'series', 'stream': 'stream', 'virt_type': 'virt-type'}
+    _toPy = {'arches': 'arches', 'region': 'region', 'root-storage-type': 'root_storage_type', 'series': 'series', 'stream': 'stream', 'virt-type': 'virt_type'}
+    def __init__(self, arches=None, region=None, root_storage_type=None, series=None, stream=None, virt_type=None, **unknown_fields):
+        '''
+        arches : typing.Sequence<+T_co>[str]
+        region : str
+        root_storage_type : str
+        series : typing.Sequence<+T_co>[str]
+        stream : str
+        virt_type : str
+        '''
+        self.arches = arches
+        self.region = region
+        self.root_storage_type = root_storage_type
+        self.series = series
+        self.stream = stream
+        self.virt_type = virt_type
+
+
+
+class ImageSpec(Type):
+    _toSchema = {'arch': 'arch', 'kind': 'kind', 'series': 'series'}
+    _toPy = {'arch': 'arch', 'kind': 'kind', 'series': 'series'}
+    def __init__(self, arch=None, kind=None, series=None, **unknown_fields):
+        '''
+        arch : str
+        kind : str
+        series : str
+        '''
+        self.arch = arch
+        self.kind = kind
+        self.series = series
+
+
+
+class InitiateMigrationArgs(Type):
+    _toSchema = {'specs': 'specs'}
+    _toPy = {'specs': 'specs'}
+    def __init__(self, specs=None, **unknown_fields):
+        '''
+        specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec>
+        '''
+        self.specs = [MigrationSpec.from_json(o) for o in specs or []]
+
+
+
+class InitiateMigrationResult(Type):
+    _toSchema = {'error': 'error', 'migration_id': 'migration-id', 'model_tag': 'model-tag'}
+    _toPy = {'error': 'error', 'migration-id': 'migration_id', 'model-tag': 'model_tag'}
+    def __init__(self, error=None, migration_id=None, model_tag=None, **unknown_fields):
+        '''
+        error : Error
+        migration_id : str
+        model_tag : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.migration_id = migration_id
+        self.model_tag = model_tag
+
+
+
+class InitiateMigrationResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult>
+        '''
+        self.results = [InitiateMigrationResult.from_json(o) for o in results or []]
+
+
+
+class InstanceInfo(Type):
+    _toSchema = {'characteristics': 'characteristics', 'instance_id': 'instance-id', 'network_config': 'network-config', 'nonce': 'nonce', 'tag': 'tag', 'volume_attachments': 'volume-attachments', 'volumes': 'volumes'}
+    _toPy = {'characteristics': 'characteristics', 'instance-id': 'instance_id', 'network-config': 'network_config', 'nonce': 'nonce', 'tag': 'tag', 'volume-attachments': 'volume_attachments', 'volumes': 'volumes'}
+    def __init__(self, characteristics=None, instance_id=None, network_config=None, nonce=None, tag=None, volume_attachments=None, volumes=None, **unknown_fields):
+        '''
+        characteristics : HardwareCharacteristics
+        instance_id : str
+        network_config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+        nonce : str
+        tag : str
+        volume_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo>
+        volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
+        '''
+        self.characteristics = HardwareCharacteristics.from_json(characteristics) if characteristics else None
+        self.instance_id = instance_id
+        self.network_config = [NetworkConfig.from_json(o) for o in network_config or []]
+        self.nonce = nonce
+        self.tag = tag
+        self.volume_attachments = volume_attachments
+        self.volumes = [Volume.from_json(o) for o in volumes or []]
+
+
+
+class InstanceType(Type):
+    _toSchema = {'arches': 'arches', 'cost': 'cost', 'cpu_cores': 'cpu-cores', 'deprecated': 'deprecated', 'memory': 'memory', 'name': 'name', 'root_disk': 'root-disk', 'virt_type': 'virt-type'}
+    _toPy = {'arches': 'arches', 'cost': 'cost', 'cpu-cores': 'cpu_cores', 'deprecated': 'deprecated', 'memory': 'memory', 'name': 'name', 'root-disk': 'root_disk', 'virt-type': 'virt_type'}
+    def __init__(self, arches=None, cost=None, cpu_cores=None, deprecated=None, memory=None, name=None, root_disk=None, virt_type=None, **unknown_fields):
+        '''
+        arches : typing.Sequence<+T_co>[str]
+        cost : int
+        cpu_cores : int
+        deprecated : bool
+        memory : int
+        name : str
+        root_disk : int
+        virt_type : str
+        '''
+        self.arches = arches
+        self.cost = cost
+        self.cpu_cores = cpu_cores
+        self.deprecated = deprecated
+        self.memory = memory
+        self.name = name
+        self.root_disk = root_disk
+        self.virt_type = virt_type
+
+
+
+class InstanceTypesResult(Type):
+    _toSchema = {'cost_currency': 'cost-currency', 'cost_divisor': 'cost-divisor', 'cost_unit': 'cost-unit', 'error': 'error', 'instance_types': 'instance-types'}
+    _toPy = {'cost-currency': 'cost_currency', 'cost-divisor': 'cost_divisor', 'cost-unit': 'cost_unit', 'error': 'error', 'instance-types': 'instance_types'}
+    def __init__(self, cost_currency=None, cost_divisor=None, cost_unit=None, error=None, instance_types=None, **unknown_fields):
+        '''
+        cost_currency : str
+        cost_divisor : int
+        cost_unit : str
+        error : Error
+        instance_types : typing.Sequence<+T_co>[~InstanceType]<~InstanceType>
+        '''
+        self.cost_currency = cost_currency
+        self.cost_divisor = cost_divisor
+        self.cost_unit = cost_unit
+        self.error = Error.from_json(error) if error else None
+        self.instance_types = [InstanceType.from_json(o) for o in instance_types or []]
+
+
+
+class InstanceTypesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
+        '''
+        self.results = [InstanceTypesResult.from_json(o) for o in results or []]
+
+
+
+class InstancesInfo(Type):
+    _toSchema = {'machines': 'machines'}
+    _toPy = {'machines': 'machines'}
+    def __init__(self, machines=None, **unknown_fields):
+        '''
+        machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo>
+        '''
+        self.machines = [InstanceInfo.from_json(o) for o in machines or []]
+
+
+
+class IntResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : int
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class IntResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~IntResult]<~IntResult>
+        '''
+        self.results = [IntResult.from_json(o) for o in results or []]
+
+
+
+class InterfaceAddress(Type):
+    _toSchema = {'cidr': 'cidr', 'value': 'value'}
+    _toPy = {'cidr': 'cidr', 'value': 'value'}
+    def __init__(self, cidr=None, value=None, **unknown_fields):
+        '''
+        cidr : str
+        value : str
+        '''
+        self.cidr = cidr
+        self.value = value
+
+
+
+class IsMasterResult(Type):
+    _toSchema = {'master': 'master'}
+    _toPy = {'master': 'master'}
+    def __init__(self, master=None, **unknown_fields):
+        '''
+        master : bool
+        '''
+        self.master = master
+
+
+
+class IsMeteredResult(Type):
+    _toSchema = {'metered': 'metered'}
+    _toPy = {'metered': 'metered'}
+    def __init__(self, metered=None, **unknown_fields):
+        '''
+        metered : bool
+        '''
+        self.metered = metered
+
+
+
+class JobsResult(Type):
+    _toSchema = {'error': 'error', 'jobs': 'jobs'}
+    _toPy = {'error': 'error', 'jobs': 'jobs'}
+    def __init__(self, error=None, jobs=None, **unknown_fields):
+        '''
+        error : Error
+        jobs : typing.Sequence<+T_co>[str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.jobs = jobs
+
+
+
+class JobsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~JobsResult]<~JobsResult>
+        '''
+        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):
+        '''
+        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<+T_co>[~LifeResult]<~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<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+        '''
+        self.result = [CloudImageMetadata.from_json(o) for o in result or []]
+
+
+
+class ListImageResult(Type):
+    _toSchema = {'result': 'result'}
+    _toPy = {'result': 'result'}
+    def __init__(self, result=None, **unknown_fields):
+        '''
+        result : typing.Sequence<+T_co>[~ImageMetadata]<~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<+T_co>[~Entity]<~Entity>
+        '''
+        self.entities = [Entity.from_json(o) for o in entities or []]
+
+
+
+class ListSSHKeys(Type):
+    _toSchema = {'entities': 'entities', 'mode': 'mode'}
+    _toPy = {'entities': 'entities', 'mode': 'mode'}
+    def __init__(self, entities=None, mode=None, **unknown_fields):
+        '''
+        entities : Entities
+        mode : bool
+        '''
+        self.entities = Entities.from_json(entities) if entities else None
+        self.mode = mode
+
+
+
+class ListSpacesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~Space]<~Space>
+        '''
+        self.results = [Space.from_json(o) for o in results or []]
+
+
+
+class ListSubnetsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+        '''
+        self.results = [Subnet.from_json(o) for o in results or []]
+
+
+
+class ListUnitResourcesArgs(Type):
+    _toSchema = {'resource_names': 'resource-names'}
+    _toPy = {'resource-names': 'resource_names'}
+    def __init__(self, resource_names=None, **unknown_fields):
+        '''
+        resource_names : typing.Sequence<+T_co>[str]
+        '''
+        self.resource_names = resource_names
+
+
+
+class LogForwardingGetLastSentParams(Type):
+    _toSchema = {'ids': 'ids'}
+    _toPy = {'ids': 'ids'}
+    def __init__(self, ids=None, **unknown_fields):
+        '''
+        ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID>
+        '''
+        self.ids = [LogForwardingID.from_json(o) for o in ids or []]
+
+
+
+class LogForwardingGetLastSentResult(Type):
+    _toSchema = {'err': 'err', 'record_id': 'record-id', 'record_timestamp': 'record-timestamp'}
+    _toPy = {'err': 'err', 'record-id': 'record_id', 'record-timestamp': 'record_timestamp'}
+    def __init__(self, err=None, record_id=None, record_timestamp=None, **unknown_fields):
+        '''
+        err : Error
+        record_id : int
+        record_timestamp : int
+        '''
+        self.err = Error.from_json(err) if err else None
+        self.record_id = record_id
+        self.record_timestamp = record_timestamp
+
+
+
+class LogForwardingGetLastSentResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult>
+        '''
+        self.results = [LogForwardingGetLastSentResult.from_json(o) for o in results or []]
+
+
+
+class LogForwardingID(Type):
+    _toSchema = {'model': 'model', 'sink': 'sink'}
+    _toPy = {'model': 'model', 'sink': 'sink'}
+    def __init__(self, model=None, sink=None, **unknown_fields):
+        '''
+        model : str
+        sink : str
+        '''
+        self.model = model
+        self.sink = sink
+
+
+
+class LogForwardingSetLastSentParam(Type):
+    _toSchema = {'logforwardingid': 'LogForwardingID', 'record_id': 'record-id', 'record_timestamp': 'record-timestamp'}
+    _toPy = {'LogForwardingID': 'logforwardingid', 'record-id': 'record_id', 'record-timestamp': 'record_timestamp'}
+    def __init__(self, logforwardingid=None, record_id=None, record_timestamp=None, **unknown_fields):
+        '''
+        logforwardingid : LogForwardingID
+        record_id : int
+        record_timestamp : int
+        '''
+        self.logforwardingid = LogForwardingID.from_json(logforwardingid) if logforwardingid else None
+        self.record_id = record_id
+        self.record_timestamp = record_timestamp
+
+
+
+class LogForwardingSetLastSentParams(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam>
+        '''
+        self.params = [LogForwardingSetLastSentParam.from_json(o) for o in params or []]
+
+
+
+class LookUpArg(Type):
+    _toSchema = {'id_': 'id', 'name': 'name'}
+    _toPy = {'id': 'id_', 'name': 'name'}
+    def __init__(self, id_=None, name=None, **unknown_fields):
+        '''
+        id_ : str
+        name : str
+        '''
+        self.id_ = id_
+        self.name = name
+
+
+
+class LookUpArgs(Type):
+    _toSchema = {'args': 'args'}
+    _toPy = {'args': 'args'}
+    def __init__(self, args=None, **unknown_fields):
+        '''
+        args : typing.Sequence<+T_co>[~LookUpArg]<~LookUpArg>
+        '''
+        self.args = [LookUpArg.from_json(o) for o in args or []]
+
+
+
+class LookUpPayloadArg(Type):
+    _toSchema = {'id_': 'id', 'name': 'name'}
+    _toPy = {'id': 'id_', 'name': 'name'}
+    def __init__(self, id_=None, name=None, **unknown_fields):
+        '''
+        id_ : str
+        name : str
+        '''
+        self.id_ = id_
+        self.name = name
+
+
+
+class LookUpPayloadArgs(Type):
+    _toSchema = {'args': 'args'}
+    _toPy = {'args': 'args'}
+    def __init__(self, args=None, **unknown_fields):
+        '''
+        args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg>
+        '''
+        self.args = [LookUpPayloadArg.from_json(o) for o in args or []]
+
+
+
+class Macaroon(Type):
+    _toSchema = {}
+    _toPy = {}
+    def __init__(self, **unknown_fields):
+        '''
+
+        '''
+        pass
+
+
+
+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>
+        tag : str
+        '''
+        self.addresses = [Address.from_json(o) for o in addresses or []]
+        self.tag = tag
+
+
+
+class MachineAddressesResult(Type):
+    _toSchema = {'addresses': 'addresses', 'error': 'error'}
+    _toPy = {'addresses': 'addresses', 'error': 'error'}
+    def __init__(self, addresses=None, error=None, **unknown_fields):
+        '''
+        addresses : typing.Sequence<+T_co>[~Address]<~Address>
+        error : Error
+        '''
+        self.addresses = [Address.from_json(o) for o in addresses or []]
+        self.error = Error.from_json(error) if error else None
+
+
+
+class MachineAddressesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult>
+        '''
+        self.results = [MachineAddressesResult.from_json(o) for o in results or []]
+
+
+
+class MachineBlockDevices(Type):
+    _toSchema = {'block_devices': 'block-devices', 'machine': 'machine'}
+    _toPy = {'block-devices': 'block_devices', 'machine': 'machine'}
+    def __init__(self, block_devices=None, machine=None, **unknown_fields):
+        '''
+        block_devices : typing.Sequence<+T_co>[~BlockDevice]<~BlockDevice>
+        machine : str
+        '''
+        self.block_devices = [BlockDevice.from_json(o) for o in block_devices or []]
+        self.machine = machine
+
+
+
+class MachineContainers(Type):
+    _toSchema = {'container_types': 'container-types', 'machine_tag': 'machine-tag'}
+    _toPy = {'container-types': 'container_types', 'machine-tag': 'machine_tag'}
+    def __init__(self, container_types=None, machine_tag=None, **unknown_fields):
+        '''
+        container_types : typing.Sequence<+T_co>[str]
+        machine_tag : str
+        '''
+        self.container_types = container_types
+        self.machine_tag = machine_tag
+
+
+
+class MachineContainersParams(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers>
+        '''
+        self.params = [MachineContainers.from_json(o) for o in params or []]
+
+
+
+class MachineHardware(Type):
+    _toSchema = {'arch': 'arch', 'availability_zone': 'availability-zone', 'cores': 'cores', 'cpu_power': 'cpu-power', 'mem': 'mem', 'root_disk': 'root-disk', 'tags': 'tags'}
+    _toPy = {'arch': 'arch', 'availability-zone': 'availability_zone', 'cores': 'cores', 'cpu-power': 'cpu_power', 'mem': 'mem', 'root-disk': 'root_disk', 'tags': 'tags'}
+    def __init__(self, arch=None, availability_zone=None, cores=None, cpu_power=None, mem=None, root_disk=None, tags=None, **unknown_fields):
+        '''
+        arch : str
+        availability_zone : str
+        cores : int
+        cpu_power : int
+        mem : int
+        root_disk : int
+        tags : typing.Sequence<+T_co>[str]
+        '''
+        self.arch = arch
+        self.availability_zone = availability_zone
+        self.cores = cores
+        self.cpu_power = cpu_power
+        self.mem = mem
+        self.root_disk = root_disk
+        self.tags = tags
+
+
+
+class MachineNetworkConfigResult(Type):
+    _toSchema = {'error': 'error', 'info': 'info'}
+    _toPy = {'error': 'error', 'info': 'info'}
+    def __init__(self, error=None, info=None, **unknown_fields):
+        '''
+        error : Error
+        info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.info = [NetworkConfig.from_json(o) for o in info or []]
+
+
+
+class MachineNetworkConfigResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
+        '''
+        self.results = [MachineNetworkConfigResult.from_json(o) for o in results or []]
+
+
+
+class MachinePortRange(Type):
+    _toSchema = {'port_range': 'port-range', 'relation_tag': 'relation-tag', 'unit_tag': 'unit-tag'}
+    _toPy = {'port-range': 'port_range', 'relation-tag': 'relation_tag', 'unit-tag': 'unit_tag'}
+    def __init__(self, port_range=None, relation_tag=None, unit_tag=None, **unknown_fields):
+        '''
+        port_range : PortRange
+        relation_tag : str
+        unit_tag : str
+        '''
+        self.port_range = PortRange.from_json(port_range) if port_range else None
+        self.relation_tag = relation_tag
+        self.unit_tag = unit_tag
+
+
+
+class MachinePorts(Type):
+    _toSchema = {'machine_tag': 'machine-tag', 'subnet_tag': 'subnet-tag'}
+    _toPy = {'machine-tag': 'machine_tag', 'subnet-tag': 'subnet_tag'}
+    def __init__(self, machine_tag=None, subnet_tag=None, **unknown_fields):
+        '''
+        machine_tag : str
+        subnet_tag : str
+        '''
+        self.machine_tag = machine_tag
+        self.subnet_tag = subnet_tag
+
+
+
+class MachinePortsParams(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts>
+        '''
+        self.params = [MachinePorts.from_json(o) for o in params or []]
+
+
+
+class MachinePortsResult(Type):
+    _toSchema = {'error': 'error', 'ports': 'ports'}
+    _toPy = {'error': 'error', 'ports': 'ports'}
+    def __init__(self, error=None, ports=None, **unknown_fields):
+        '''
+        error : Error
+        ports : typing.Sequence<+T_co>[~MachinePortRange]<~MachinePortRange>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.ports = [MachinePortRange.from_json(o) for o in ports or []]
+
+
+
+class MachinePortsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
+        '''
+        self.results = [MachinePortsResult.from_json(o) for o in results or []]
+
+
+
+class MachineStatus(Type):
+    _toSchema = {'agent_status': 'agent-status', 'containers': 'containers', 'dns_name': 'dns-name', 'hardware': 'hardware', 'has_vote': 'has-vote', 'id_': 'id', 'instance_id': 'instance-id', 'instance_status': 'instance-status', 'ip_addresses': 'ip-addresses', 'jobs': 'jobs', 'series': 'series', 'wants_vote': 'wants-vote'}
+    _toPy = {'agent-status': 'agent_status', 'containers': 'containers', 'dns-name': 'dns_name', 'hardware': 'hardware', 'has-vote': 'has_vote', 'id': 'id_', 'instance-id': 'instance_id', 'instance-status': 'instance_status', 'ip-addresses': 'ip_addresses', 'jobs': 'jobs', 'series': 'series', 'wants-vote': 'wants_vote'}
+    def __init__(self, agent_status=None, containers=None, dns_name=None, hardware=None, has_vote=None, id_=None, instance_id=None, instance_status=None, ip_addresses=None, jobs=None, series=None, wants_vote=None, **unknown_fields):
+        '''
+        agent_status : DetailedStatus
+        containers : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus>
+        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]
+        series : str
+        wants_vote : bool
+        '''
+        self.agent_status = DetailedStatus.from_json(agent_status) if agent_status else None
+        self.containers = containers
+        self.dns_name = dns_name
+        self.hardware = hardware
+        self.has_vote = has_vote
+        self.id_ = id_
+        self.instance_id = instance_id
+        self.instance_status = DetailedStatus.from_json(instance_status) if instance_status else None
+        self.ip_addresses = ip_addresses
+        self.jobs = jobs
+        self.series = series
+        self.wants_vote = wants_vote
+
+
+
+class MachineStorageId(Type):
+    _toSchema = {'attachment_tag': 'attachment-tag', 'machine_tag': 'machine-tag'}
+    _toPy = {'attachment-tag': 'attachment_tag', 'machine-tag': 'machine_tag'}
+    def __init__(self, attachment_tag=None, machine_tag=None, **unknown_fields):
+        '''
+        attachment_tag : str
+        machine_tag : str
+        '''
+        self.attachment_tag = attachment_tag
+        self.machine_tag = machine_tag
+
+
+
+class MachineStorageIds(Type):
+    _toSchema = {'ids': 'ids'}
+    _toPy = {'ids': 'ids'}
+    def __init__(self, ids=None, **unknown_fields):
+        '''
+        ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
+        '''
+        self.ids = [MachineStorageId.from_json(o) for o in ids or []]
+
+
+
+class MachineStorageIdsWatchResult(Type):
+    _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'}
+    _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
+    def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
+        error : Error
+        watcher_id : str
+        '''
+        self.changes = [MachineStorageId.from_json(o) for o in changes or []]
+        self.error = Error.from_json(error) if error else None
+        self.watcher_id = watcher_id
+
+
+
+class MachineStorageIdsWatchResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
+        '''
+        self.results = [MachineStorageIdsWatchResult.from_json(o) for o in results or []]
+
+
+
+class MapResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class MapResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~MapResult]<~MapResult>
+        '''
+        self.results = [MapResult.from_json(o) for o in results or []]
+
+
+
+class MasterMigrationStatus(Type):
+    _toSchema = {'migration_id': 'migration-id', 'phase': 'phase', 'phase_changed_time': 'phase-changed-time', 'spec': 'spec'}
+    _toPy = {'migration-id': 'migration_id', 'phase': 'phase', 'phase-changed-time': 'phase_changed_time', 'spec': 'spec'}
+    def __init__(self, migration_id=None, phase=None, phase_changed_time=None, spec=None, **unknown_fields):
+        '''
+        migration_id : str
+        phase : str
+        phase_changed_time : str
+        spec : MigrationSpec
+        '''
+        self.migration_id = migration_id
+        self.phase = phase
+        self.phase_changed_time = phase_changed_time
+        self.spec = MigrationSpec.from_json(spec) if spec else None
+
+
+
+class Member(Type):
+    _toSchema = {'address': 'Address', 'arbiter': 'Arbiter', 'buildindexes': 'BuildIndexes', 'hidden': 'Hidden', 'id_': 'Id', 'priority': 'Priority', 'slavedelay': 'SlaveDelay', 'tags': 'Tags', 'votes': 'Votes'}
+    _toPy = {'Address': 'address', 'Arbiter': 'arbiter', 'BuildIndexes': 'buildindexes', 'Hidden': 'hidden', 'Id': 'id_', 'Priority': 'priority', 'SlaveDelay': 'slavedelay', 'Tags': 'tags', 'Votes': 'votes'}
+    def __init__(self, address=None, arbiter=None, buildindexes=None, hidden=None, id_=None, priority=None, slavedelay=None, tags=None, votes=None, **unknown_fields):
+        '''
+        address : str
+        arbiter : bool
+        buildindexes : bool
+        hidden : bool
+        id_ : int
+        priority : float
+        slavedelay : int
+        tags : typing.Mapping<~KT, +VT_co>[str, str]
+        votes : int
+        '''
+        self.address = address
+        self.arbiter = arbiter
+        self.buildindexes = buildindexes
+        self.hidden = hidden
+        self.id_ = id_
+        self.priority = priority
+        self.slavedelay = slavedelay
+        self.tags = tags
+        self.votes = votes
+
+
+
+class MergeLeadershipSettingsBulkParams(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
+        '''
+        self.params = [MergeLeadershipSettingsParam.from_json(o) for o in params or []]
+
+
+
+class MergeLeadershipSettingsParam(Type):
+    _toSchema = {'application_tag': 'application-tag', 'settings': 'settings'}
+    _toPy = {'application-tag': 'application_tag', 'settings': 'settings'}
+    def __init__(self, application_tag=None, settings=None, **unknown_fields):
+        '''
+        application_tag : str
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        '''
+        self.application_tag = application_tag
+        self.settings = settings
+
+
+
+class MetadataImageIds(Type):
+    _toSchema = {'image_ids': 'image-ids'}
+    _toPy = {'image-ids': 'image_ids'}
+    def __init__(self, image_ids=None, **unknown_fields):
+        '''
+        image_ids : typing.Sequence<+T_co>[str]
+        '''
+        self.image_ids = image_ids
+
+
+
+class MetadataSaveParams(Type):
+    _toSchema = {'metadata': 'metadata'}
+    _toPy = {'metadata': 'metadata'}
+    def __init__(self, metadata=None, **unknown_fields):
+        '''
+        metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList>
+        '''
+        self.metadata = [CloudImageMetadataList.from_json(o) for o in metadata or []]
+
+
+
+class MeterStatus(Type):
+    _toSchema = {'color': 'color', 'message': 'message'}
+    _toPy = {'color': 'color', 'message': 'message'}
+    def __init__(self, color=None, message=None, **unknown_fields):
+        '''
+        color : str
+        message : str
+        '''
+        self.color = color
+        self.message = message
+
+
+
+class MeterStatusParam(Type):
+    _toSchema = {'code': 'code', 'info': 'info', 'tag': 'tag'}
+    _toPy = {'code': 'code', 'info': 'info', 'tag': 'tag'}
+    def __init__(self, code=None, info=None, tag=None, **unknown_fields):
+        '''
+        code : str
+        info : str
+        tag : str
+        '''
+        self.code = code
+        self.info = info
+        self.tag = tag
+
+
+
+class MeterStatusParams(Type):
+    _toSchema = {'statues': 'statues'}
+    _toPy = {'statues': 'statues'}
+    def __init__(self, statues=None, **unknown_fields):
+        '''
+        statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam>
+        '''
+        self.statues = [MeterStatusParam.from_json(o) for o in statues or []]
+
+
+
+class MeterStatusResult(Type):
+    _toSchema = {'code': 'code', 'error': 'error', 'info': 'info'}
+    _toPy = {'code': 'code', 'error': 'error', 'info': 'info'}
+    def __init__(self, code=None, error=None, info=None, **unknown_fields):
+        '''
+        code : str
+        error : Error
+        info : str
+        '''
+        self.code = code
+        self.error = Error.from_json(error) if error else None
+        self.info = info
+
+
+
+class MeterStatusResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
+        '''
+        self.results = [MeterStatusResult.from_json(o) for o in results or []]
+
+
+
+class Metric(Type):
+    _toSchema = {'key': 'key', 'time': 'time', 'value': 'value'}
+    _toPy = {'key': 'key', 'time': 'time', 'value': 'value'}
+    def __init__(self, key=None, time=None, value=None, **unknown_fields):
+        '''
+        key : str
+        time : str
+        value : str
+        '''
+        self.key = key
+        self.time = time
+        self.value = value
+
+
+
+class MetricBatch(Type):
+    _toSchema = {'charm_url': 'charm-url', 'created': 'created', 'metrics': 'metrics', 'uuid': 'uuid'}
+    _toPy = {'charm-url': 'charm_url', 'created': 'created', 'metrics': 'metrics', 'uuid': 'uuid'}
+    def __init__(self, charm_url=None, created=None, metrics=None, uuid=None, **unknown_fields):
+        '''
+        charm_url : str
+        created : str
+        metrics : typing.Sequence<+T_co>[~Metric]<~Metric>
+        uuid : str
+        '''
+        self.charm_url = charm_url
+        self.created = created
+        self.metrics = [Metric.from_json(o) for o in metrics or []]
+        self.uuid = uuid
+
+
+
+class MetricBatchParam(Type):
+    _toSchema = {'batch': 'batch', 'tag': 'tag'}
+    _toPy = {'batch': 'batch', 'tag': 'tag'}
+    def __init__(self, batch=None, tag=None, **unknown_fields):
+        '''
+        batch : MetricBatch
+        tag : str
+        '''
+        self.batch = MetricBatch.from_json(batch) if batch else None
+        self.tag = tag
+
+
+
+class MetricBatchParams(Type):
+    _toSchema = {'batches': 'batches'}
+    _toPy = {'batches': 'batches'}
+    def __init__(self, batches=None, **unknown_fields):
+        '''
+        batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
+        '''
+        self.batches = [MetricBatchParam.from_json(o) for o in batches or []]
+
+
+
+class MetricResult(Type):
+    _toSchema = {'key': 'key', 'time': 'time', 'unit': 'unit', 'value': 'value'}
+    _toPy = {'key': 'key', 'time': 'time', 'unit': 'unit', 'value': 'value'}
+    def __init__(self, key=None, time=None, unit=None, value=None, **unknown_fields):
+        '''
+        key : str
+        time : str
+        unit : str
+        value : str
+        '''
+        self.key = key
+        self.time = time
+        self.unit = unit
+        self.value = value
+
+
+
+class MetricResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics>
+        '''
+        self.results = [EntityMetrics.from_json(o) for o in results or []]
+
+
+
+class MigrationModelInfo(Type):
+    _toSchema = {'agent_version': 'agent-version', 'name': 'name', 'owner_tag': 'owner-tag', 'uuid': 'uuid'}
+    _toPy = {'agent-version': 'agent_version', 'name': 'name', 'owner-tag': 'owner_tag', 'uuid': 'uuid'}
+    def __init__(self, agent_version=None, name=None, owner_tag=None, uuid=None, **unknown_fields):
+        '''
+        agent_version : Number
+        name : str
+        owner_tag : str
+        uuid : str
+        '''
+        self.agent_version = Number.from_json(agent_version) if agent_version else None
+        self.name = name
+        self.owner_tag = owner_tag
+        self.uuid = uuid
+
+
+
+class MigrationSpec(Type):
+    _toSchema = {'external_control': 'external-control', 'model_tag': 'model-tag', 'skip_initial_prechecks': 'skip-initial-prechecks', 'target_info': 'target-info'}
+    _toPy = {'external-control': 'external_control', 'model-tag': 'model_tag', 'skip-initial-prechecks': 'skip_initial_prechecks', 'target-info': 'target_info'}
+    def __init__(self, external_control=None, model_tag=None, skip_initial_prechecks=None, target_info=None, **unknown_fields):
+        '''
+        external_control : bool
+        model_tag : str
+        skip_initial_prechecks : bool
+        target_info : MigrationTargetInfo
+        '''
+        self.external_control = external_control
+        self.model_tag = model_tag
+        self.skip_initial_prechecks = skip_initial_prechecks
+        self.target_info = MigrationTargetInfo.from_json(target_info) if target_info else None
+
+
+
+class MigrationStatus(Type):
+    _toSchema = {'attempt': 'attempt', 'external_control': 'external-control', 'migration_id': 'migration-id', 'phase': 'phase', 'source_api_addrs': 'source-api-addrs', 'source_ca_cert': 'source-ca-cert', 'target_api_addrs': 'target-api-addrs', 'target_ca_cert': 'target-ca-cert'}
+    _toPy = {'attempt': 'attempt', 'external-control': 'external_control', 'migration-id': 'migration_id', 'phase': 'phase', 'source-api-addrs': 'source_api_addrs', 'source-ca-cert': 'source_ca_cert', 'target-api-addrs': 'target_api_addrs', 'target-ca-cert': 'target_ca_cert'}
+    def __init__(self, attempt=None, external_control=None, migration_id=None, phase=None, source_api_addrs=None, source_ca_cert=None, target_api_addrs=None, target_ca_cert=None, **unknown_fields):
+        '''
+        attempt : int
+        external_control : bool
+        migration_id : str
+        phase : str
+        source_api_addrs : typing.Sequence<+T_co>[str]
+        source_ca_cert : str
+        target_api_addrs : typing.Sequence<+T_co>[str]
+        target_ca_cert : str
+        '''
+        self.attempt = attempt
+        self.external_control = external_control
+        self.migration_id = migration_id
+        self.phase = phase
+        self.source_api_addrs = source_api_addrs
+        self.source_ca_cert = source_ca_cert
+        self.target_api_addrs = target_api_addrs
+        self.target_ca_cert = target_ca_cert
+
+
+
+class MigrationTargetInfo(Type):
+    _toSchema = {'addrs': 'addrs', 'auth_tag': 'auth-tag', 'ca_cert': 'ca-cert', 'controller_tag': 'controller-tag', 'macaroons': 'macaroons', 'password': 'password'}
+    _toPy = {'addrs': 'addrs', 'auth-tag': 'auth_tag', 'ca-cert': 'ca_cert', 'controller-tag': 'controller_tag', 'macaroons': 'macaroons', 'password': 'password'}
+    def __init__(self, addrs=None, auth_tag=None, ca_cert=None, controller_tag=None, macaroons=None, password=None, **unknown_fields):
+        '''
+        addrs : typing.Sequence<+T_co>[str]
+        auth_tag : str
+        ca_cert : str
+        controller_tag : str
+        macaroons : str
+        password : str
+        '''
+        self.addrs = addrs
+        self.auth_tag = auth_tag
+        self.ca_cert = ca_cert
+        self.controller_tag = controller_tag
+        self.macaroons = macaroons
+        self.password = password
+
+
+
+class MinionReport(Type):
+    _toSchema = {'migration_id': 'migration-id', 'phase': 'phase', 'success': 'success'}
+    _toPy = {'migration-id': 'migration_id', 'phase': 'phase', 'success': 'success'}
+    def __init__(self, migration_id=None, phase=None, success=None, **unknown_fields):
+        '''
+        migration_id : str
+        phase : str
+        success : bool
+        '''
+        self.migration_id = migration_id
+        self.phase = phase
+        self.success = success
+
+
+
+class MinionReports(Type):
+    _toSchema = {'failed': 'failed', 'migration_id': 'migration-id', 'phase': 'phase', 'success_count': 'success-count', 'unknown_count': 'unknown-count', 'unknown_sample': 'unknown-sample'}
+    _toPy = {'failed': 'failed', 'migration-id': 'migration_id', 'phase': 'phase', 'success-count': 'success_count', 'unknown-count': 'unknown_count', 'unknown-sample': 'unknown_sample'}
+    def __init__(self, failed=None, migration_id=None, phase=None, success_count=None, unknown_count=None, unknown_sample=None, **unknown_fields):
+        '''
+        failed : typing.Sequence<+T_co>[str]
+        migration_id : str
+        phase : str
+        success_count : int
+        unknown_count : int
+        unknown_sample : typing.Sequence<+T_co>[str]
+        '''
+        self.failed = failed
+        self.migration_id = migration_id
+        self.phase = phase
+        self.success_count = success_count
+        self.unknown_count = unknown_count
+        self.unknown_sample = unknown_sample
+
+
+
+class Model(Type):
+    _toSchema = {'name': 'name', 'owner_tag': 'owner-tag', 'uuid': 'uuid'}
+    _toPy = {'name': 'name', 'owner-tag': 'owner_tag', 'uuid': 'uuid'}
+    def __init__(self, name=None, owner_tag=None, uuid=None, **unknown_fields):
+        '''
+        name : str
+        owner_tag : str
+        uuid : str
+        '''
+        self.name = name
+        self.owner_tag = owner_tag
+        self.uuid = uuid
+
+
+
+class ModelArgs(Type):
+    _toSchema = {'model_tag': 'model-tag'}
+    _toPy = {'model-tag': 'model_tag'}
+    def __init__(self, model_tag=None, **unknown_fields):
+        '''
+        model_tag : str
+        '''
+        self.model_tag = model_tag
+
+
+
+class ModelBlockInfo(Type):
+    _toSchema = {'blocks': 'blocks', 'model_uuid': 'model-uuid', 'name': 'name', 'owner_tag': 'owner-tag'}
+    _toPy = {'blocks': 'blocks', 'model-uuid': 'model_uuid', 'name': 'name', 'owner-tag': 'owner_tag'}
+    def __init__(self, blocks=None, model_uuid=None, name=None, owner_tag=None, **unknown_fields):
+        '''
+        blocks : typing.Sequence<+T_co>[str]
+        model_uuid : str
+        name : str
+        owner_tag : str
+        '''
+        self.blocks = blocks
+        self.model_uuid = model_uuid
+        self.name = name
+        self.owner_tag = owner_tag
+
+
+
+class ModelBlockInfoList(Type):
+    _toSchema = {'models': 'models'}
+    _toPy = {'models': 'models'}
+    def __init__(self, models=None, **unknown_fields):
+        '''
+        models : typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo>
+        '''
+        self.models = [ModelBlockInfo.from_json(o) for o in models or []]
+
+
+
+class ModelConfigResult(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.config = config
+
+
+
+class ModelConfigResults(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+        '''
+        self.config = config
+
+
+
+class ModelCreateArgs(Type):
+    _toSchema = {'cloud_tag': 'cloud-tag', 'config': 'config', 'credential': 'credential', 'name': 'name', 'owner_tag': 'owner-tag', 'region': 'region'}
+    _toPy = {'cloud-tag': 'cloud_tag', 'config': 'config', 'credential': 'credential', 'name': 'name', 'owner-tag': 'owner_tag', 'region': 'region'}
+    def __init__(self, cloud_tag=None, config=None, credential=None, name=None, owner_tag=None, region=None, **unknown_fields):
+        '''
+        cloud_tag : str
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        credential : str
+        name : str
+        owner_tag : str
+        region : str
+        '''
+        self.cloud_tag = cloud_tag
+        self.config = config
+        self.credential = credential
+        self.name = name
+        self.owner_tag = owner_tag
+        self.region = region
+
+
+
+class ModelDefaultValues(Type):
+    _toSchema = {'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'config': 'config'}
+    _toPy = {'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'config': 'config'}
+    def __init__(self, cloud_region=None, cloud_tag=None, config=None, **unknown_fields):
+        '''
+        cloud_region : str
+        cloud_tag : str
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.cloud_region = cloud_region
+        self.cloud_tag = cloud_tag
+        self.config = config
+
+
+
+class ModelDefaults(Type):
+    _toSchema = {'controller': 'controller', 'default': 'default', 'regions': 'regions'}
+    _toPy = {'controller': 'controller', 'default': 'default', 'regions': 'regions'}
+    def __init__(self, controller=None, default=None, regions=None, **unknown_fields):
+        '''
+        controller : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        default : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        regions : typing.Sequence<+T_co>[~RegionDefaults]<~RegionDefaults>
+        '''
+        self.controller = controller
+        self.default = default
+        self.regions = [RegionDefaults.from_json(o) for o in regions or []]
+
+
+
+class ModelDefaultsResult(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
+        '''
+        self.config = config
+
+
+
+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):
+        '''
+        agent_version : Number
+        cloud_credential_tag : str
+        cloud_region : str
+        cloud_tag : str
+        controller_uuid : str
+        default_series : str
+        life : str
+        machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo>
+        migration : ModelMigrationStatus
+        name : str
+        owner_tag : str
+        provider_type : str
+        sla : ModelSLAInfo
+        status : EntityStatus
+        users : typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>
+        uuid : str
+        '''
+        self.agent_version = Number.from_json(agent_version) if agent_version else None
+        self.cloud_credential_tag = cloud_credential_tag
+        self.cloud_region = cloud_region
+        self.cloud_tag = cloud_tag
+        self.controller_uuid = controller_uuid
+        self.default_series = default_series
+        self.life = life
+        self.machines = [ModelMachineInfo.from_json(o) for o in machines or []]
+        self.migration = ModelMigrationStatus.from_json(migration) if migration else None
+        self.name = name
+        self.owner_tag = owner_tag
+        self.provider_type = provider_type
+        self.sla = ModelSLAInfo.from_json(sla) if sla else None
+        self.status = EntityStatus.from_json(status) if status else None
+        self.users = [ModelUserInfo.from_json(o) for o in users or []]
+        self.uuid = uuid
+
+
+
+class ModelInfoResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : ModelInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = ModelInfo.from_json(result) if result else None
+
+
+
+class ModelInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
+        '''
+        self.results = [ModelInfoResult.from_json(o) for o in results or []]
+
+
+
+class ModelInstanceTypesConstraint(Type):
+    _toSchema = {'value': 'value'}
+    _toPy = {'value': 'value'}
+    def __init__(self, value=None, **unknown_fields):
+        '''
+        value : Value
+        '''
+        self.value = Value.from_json(value) if value else None
+
+
+
+class ModelInstanceTypesConstraints(Type):
+    _toSchema = {'constraints': 'constraints'}
+    _toPy = {'constraints': 'constraints'}
+    def __init__(self, constraints=None, **unknown_fields):
+        '''
+        constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
+        '''
+        self.constraints = [ModelInstanceTypesConstraint.from_json(o) for o in constraints or []]
+
+
+
+class ModelMachineInfo(Type):
+    _toSchema = {'hardware': 'hardware', 'has_vote': 'has-vote', 'id_': 'id', 'instance_id': 'instance-id', 'status': 'status', 'wants_vote': 'wants-vote'}
+    _toPy = {'hardware': 'hardware', 'has-vote': 'has_vote', 'id': 'id_', 'instance-id': 'instance_id', 'status': 'status', 'wants-vote': 'wants_vote'}
+    def __init__(self, hardware=None, has_vote=None, id_=None, instance_id=None, status=None, wants_vote=None, **unknown_fields):
+        '''
+        hardware : MachineHardware
+        has_vote : bool
+        id_ : str
+        instance_id : str
+        status : str
+        wants_vote : bool
+        '''
+        self.hardware = MachineHardware.from_json(hardware) if hardware else None
+        self.has_vote = has_vote
+        self.id_ = id_
+        self.instance_id = instance_id
+        self.status = status
+        self.wants_vote = wants_vote
+
+
+
+class ModelMigrationStatus(Type):
+    _toSchema = {'end': 'end', 'start': 'start', 'status': 'status'}
+    _toPy = {'end': 'end', 'start': 'start', 'status': 'status'}
+    def __init__(self, end=None, start=None, status=None, **unknown_fields):
+        '''
+        end : str
+        start : str
+        status : str
+        '''
+        self.end = end
+        self.start = start
+        self.status = status
+
+
+
+class ModelResult(Type):
+    _toSchema = {'error': 'error', 'name': 'name', 'uuid': 'uuid'}
+    _toPy = {'error': 'error', 'name': 'name', 'uuid': 'uuid'}
+    def __init__(self, error=None, name=None, uuid=None, **unknown_fields):
+        '''
+        error : Error
+        name : str
+        uuid : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+        self.uuid = uuid
+
+
+
+class ModelSLA(Type):
+    _toSchema = {'creds': 'creds', 'level': 'level'}
+    _toPy = {'creds': 'creds', 'level': 'level'}
+    def __init__(self, creds=None, level=None, **unknown_fields):
+        '''
+        creds : typing.Sequence<+T_co>[int]
+        level : str
+        '''
+        self.creds = creds
+        self.level = level
+
+
+
+class ModelSLAInfo(Type):
+    _toSchema = {'level': 'level', 'owner': 'owner'}
+    _toPy = {'level': 'level', 'owner': 'owner'}
+    def __init__(self, level=None, owner=None, **unknown_fields):
+        '''
+        level : str
+        owner : str
+        '''
+        self.level = level
+        self.owner = owner
+
+
+
+class ModelSet(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.config = config
+
+
+
+class ModelStatus(Type):
+    _toSchema = {'application_count': 'application-count', 'hosted_machine_count': 'hosted-machine-count', 'life': 'life', 'machines': 'machines', 'model_tag': 'model-tag', 'owner_tag': 'owner-tag'}
+    _toPy = {'application-count': 'application_count', 'hosted-machine-count': 'hosted_machine_count', 'life': 'life', 'machines': 'machines', 'model-tag': 'model_tag', 'owner-tag': 'owner_tag'}
+    def __init__(self, application_count=None, hosted_machine_count=None, life=None, machines=None, model_tag=None, owner_tag=None, **unknown_fields):
+        '''
+        application_count : int
+        hosted_machine_count : int
+        life : str
+        machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo>
+        model_tag : str
+        owner_tag : str
+        '''
+        self.application_count = application_count
+        self.hosted_machine_count = hosted_machine_count
+        self.life = life
+        self.machines = [ModelMachineInfo.from_json(o) for o in machines or []]
+        self.model_tag = model_tag
+        self.owner_tag = owner_tag
+
+
+
+class ModelStatusInfo(Type):
+    _toSchema = {'available_version': 'available-version', 'cloud_tag': 'cloud-tag', 'meter_status': 'meter-status', 'model_status': 'model-status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'version': 'version'}
+    _toPy = {'available-version': 'available_version', 'cloud-tag': 'cloud_tag', 'meter-status': 'meter_status', 'model-status': 'model_status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'version': 'version'}
+    def __init__(self, available_version=None, cloud_tag=None, meter_status=None, model_status=None, name=None, region=None, sla=None, version=None, **unknown_fields):
+        '''
+        available_version : str
+        cloud_tag : str
+        meter_status : MeterStatus
+        model_status : DetailedStatus
+        name : str
+        region : str
+        sla : str
+        version : str
+        '''
+        self.available_version = available_version
+        self.cloud_tag = cloud_tag
+        self.meter_status = MeterStatus.from_json(meter_status) if meter_status else None
+        self.model_status = DetailedStatus.from_json(model_status) if model_status else None
+        self.name = name
+        self.region = region
+        self.sla = sla
+        self.version = version
+
+
+
+class ModelStatusResults(Type):
+    _toSchema = {'models': 'models'}
+    _toPy = {'models': 'models'}
+    def __init__(self, models=None, **unknown_fields):
+        '''
+        models : typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
+        '''
+        self.models = [ModelStatus.from_json(o) for o in models or []]
+
+
+
+class ModelTag(Type):
+    _toSchema = {}
+    _toPy = {}
+    def __init__(self, **unknown_fields):
+        '''
+
+        '''
+        pass
+
+
+
+class ModelUnset(Type):
+    _toSchema = {'keys': 'keys'}
+    _toPy = {'keys': 'keys'}
+    def __init__(self, keys=None, **unknown_fields):
+        '''
+        keys : typing.Sequence<+T_co>[str]
+        '''
+        self.keys = keys
+
+
+
+class ModelUnsetKeys(Type):
+    _toSchema = {'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'keys': 'keys'}
+    _toPy = {'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'keys': 'keys'}
+    def __init__(self, cloud_region=None, cloud_tag=None, keys=None, **unknown_fields):
+        '''
+        cloud_region : str
+        cloud_tag : str
+        keys : typing.Sequence<+T_co>[str]
+        '''
+        self.cloud_region = cloud_region
+        self.cloud_tag = cloud_tag
+        self.keys = keys
+
+
+
+class ModelUserInfo(Type):
+    _toSchema = {'access': 'access', 'display_name': 'display-name', 'last_connection': 'last-connection', 'user': 'user'}
+    _toPy = {'access': 'access', 'display-name': 'display_name', 'last-connection': 'last_connection', 'user': 'user'}
+    def __init__(self, access=None, display_name=None, last_connection=None, user=None, **unknown_fields):
+        '''
+        access : str
+        display_name : str
+        last_connection : str
+        user : str
+        '''
+        self.access = access
+        self.display_name = display_name
+        self.last_connection = last_connection
+        self.user = user
+
+
+
+class ModelUserInfoResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : ModelUserInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = ModelUserInfo.from_json(result) if result else None
+
+
+
+class ModelUserInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult>
+        '''
+        self.results = [ModelUserInfoResult.from_json(o) for o in results or []]
+
+
+
+class ModifyControllerAccess(Type):
+    _toSchema = {'access': 'access', 'action': 'action', 'user_tag': 'user-tag'}
+    _toPy = {'access': 'access', 'action': 'action', 'user-tag': 'user_tag'}
+    def __init__(self, access=None, action=None, user_tag=None, **unknown_fields):
+        '''
+        access : str
+        action : str
+        user_tag : str
+        '''
+        self.access = access
+        self.action = action
+        self.user_tag = user_tag
+
+
+
+class ModifyControllerAccessRequest(Type):
+    _toSchema = {'changes': 'changes'}
+    _toPy = {'changes': 'changes'}
+    def __init__(self, changes=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess>
+        '''
+        self.changes = [ModifyControllerAccess.from_json(o) for o in changes or []]
+
+
+
+class ModifyModelAccess(Type):
+    _toSchema = {'access': 'access', 'action': 'action', 'model_tag': 'model-tag', 'user_tag': 'user-tag'}
+    _toPy = {'access': 'access', 'action': 'action', 'model-tag': 'model_tag', 'user-tag': 'user_tag'}
+    def __init__(self, access=None, action=None, model_tag=None, user_tag=None, **unknown_fields):
+        '''
+        access : str
+        action : str
+        model_tag : str
+        user_tag : str
+        '''
+        self.access = access
+        self.action = action
+        self.model_tag = model_tag
+        self.user_tag = user_tag
+
+
+
+class ModifyModelAccessRequest(Type):
+    _toSchema = {'changes': 'changes'}
+    _toPy = {'changes': 'changes'}
+    def __init__(self, changes=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
+        '''
+        self.changes = [ModifyModelAccess.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]
+        user : str
+        '''
+        self.ssh_keys = ssh_keys
+        self.user = user
+
+
+
+class MongoUpgradeResults(Type):
+    _toSchema = {'ha_members': 'ha-members', 'master': 'master', 'rs_members': 'rs-members'}
+    _toPy = {'ha-members': 'ha_members', 'master': 'master', 'rs-members': 'rs_members'}
+    def __init__(self, ha_members=None, master=None, rs_members=None, **unknown_fields):
+        '''
+        ha_members : typing.Sequence<+T_co>[~HAMember]<~HAMember>
+        master : HAMember
+        rs_members : typing.Sequence<+T_co>[~Member]<~Member>
+        '''
+        self.ha_members = [HAMember.from_json(o) for o in ha_members or []]
+        self.master = HAMember.from_json(master) if master else None
+        self.rs_members = [Member.from_json(o) for o in rs_members or []]
+
+
+
+class MongoVersion(Type):
+    _toSchema = {'engine': 'engine', 'major': 'major', 'minor': 'minor', 'patch': 'patch'}
+    _toPy = {'engine': 'engine', 'major': 'major', 'minor': 'minor', 'patch': 'patch'}
+    def __init__(self, engine=None, major=None, minor=None, patch=None, **unknown_fields):
+        '''
+        engine : str
+        major : int
+        minor : int
+        patch : str
+        '''
+        self.engine = engine
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+
+
+
+class NetworkConfig(Type):
+    _toSchema = {'address': 'address', 'cidr': 'cidr', 'config_type': 'config-type', 'device_index': 'device-index', 'disabled': 'disabled', 'dns_search_domains': 'dns-search-domains', 'dns_servers': 'dns-servers', 'gateway_address': 'gateway-address', 'interface_name': 'interface-name', 'interface_type': 'interface-type', 'mac_address': 'mac-address', 'mtu': 'mtu', 'no_auto_start': 'no-auto-start', 'parent_interface_name': 'parent-interface-name', 'provider_address_id': 'provider-address-id', 'provider_id': 'provider-id', 'provider_space_id': 'provider-space-id', 'provider_subnet_id': 'provider-subnet-id', 'provider_vlan_id': 'provider-vlan-id', 'vlan_tag': 'vlan-tag'}
+    _toPy = {'address': 'address', 'cidr': 'cidr', 'config-type': 'config_type', 'device-index': 'device_index', 'disabled': 'disabled', 'dns-search-domains': 'dns_search_domains', 'dns-servers': 'dns_servers', 'gateway-address': 'gateway_address', 'interface-name': 'interface_name', 'interface-type': 'interface_type', 'mac-address': 'mac_address', 'mtu': 'mtu', 'no-auto-start': 'no_auto_start', 'parent-interface-name': 'parent_interface_name', 'provider-address-id': 'provider_address_id', 'provider-id': 'provider_id', 'provider-space-id': 'provider_space_id', 'provider-subnet-id': 'provider_subnet_id', 'provider-vlan-id': 'provider_vlan_id', 'vlan-tag': 'vlan_tag'}
+    def __init__(self, address=None, cidr=None, config_type=None, device_index=None, disabled=None, dns_search_domains=None, dns_servers=None, gateway_address=None, interface_name=None, interface_type=None, mac_address=None, mtu=None, no_auto_start=None, parent_interface_name=None, provider_address_id=None, provider_id=None, provider_space_id=None, provider_subnet_id=None, provider_vlan_id=None, vlan_tag=None, **unknown_fields):
+        '''
+        address : str
+        cidr : str
+        config_type : str
+        device_index : int
+        disabled : bool
+        dns_search_domains : typing.Sequence<+T_co>[str]
+        dns_servers : typing.Sequence<+T_co>[str]
+        gateway_address : str
+        interface_name : str
+        interface_type : str
+        mac_address : str
+        mtu : int
+        no_auto_start : bool
+        parent_interface_name : str
+        provider_address_id : str
+        provider_id : str
+        provider_space_id : str
+        provider_subnet_id : str
+        provider_vlan_id : str
+        vlan_tag : int
+        '''
+        self.address = address
+        self.cidr = cidr
+        self.config_type = config_type
+        self.device_index = device_index
+        self.disabled = disabled
+        self.dns_search_domains = dns_search_domains
+        self.dns_servers = dns_servers
+        self.gateway_address = gateway_address
+        self.interface_name = interface_name
+        self.interface_type = interface_type
+        self.mac_address = mac_address
+        self.mtu = mtu
+        self.no_auto_start = no_auto_start
+        self.parent_interface_name = parent_interface_name
+        self.provider_address_id = provider_address_id
+        self.provider_id = provider_id
+        self.provider_space_id = provider_space_id
+        self.provider_subnet_id = provider_subnet_id
+        self.provider_vlan_id = provider_vlan_id
+        self.vlan_tag = vlan_tag
+
+
+
+class NetworkInfo(Type):
+    _toSchema = {'addresses': 'addresses', 'interface_name': 'interface-name', 'mac_address': 'mac-address'}
+    _toPy = {'addresses': 'addresses', 'interface-name': 'interface_name', 'mac-address': 'mac_address'}
+    def __init__(self, addresses=None, interface_name=None, mac_address=None, **unknown_fields):
+        '''
+        addresses : typing.Sequence<+T_co>[~InterfaceAddress]<~InterfaceAddress>
+        interface_name : str
+        mac_address : str
+        '''
+        self.addresses = [InterfaceAddress.from_json(o) for o in addresses or []]
+        self.interface_name = interface_name
+        self.mac_address = mac_address
+
+
+
+class NetworkInfoParams(Type):
+    _toSchema = {'bindings': 'bindings', 'unit': 'unit'}
+    _toPy = {'bindings': 'bindings', 'unit': 'unit'}
+    def __init__(self, bindings=None, unit=None, **unknown_fields):
+        '''
+        bindings : typing.Sequence<+T_co>[str]
+        unit : str
+        '''
+        self.bindings = bindings
+        self.unit = unit
+
+
+
+class NetworkInfoResult(Type):
+    _toSchema = {'error': 'error', 'network_info': 'network-info'}
+    _toPy = {'error': 'error', 'network-info': 'network_info'}
+    def __init__(self, error=None, network_info=None, **unknown_fields):
+        '''
+        error : Error
+        network_info : typing.Sequence<+T_co>[~NetworkInfo]<~NetworkInfo>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.network_info = [NetworkInfo.from_json(o) for o in network_info or []]
+
+
+
+class NetworkInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult>
+        '''
+        self.results = results
+
+
+
+class NetworkInterface(Type):
+    _toSchema = {'dns_nameservers': 'dns-nameservers', 'gateway': 'gateway', 'ip_addresses': 'ip-addresses', 'is_up': 'is-up', 'mac_address': 'mac-address', 'space': 'space'}
+    _toPy = {'dns-nameservers': 'dns_nameservers', 'gateway': 'gateway', 'ip-addresses': 'ip_addresses', 'is-up': 'is_up', 'mac-address': 'mac_address', 'space': 'space'}
+    def __init__(self, dns_nameservers=None, gateway=None, ip_addresses=None, is_up=None, mac_address=None, space=None, **unknown_fields):
+        '''
+        dns_nameservers : typing.Sequence<+T_co>[str]
+        gateway : str
+        ip_addresses : typing.Sequence<+T_co>[str]
+        is_up : bool
+        mac_address : str
+        space : str
+        '''
+        self.dns_nameservers = dns_nameservers
+        self.gateway = gateway
+        self.ip_addresses = ip_addresses
+        self.is_up = is_up
+        self.mac_address = mac_address
+        self.space = space
+
+
+
+class NetworkRoute(Type):
+    _toSchema = {'destination_cidr': 'destination-cidr', 'gateway_ip': 'gateway-ip', 'metric': 'metric'}
+    _toPy = {'destination-cidr': 'destination_cidr', 'gateway-ip': 'gateway_ip', 'metric': 'metric'}
+    def __init__(self, destination_cidr=None, gateway_ip=None, metric=None, **unknown_fields):
+        '''
+        destination_cidr : str
+        gateway_ip : str
+        metric : int
+        '''
+        self.destination_cidr = destination_cidr
+        self.gateway_ip = gateway_ip
+        self.metric = metric
+
+
+
+class NotifyWatchResult(Type):
+    _toSchema = {'error': 'error', 'notifywatcherid': 'NotifyWatcherId'}
+    _toPy = {'NotifyWatcherId': 'notifywatcherid', 'error': 'error'}
+    def __init__(self, notifywatcherid=None, error=None, **unknown_fields):
+        '''
+        notifywatcherid : str
+        error : Error
+        '''
+        self.notifywatcherid = notifywatcherid
+        self.error = Error.from_json(error) if error else None
+
+
+
+class NotifyWatchResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+        '''
+        self.results = [NotifyWatchResult.from_json(o) for o in results or []]
+
+
+
+class Number(Type):
+    _toSchema = {'build': 'Build', 'major': 'Major', 'minor': 'Minor', 'patch': 'Patch', 'tag': 'Tag'}
+    _toPy = {'Build': 'build', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch', 'Tag': 'tag'}
+    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None, **unknown_fields):
+        '''
+        build : int
+        major : int
+        minor : int
+        patch : int
+        tag : str
+        '''
+        self.build = build
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+        self.tag = tag
+
+
+
+class Payload(Type):
+    _toSchema = {'class_': 'class', 'id_': 'id', 'labels': 'labels', 'machine': 'machine', 'status': 'status', 'type_': 'type', 'unit': 'unit'}
+    _toPy = {'class': 'class_', 'id': 'id_', 'labels': 'labels', 'machine': 'machine', 'status': 'status', 'type': 'type_', 'unit': 'unit'}
+    def __init__(self, class_=None, id_=None, labels=None, machine=None, status=None, type_=None, unit=None, **unknown_fields):
+        '''
+        class_ : str
+        id_ : str
+        labels : typing.Sequence<+T_co>[str]
+        machine : str
+        status : str
+        type_ : str
+        unit : str
+        '''
+        self.class_ = class_
+        self.id_ = id_
+        self.labels = labels
+        self.machine = machine
+        self.status = status
+        self.type_ = type_
+        self.unit = unit
+
+
+
+class PayloadListArgs(Type):
+    _toSchema = {'patterns': 'patterns'}
+    _toPy = {'patterns': 'patterns'}
+    def __init__(self, patterns=None, **unknown_fields):
+        '''
+        patterns : typing.Sequence<+T_co>[str]
+        '''
+        self.patterns = patterns
+
+
+
+class PayloadListResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~Payload]<~Payload>
+        '''
+        self.results = [Payload.from_json(o) for o in results or []]
+
+
+
+class PayloadResult(Type):
+    _toSchema = {'entity': 'Entity', 'error': 'error', 'not_found': 'not-found', 'payload': 'payload'}
+    _toPy = {'Entity': 'entity', 'error': 'error', 'not-found': 'not_found', 'payload': 'payload'}
+    def __init__(self, entity=None, error=None, not_found=None, payload=None, **unknown_fields):
+        '''
+        entity : Entity
+        error : Error
+        not_found : bool
+        payload : Payload
+        '''
+        self.entity = Entity.from_json(entity) if entity else None
+        self.error = Error.from_json(error) if error else None
+        self.not_found = not_found
+        self.payload = Payload.from_json(payload) if payload else None
+
+
+
+class PayloadResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+        '''
+        self.results = [PayloadResult.from_json(o) for o in results or []]
+
+
+
+class PhaseResult(Type):
+    _toSchema = {'error': 'error', 'phase': 'phase'}
+    _toPy = {'error': 'error', 'phase': 'phase'}
+    def __init__(self, error=None, phase=None, **unknown_fields):
+        '''
+        error : Error
+        phase : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.phase = phase
+
+
+
+class PhaseResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~PhaseResult]<~PhaseResult>
+        '''
+        self.results = [PhaseResult.from_json(o) for o in results or []]
+
+
+
+class Placement(Type):
+    _toSchema = {'directive': 'directive', 'scope': 'scope'}
+    _toPy = {'directive': 'directive', 'scope': 'scope'}
+    def __init__(self, directive=None, scope=None, **unknown_fields):
+        '''
+        directive : str
+        scope : str
+        '''
+        self.directive = directive
+        self.scope = scope
+
+
+
+class PortRange(Type):
+    _toSchema = {'from_port': 'from-port', 'protocol': 'protocol', 'to_port': 'to-port'}
+    _toPy = {'from-port': 'from_port', 'protocol': 'protocol', 'to-port': 'to_port'}
+    def __init__(self, from_port=None, protocol=None, to_port=None, **unknown_fields):
+        '''
+        from_port : int
+        protocol : str
+        to_port : int
+        '''
+        self.from_port = from_port
+        self.protocol = protocol
+        self.to_port = to_port
+
+
+
+class PrivateAddress(Type):
+    _toSchema = {'target': 'target'}
+    _toPy = {'target': 'target'}
+    def __init__(self, target=None, **unknown_fields):
+        '''
+        target : str
+        '''
+        self.target = target
+
+
+
+class PrivateAddressResults(Type):
+    _toSchema = {'private_address': 'private-address'}
+    _toPy = {'private-address': 'private_address'}
+    def __init__(self, private_address=None, **unknown_fields):
+        '''
+        private_address : str
+        '''
+        self.private_address = private_address
+
+
+
+class ProviderInterfaceInfo(Type):
+    _toSchema = {'interface_name': 'interface-name', 'mac_address': 'mac-address', 'provider_id': 'provider-id'}
+    _toPy = {'interface-name': 'interface_name', 'mac-address': 'mac_address', 'provider-id': 'provider_id'}
+    def __init__(self, interface_name=None, mac_address=None, provider_id=None, **unknown_fields):
+        '''
+        interface_name : str
+        mac_address : str
+        provider_id : str
+        '''
+        self.interface_name = interface_name
+        self.mac_address = mac_address
+        self.provider_id = provider_id
+
+
+
+class ProviderInterfaceInfoResult(Type):
+    _toSchema = {'error': 'error', 'interfaces': 'interfaces', 'machine_tag': 'machine-tag'}
+    _toPy = {'error': 'error', 'interfaces': 'interfaces', 'machine-tag': 'machine_tag'}
+    def __init__(self, error=None, interfaces=None, machine_tag=None, **unknown_fields):
+        '''
+        error : Error
+        interfaces : typing.Sequence<+T_co>[~ProviderInterfaceInfo]<~ProviderInterfaceInfo>
+        machine_tag : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.interfaces = [ProviderInterfaceInfo.from_json(o) for o in interfaces or []]
+        self.machine_tag = machine_tag
+
+
+
+class ProviderInterfaceInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult>
+        '''
+        self.results = [ProviderInterfaceInfoResult.from_json(o) for o in results or []]
+
+
+
+class ProviderSpace(Type):
+    _toSchema = {'error': 'error', 'name': 'name', 'provider_id': 'provider-id', 'subnets': 'subnets'}
+    _toPy = {'error': 'error', 'name': 'name', 'provider-id': 'provider_id', 'subnets': 'subnets'}
+    def __init__(self, error=None, name=None, provider_id=None, subnets=None, **unknown_fields):
+        '''
+        error : Error
+        name : str
+        provider_id : str
+        subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+        self.provider_id = provider_id
+        self.subnets = [Subnet.from_json(o) for o in subnets or []]
+
+
+
+class ProvisioningInfo(Type):
+    _toSchema = {'constraints': 'constraints', 'controller_config': 'controller-config', 'endpoint_bindings': 'endpoint-bindings', 'image_metadata': 'image-metadata', 'jobs': 'jobs', 'placement': 'placement', 'series': 'series', 'subnets_to_zones': 'subnets-to-zones', 'tags': 'tags', 'volumes': 'volumes'}
+    _toPy = {'constraints': 'constraints', 'controller-config': 'controller_config', 'endpoint-bindings': 'endpoint_bindings', 'image-metadata': 'image_metadata', 'jobs': 'jobs', 'placement': 'placement', 'series': 'series', 'subnets-to-zones': 'subnets_to_zones', 'tags': 'tags', 'volumes': 'volumes'}
+    def __init__(self, constraints=None, controller_config=None, endpoint_bindings=None, image_metadata=None, jobs=None, placement=None, series=None, subnets_to_zones=None, tags=None, volumes=None, **unknown_fields):
+        '''
+        constraints : Value
+        controller_config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str]
+        image_metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+        jobs : typing.Sequence<+T_co>[str]
+        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>
+        '''
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.controller_config = controller_config
+        self.endpoint_bindings = endpoint_bindings
+        self.image_metadata = [CloudImageMetadata.from_json(o) for o in image_metadata or []]
+        self.jobs = jobs
+        self.placement = placement
+        self.series = series
+        self.subnets_to_zones = subnets_to_zones
+        self.tags = tags
+        self.volumes = [VolumeParams.from_json(o) for o in volumes or []]
+
+
+
+class ProvisioningInfoResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : ProvisioningInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = ProvisioningInfo.from_json(result) if result else None
+
+
+
+class ProvisioningInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult>
+        '''
+        self.results = [ProvisioningInfoResult.from_json(o) for o in results or []]
+
+
+
+class ProvisioningScriptParams(Type):
+    _toSchema = {'data_dir': 'data-dir', 'disable_package_commands': 'disable-package-commands', 'machine_id': 'machine-id', 'nonce': 'nonce'}
+    _toPy = {'data-dir': 'data_dir', 'disable-package-commands': 'disable_package_commands', 'machine-id': 'machine_id', 'nonce': 'nonce'}
+    def __init__(self, data_dir=None, disable_package_commands=None, machine_id=None, nonce=None, **unknown_fields):
+        '''
+        data_dir : str
+        disable_package_commands : bool
+        machine_id : str
+        nonce : str
+        '''
+        self.data_dir = data_dir
+        self.disable_package_commands = disable_package_commands
+        self.machine_id = machine_id
+        self.nonce = nonce
+
+
+
+class ProvisioningScriptResult(Type):
+    _toSchema = {'script': 'script'}
+    _toPy = {'script': 'script'}
+    def __init__(self, script=None, **unknown_fields):
+        '''
+        script : str
+        '''
+        self.script = script
+
+
+
+class ProxyConfig(Type):
+    _toSchema = {'ftp': 'ftp', 'http': 'http', 'https': 'https', 'no_proxy': 'no-proxy'}
+    _toPy = {'ftp': 'ftp', 'http': 'http', 'https': 'https', 'no-proxy': 'no_proxy'}
+    def __init__(self, ftp=None, http=None, https=None, no_proxy=None, **unknown_fields):
+        '''
+        ftp : str
+        http : str
+        https : str
+        no_proxy : str
+        '''
+        self.ftp = ftp
+        self.http = http
+        self.https = https
+        self.no_proxy = no_proxy
+
+
+
+class ProxyConfigResult(Type):
+    _toSchema = {'apt_proxy_settings': 'apt-proxy-settings', 'error': 'error', 'proxy_settings': 'proxy-settings'}
+    _toPy = {'apt-proxy-settings': 'apt_proxy_settings', 'error': 'error', 'proxy-settings': 'proxy_settings'}
+    def __init__(self, apt_proxy_settings=None, error=None, proxy_settings=None, **unknown_fields):
+        '''
+        apt_proxy_settings : ProxyConfig
+        error : Error
+        proxy_settings : ProxyConfig
+        '''
+        self.apt_proxy_settings = ProxyConfig.from_json(apt_proxy_settings) if apt_proxy_settings else None
+        self.error = Error.from_json(error) if error else None
+        self.proxy_settings = ProxyConfig.from_json(proxy_settings) if proxy_settings else None
+
+
+
+class ProxyConfigResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult>
+        '''
+        self.results = [ProxyConfigResult.from_json(o) for o in results or []]
+
+
+
+class PublicAddress(Type):
+    _toSchema = {'target': 'target'}
+    _toPy = {'target': 'target'}
+    def __init__(self, target=None, **unknown_fields):
+        '''
+        target : str
+        '''
+        self.target = target
+
+
+
+class PublicAddressResults(Type):
+    _toSchema = {'public_address': 'public-address'}
+    _toPy = {'public-address': 'public_address'}
+    def __init__(self, public_address=None, **unknown_fields):
+        '''
+        public_address : str
+        '''
+        self.public_address = public_address
+
+
+
+class RebootActionResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class RebootActionResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult>
+        '''
+        self.results = [RebootActionResult.from_json(o) for o in results or []]
+
+
+
+class RegionDefaults(Type):
+    _toSchema = {'region_name': 'region-name', 'value': 'value'}
+    _toPy = {'region-name': 'region_name', 'value': 'value'}
+    def __init__(self, region_name=None, value=None, **unknown_fields):
+        '''
+        region_name : str
+        value : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.region_name = region_name
+        self.value = value
+
+
+
+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]
+        id_ : int
+        life : str
+        '''
+        self.changedunits = changedunits
+        self.departedunits = departedunits
+        self.id_ = id_
+        self.life = life
+
+
+
+class RelationIds(Type):
+    _toSchema = {'relation_ids': 'relation-ids'}
+    _toPy = {'relation-ids': 'relation_ids'}
+    def __init__(self, relation_ids=None, **unknown_fields):
+        '''
+        relation_ids : typing.Sequence<+T_co>[int]
+        '''
+        self.relation_ids = relation_ids
+
+
+
+class RelationResult(Type):
+    _toSchema = {'endpoint': 'endpoint', 'error': 'error', 'id_': 'id', 'key': 'key', 'life': 'life'}
+    _toPy = {'endpoint': 'endpoint', 'error': 'error', 'id': 'id_', 'key': 'key', 'life': 'life'}
+    def __init__(self, endpoint=None, error=None, id_=None, key=None, life=None, **unknown_fields):
+        '''
+        endpoint : Endpoint
+        error : Error
+        id_ : int
+        key : str
+        life : str
+        '''
+        self.endpoint = Endpoint.from_json(endpoint) if endpoint else None
+        self.error = Error.from_json(error) if error else None
+        self.id_ = id_
+        self.key = key
+        self.life = life
+
+
+
+class RelationResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
+        '''
+        self.results = [RelationResult.from_json(o) for o in results or []]
+
+
+
+class RelationStatus(Type):
+    _toSchema = {'endpoints': 'endpoints', 'id_': 'id', 'interface': 'interface', 'key': 'key', 'scope': 'scope'}
+    _toPy = {'endpoints': 'endpoints', 'id': 'id_', 'interface': 'interface', 'key': 'key', 'scope': 'scope'}
+    def __init__(self, endpoints=None, id_=None, interface=None, key=None, scope=None, **unknown_fields):
+        '''
+        endpoints : typing.Sequence<+T_co>[~EndpointStatus]<~EndpointStatus>
+        id_ : int
+        interface : str
+        key : str
+        scope : str
+        '''
+        self.endpoints = [EndpointStatus.from_json(o) for o in endpoints or []]
+        self.id_ = id_
+        self.interface = interface
+        self.key = key
+        self.scope = scope
+
+
+
+class RelationUnit(Type):
+    _toSchema = {'relation': 'relation', 'unit': 'unit'}
+    _toPy = {'relation': 'relation', 'unit': 'unit'}
+    def __init__(self, relation=None, unit=None, **unknown_fields):
+        '''
+        relation : str
+        unit : str
+        '''
+        self.relation = relation
+        self.unit = unit
+
+
+
+class RelationUnitChange(Type):
+    _toSchema = {'settings': 'settings'}
+    _toPy = {'settings': 'settings'}
+    def __init__(self, settings=None, **unknown_fields):
+        '''
+        settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        '''
+        self.settings = settings
+
+
+
+class RelationUnitPair(Type):
+    _toSchema = {'local_unit': 'local-unit', 'relation': 'relation', 'remote_unit': 'remote-unit'}
+    _toPy = {'local-unit': 'local_unit', 'relation': 'relation', 'remote-unit': 'remote_unit'}
+    def __init__(self, local_unit=None, relation=None, remote_unit=None, **unknown_fields):
+        '''
+        local_unit : str
+        relation : str
+        remote_unit : str
+        '''
+        self.local_unit = local_unit
+        self.relation = relation
+        self.remote_unit = remote_unit
+
+
+
+class RelationUnitPairs(Type):
+    _toSchema = {'relation_unit_pairs': 'relation-unit-pairs'}
+    _toPy = {'relation-unit-pairs': 'relation_unit_pairs'}
+    def __init__(self, relation_unit_pairs=None, **unknown_fields):
+        '''
+        relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
+        '''
+        self.relation_unit_pairs = [RelationUnitPair.from_json(o) for o in relation_unit_pairs or []]
+
+
+
+class RelationUnitSettings(Type):
+    _toSchema = {'relation': 'relation', 'settings': 'settings', 'unit': 'unit'}
+    _toPy = {'relation': 'relation', 'settings': 'settings', 'unit': 'unit'}
+    def __init__(self, relation=None, settings=None, unit=None, **unknown_fields):
+        '''
+        relation : str
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        unit : str
+        '''
+        self.relation = relation
+        self.settings = settings
+        self.unit = unit
+
+
+
+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>
+        '''
+        self.relation_units = [RelationUnit.from_json(o) for o in relation_units or []]
+
+
+
+class RelationUnitsChange(Type):
+    _toSchema = {'changed': 'changed', 'departed': 'departed'}
+    _toPy = {'changed': 'changed', 'departed': 'departed'}
+    def __init__(self, changed=None, departed=None, **unknown_fields):
+        '''
+        changed : typing.Mapping<~KT, +VT_co>[str, ~UnitSettings]<~UnitSettings>
+        departed : typing.Sequence<+T_co>[str]
+        '''
+        self.changed = changed
+        self.departed = departed
+
+
+
+class RelationUnitsSettings(Type):
+    _toSchema = {'relation_units': 'relation-units'}
+    _toPy = {'relation-units': 'relation_units'}
+    def __init__(self, relation_units=None, **unknown_fields):
+        '''
+        relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
+        '''
+        self.relation_units = [RelationUnitSettings.from_json(o) for o in relation_units or []]
+
+
+
+class RelationUnitsWatchResult(Type):
+    _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'}
+    _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
+    def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
+        '''
+        changes : RelationUnitsChange
+        error : Error
+        watcher_id : str
+        '''
+        self.changes = RelationUnitsChange.from_json(changes) if changes else None
+        self.error = Error.from_json(error) if error else None
+        self.watcher_id = watcher_id
+
+
+
+class RelationUnitsWatchResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
+        '''
+        self.results = [RelationUnitsWatchResult.from_json(o) for o in results or []]
+
+
+
+class RemoteApplicationChange(Type):
+    _toSchema = {'application_tag': 'application-tag', 'life': 'life', 'relations': 'relations'}
+    _toPy = {'application-tag': 'application_tag', 'life': 'life', 'relations': 'relations'}
+    def __init__(self, application_tag=None, life=None, relations=None, **unknown_fields):
+        '''
+        application_tag : str
+        life : str
+        relations : RemoteRelationsChange
+        '''
+        self.application_tag = application_tag
+        self.life = life
+        self.relations = RemoteRelationsChange.from_json(relations) if relations else None
+
+
+
+class RemoteApplicationInfo(Type):
+    _toSchema = {'application_url': 'application-url', 'description': 'description', 'endpoints': 'endpoints', 'icon_url_path': 'icon-url-path', 'model_tag': 'model-tag', 'name': 'name', 'source_model_label': 'source-model-label'}
+    _toPy = {'application-url': 'application_url', 'description': 'description', 'endpoints': 'endpoints', 'icon-url-path': 'icon_url_path', 'model-tag': 'model_tag', 'name': 'name', 'source-model-label': 'source_model_label'}
+    def __init__(self, application_url=None, description=None, endpoints=None, icon_url_path=None, model_tag=None, name=None, source_model_label=None, **unknown_fields):
+        '''
+        application_url : str
+        description : str
+        endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
+        icon_url_path : str
+        model_tag : str
+        name : str
+        source_model_label : str
+        '''
+        self.application_url = application_url
+        self.description = description
+        self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []]
+        self.icon_url_path = icon_url_path
+        self.model_tag = model_tag
+        self.name = name
+        self.source_model_label = source_model_label
+
+
+
+class RemoteApplicationInfoResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : RemoteApplicationInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = RemoteApplicationInfo.from_json(result) if result else None
+
+
+
+class RemoteApplicationInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult>
+        '''
+        self.results = [RemoteApplicationInfoResult.from_json(o) for o in results or []]
+
+
+
+class RemoteApplicationStatus(Type):
+    _toSchema = {'application_name': 'application-name', 'application_url': 'application-url', 'endpoints': 'endpoints', 'err': 'err', 'life': 'life', 'relations': 'relations', 'status': 'status'}
+    _toPy = {'application-name': 'application_name', 'application-url': 'application_url', 'endpoints': 'endpoints', 'err': 'err', 'life': 'life', 'relations': 'relations', 'status': 'status'}
+    def __init__(self, application_name=None, application_url=None, endpoints=None, err=None, life=None, relations=None, status=None, **unknown_fields):
+        '''
+        application_name : str
+        application_url : str
+        endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
+        err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        life : str
+        relations : typing.Sequence<+T_co>[str]
+        status : DetailedStatus
+        '''
+        self.application_name = application_name
+        self.application_url = application_url
+        self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []]
+        self.err = err
+        self.life = life
+        self.relations = relations
+        self.status = DetailedStatus.from_json(status) if status else None
+
+
+
+class RemoteApplicationWatchResult(Type):
+    _toSchema = {'change': 'change', 'error': 'error', 'id_': 'id'}
+    _toPy = {'change': 'change', 'error': 'error', 'id': 'id_'}
+    def __init__(self, change=None, error=None, id_=None, **unknown_fields):
+        '''
+        change : RemoteApplicationChange
+        error : Error
+        id_ : str
+        '''
+        self.change = RemoteApplicationChange.from_json(change) if change else None
+        self.error = Error.from_json(error) if error else None
+        self.id_ = id_
+
+
+
+class RemoteEndpoint(Type):
+    _toSchema = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'role': 'role', 'scope': 'scope'}
+    _toPy = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'role': 'role', 'scope': 'scope'}
+    def __init__(self, interface=None, limit=None, name=None, role=None, scope=None, **unknown_fields):
+        '''
+        interface : str
+        limit : int
+        name : str
+        role : str
+        scope : str
+        '''
+        self.interface = interface
+        self.limit = limit
+        self.name = name
+        self.role = role
+        self.scope = scope
+
+
+
+class RemoteEntityId(Type):
+    _toSchema = {'model_uuid': 'model-uuid', 'token': 'token'}
+    _toPy = {'model-uuid': 'model_uuid', 'token': 'token'}
+    def __init__(self, model_uuid=None, token=None, **unknown_fields):
+        '''
+        model_uuid : str
+        token : str
+        '''
+        self.model_uuid = model_uuid
+        self.token = token
+
+
+
+class 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]
+        id_ : int
+        life : str
+        '''
+        self.changed_units = changed_units
+        self.departed_units = departed_units
+        self.id_ = id_
+        self.life = life
+
+
+
+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
+        '''
+        self.settings = settings
+        self.unit_id = RemoteEntityId.from_json(unit_id) if unit_id else None
+
+
+
+class RemoteRelationsChange(Type):
+    _toSchema = {'changed': 'changed', 'initial': 'initial', 'removed': 'removed'}
+    _toPy = {'changed': 'changed', 'initial': 'initial', 'removed': 'removed'}
+    def __init__(self, changed=None, initial=None, removed=None, **unknown_fields):
+        '''
+        changed : typing.Sequence<+T_co>[~RemoteRelationChange]<~RemoteRelationChange>
+        initial : bool
+        removed : typing.Sequence<+T_co>[int]
+        '''
+        self.changed = [RemoteRelationChange.from_json(o) for o in changed or []]
+        self.initial = initial
+        self.removed = removed
+
+
+
+class RemoteRelationsWatchResult(Type):
+    _toSchema = {'change': 'change', 'error': 'error', 'remoterelationswatcherid': 'RemoteRelationsWatcherId'}
+    _toPy = {'RemoteRelationsWatcherId': 'remoterelationswatcherid', 'change': 'change', 'error': 'error'}
+    def __init__(self, remoterelationswatcherid=None, change=None, error=None, **unknown_fields):
+        '''
+        remoterelationswatcherid : str
+        change : RemoteRelationsChange
+        error : Error
+        '''
+        self.remoterelationswatcherid = remoterelationswatcherid
+        self.change = RemoteRelationsChange.from_json(change) if change else None
+        self.error = Error.from_json(error) if error else None
+
+
+
+class RemoteSpace(Type):
+    _toSchema = {'cloud_type': 'cloud-type', 'name': 'name', 'provider_attributes': 'provider-attributes', 'provider_id': 'provider-id', 'subnets': 'subnets'}
+    _toPy = {'cloud-type': 'cloud_type', 'name': 'name', 'provider-attributes': 'provider_attributes', 'provider-id': 'provider_id', 'subnets': 'subnets'}
+    def __init__(self, cloud_type=None, name=None, provider_attributes=None, provider_id=None, subnets=None, **unknown_fields):
+        '''
+        cloud_type : str
+        name : str
+        provider_attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        provider_id : str
+        subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+        '''
+        self.cloud_type = cloud_type
+        self.name = name
+        self.provider_attributes = provider_attributes
+        self.provider_id = provider_id
+        self.subnets = [Subnet.from_json(o) for o in subnets or []]
+
+
+
+class RemoveBlocksArgs(Type):
+    _toSchema = {'all_': 'all'}
+    _toPy = {'all': 'all_'}
+    def __init__(self, all_=None, **unknown_fields):
+        '''
+        all_ : bool
+        '''
+        self.all_ = all_
+
+
+
+class ResolveCharmResult(Type):
+    _toSchema = {'error': 'error', 'url': 'url'}
+    _toPy = {'error': 'error', 'url': 'url'}
+    def __init__(self, error=None, url=None, **unknown_fields):
+        '''
+        error : str
+        url : str
+        '''
+        self.error = error
+        self.url = url
+
+
+
+class ResolveCharmResults(Type):
+    _toSchema = {'urls': 'urls'}
+    _toPy = {'urls': 'urls'}
+    def __init__(self, urls=None, **unknown_fields):
+        '''
+        urls : typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult>
+        '''
+        self.urls = [ResolveCharmResult.from_json(o) for o in urls or []]
+
+
+
+class ResolveCharms(Type):
+    _toSchema = {'references': 'references'}
+    _toPy = {'references': 'references'}
+    def __init__(self, references=None, **unknown_fields):
+        '''
+        references : typing.Sequence<+T_co>[str]
+        '''
+        self.references = references
+
+
+
+class Resolved(Type):
+    _toSchema = {'retry': 'retry', 'unit_name': 'unit-name'}
+    _toPy = {'retry': 'retry', 'unit-name': 'unit_name'}
+    def __init__(self, retry=None, unit_name=None, **unknown_fields):
+        '''
+        retry : bool
+        unit_name : str
+        '''
+        self.retry = retry
+        self.unit_name = unit_name
+
+
+
+class ResolvedModeResult(Type):
+    _toSchema = {'error': 'error', 'mode': 'mode'}
+    _toPy = {'error': 'error', 'mode': 'mode'}
+    def __init__(self, error=None, mode=None, **unknown_fields):
+        '''
+        error : Error
+        mode : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.mode = mode
+
+
+
+class ResolvedModeResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
+        '''
+        self.results = [ResolvedModeResult.from_json(o) for o in results or []]
+
+
+
+class Resource(Type):
+    _toSchema = {'application': 'application', 'charmresource': 'CharmResource', 'id_': 'id', 'pending_id': 'pending-id', 'timestamp': 'timestamp', 'username': 'username'}
+    _toPy = {'CharmResource': 'charmresource', 'application': 'application', 'id': 'id_', 'pending-id': 'pending_id', 'timestamp': 'timestamp', 'username': 'username'}
+    def __init__(self, charmresource=None, application=None, id_=None, pending_id=None, timestamp=None, username=None, **unknown_fields):
+        '''
+        charmresource : CharmResource
+        application : str
+        id_ : str
+        pending_id : str
+        timestamp : str
+        username : str
+        '''
+        self.charmresource = CharmResource.from_json(charmresource) if charmresource else None
+        self.application = application
+        self.id_ = id_
+        self.pending_id = pending_id
+        self.timestamp = timestamp
+        self.username = username
+
+
+
+class ResourceResult(Type):
+    _toSchema = {'errorresult': 'ErrorResult', 'resource': 'resource'}
+    _toPy = {'ErrorResult': 'errorresult', 'resource': 'resource'}
+    def __init__(self, errorresult=None, resource=None, **unknown_fields):
+        '''
+        errorresult : ErrorResult
+        resource : Resource
+        '''
+        self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
+        self.resource = Resource.from_json(resource) if resource else None
+
+
+
+class ResourcesResult(Type):
+    _toSchema = {'charm_store_resources': 'charm-store-resources', 'errorresult': 'ErrorResult', 'resources': 'resources', 'unit_resources': 'unit-resources'}
+    _toPy = {'ErrorResult': 'errorresult', 'charm-store-resources': 'charm_store_resources', 'resources': 'resources', 'unit-resources': 'unit_resources'}
+    def __init__(self, errorresult=None, charm_store_resources=None, resources=None, unit_resources=None, **unknown_fields):
+        '''
+        errorresult : ErrorResult
+        charm_store_resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
+        resources : typing.Sequence<+T_co>[~Resource]<~Resource>
+        unit_resources : typing.Sequence<+T_co>[~UnitResources]<~UnitResources>
+        '''
+        self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
+        self.charm_store_resources = [CharmResource.from_json(o) for o in charm_store_resources or []]
+        self.resources = [Resource.from_json(o) for o in resources or []]
+        self.unit_resources = [UnitResources.from_json(o) for o in unit_resources or []]
+
+
+
+class ResourcesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult>
+        '''
+        self.results = [ResourcesResult.from_json(o) for o in results or []]
+
+
+
+class RestoreArgs(Type):
+    _toSchema = {'backup_id': 'backup-id'}
+    _toPy = {'backup-id': 'backup_id'}
+    def __init__(self, backup_id=None, **unknown_fields):
+        '''
+        backup_id : str
+        '''
+        self.backup_id = backup_id
+
+
+
+class ResumeReplicationParams(Type):
+    _toSchema = {'members': 'members'}
+    _toPy = {'members': 'members'}
+    def __init__(self, members=None, **unknown_fields):
+        '''
+        members : typing.Sequence<+T_co>[~Member]<~Member>
+        '''
+        self.members = [Member.from_json(o) for o in members or []]
+
+
+
+class RetryStrategy(Type):
+    _toSchema = {'jitter_retry_time': 'jitter-retry-time', 'max_retry_time': 'max-retry-time', 'min_retry_time': 'min-retry-time', 'retry_time_factor': 'retry-time-factor', 'should_retry': 'should-retry'}
+    _toPy = {'jitter-retry-time': 'jitter_retry_time', 'max-retry-time': 'max_retry_time', 'min-retry-time': 'min_retry_time', 'retry-time-factor': 'retry_time_factor', 'should-retry': 'should_retry'}
+    def __init__(self, jitter_retry_time=None, max_retry_time=None, min_retry_time=None, retry_time_factor=None, should_retry=None, **unknown_fields):
+        '''
+        jitter_retry_time : bool
+        max_retry_time : int
+        min_retry_time : int
+        retry_time_factor : int
+        should_retry : bool
+        '''
+        self.jitter_retry_time = jitter_retry_time
+        self.max_retry_time = max_retry_time
+        self.min_retry_time = min_retry_time
+        self.retry_time_factor = retry_time_factor
+        self.should_retry = should_retry
+
+
+
+class RetryStrategyResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : RetryStrategy
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = RetryStrategy.from_json(result) if result else None
+
+
+
+class RetryStrategyResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult>
+        '''
+        self.results = [RetryStrategyResult.from_json(o) for o in results 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]
+        commands : str
+        machines : typing.Sequence<+T_co>[str]
+        timeout : int
+        units : typing.Sequence<+T_co>[str]
+        '''
+        self.applications = applications
+        self.commands = commands
+        self.machines = machines
+        self.timeout = timeout
+        self.units = units
+
+
+
+class SSHAddressResult(Type):
+    _toSchema = {'address': 'address', 'error': 'error'}
+    _toPy = {'address': 'address', 'error': 'error'}
+    def __init__(self, address=None, error=None, **unknown_fields):
+        '''
+        address : str
+        error : Error
+        '''
+        self.address = address
+        self.error = Error.from_json(error) if error else None
+
+
+
+class SSHAddressResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
+        '''
+        self.results = [SSHAddressResult.from_json(o) for o in results or []]
+
+
+
+class SSHAddressesResult(Type):
+    _toSchema = {'addresses': 'addresses', 'error': 'error'}
+    _toPy = {'addresses': 'addresses', 'error': 'error'}
+    def __init__(self, addresses=None, error=None, **unknown_fields):
+        '''
+        addresses : typing.Sequence<+T_co>[str]
+        error : Error
+        '''
+        self.addresses = addresses
+        self.error = Error.from_json(error) if error else None
+
+
+
+class SSHAddressesResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult>
+        '''
+        self.results = [SSHAddressesResult.from_json(o) for o in results or []]
+
+
+
+class SSHHostKeySet(Type):
+    _toSchema = {'entity_keys': 'entity-keys'}
+    _toPy = {'entity-keys': 'entity_keys'}
+    def __init__(self, entity_keys=None, **unknown_fields):
+        '''
+        entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys>
+        '''
+        self.entity_keys = [SSHHostKeys.from_json(o) for o in entity_keys or []]
+
+
+
+class SSHHostKeys(Type):
+    _toSchema = {'public_keys': 'public-keys', 'tag': 'tag'}
+    _toPy = {'public-keys': 'public_keys', 'tag': 'tag'}
+    def __init__(self, public_keys=None, tag=None, **unknown_fields):
+        '''
+        public_keys : typing.Sequence<+T_co>[str]
+        tag : str
+        '''
+        self.public_keys = public_keys
+        self.tag = tag
+
+
+
+class SSHProxyResult(Type):
+    _toSchema = {'use_proxy': 'use-proxy'}
+    _toPy = {'use-proxy': 'use_proxy'}
+    def __init__(self, use_proxy=None, **unknown_fields):
+        '''
+        use_proxy : bool
+        '''
+        self.use_proxy = use_proxy
+
+
+
+class SSHPublicKeysResult(Type):
+    _toSchema = {'error': 'error', 'public_keys': 'public-keys'}
+    _toPy = {'error': 'error', 'public-keys': 'public_keys'}
+    def __init__(self, error=None, public_keys=None, **unknown_fields):
+        '''
+        error : Error
+        public_keys : typing.Sequence<+T_co>[str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.public_keys = public_keys
+
+
+
+class SSHPublicKeysResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
+        '''
+        self.results = [SSHPublicKeysResult.from_json(o) for o in results 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>
+        '''
+        self.bytes_ = bytes_
+        self.charms = charms
+        self.tools = [SerializedModelTools.from_json(o) for o in tools or []]
+
+
+
+class SerializedModelResource(Type):
+    _toSchema = {'application': 'application', 'application_revision': 'application-revision', 'charmstore_revision': 'charmstore-revision', 'name': 'name', 'unit_revisions': 'unit-revisions'}
+    _toPy = {'application': 'application', 'application-revision': 'application_revision', 'charmstore-revision': 'charmstore_revision', 'name': 'name', 'unit-revisions': 'unit_revisions'}
+    def __init__(self, application=None, application_revision=None, charmstore_revision=None, name=None, unit_revisions=None, **unknown_fields):
+        '''
+        application : str
+        application_revision : SerializedModelResourceRevision
+        charmstore_revision : SerializedModelResourceRevision
+        name : str
+        unit_revisions : typing.Mapping<~KT, +VT_co>[str, ~SerializedModelResourceRevision]<~SerializedModelResourceRevision>
+        '''
+        self.application = application
+        self.application_revision = SerializedModelResourceRevision.from_json(application_revision) if application_revision else None
+        self.charmstore_revision = SerializedModelResourceRevision.from_json(charmstore_revision) if charmstore_revision else None
+        self.name = name
+        self.unit_revisions = unit_revisions
+
+
+
+class SerializedModelResourceRevision(Type):
+    _toSchema = {'description': 'description', 'fingerprint': 'fingerprint', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'timestamp': 'timestamp', 'type_': 'type', 'username': 'username'}
+    _toPy = {'description': 'description', 'fingerprint': 'fingerprint', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'timestamp': 'timestamp', 'type': 'type_', 'username': 'username'}
+    def __init__(self, description=None, fingerprint=None, origin=None, path=None, revision=None, size=None, timestamp=None, type_=None, username=None, **unknown_fields):
+        '''
+        description : str
+        fingerprint : str
+        origin : str
+        path : str
+        revision : int
+        size : int
+        timestamp : str
+        type_ : str
+        username : str
+        '''
+        self.description = description
+        self.fingerprint = fingerprint
+        self.origin = origin
+        self.path = path
+        self.revision = revision
+        self.size = size
+        self.timestamp = timestamp
+        self.type_ = type_
+        self.username = username
+
+
+
+class SerializedModelTools(Type):
+    _toSchema = {'uri': 'uri', 'version': 'version'}
+    _toPy = {'uri': 'uri', 'version': 'version'}
+    def __init__(self, uri=None, version=None, **unknown_fields):
+        '''
+        uri : str
+        version : str
+        '''
+        self.uri = uri
+        self.version = version
+
+
+
+class SetConstraints(Type):
+    _toSchema = {'application': 'application', 'constraints': 'constraints'}
+    _toPy = {'application': 'application', 'constraints': 'constraints'}
+    def __init__(self, application=None, constraints=None, **unknown_fields):
+        '''
+        application : str
+        constraints : Value
+        '''
+        self.application = application
+        self.constraints = Value.from_json(constraints) if constraints else None
+
+
+
+class 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>
+        '''
+        self.machine_block_devices = [MachineBlockDevices.from_json(o) for o in machine_block_devices or []]
+
+
+
+class SetMachineNetworkConfig(Type):
+    _toSchema = {'config': 'config', 'tag': 'tag'}
+    _toPy = {'config': 'config', 'tag': 'tag'}
+    def __init__(self, config=None, tag=None, **unknown_fields):
+        '''
+        config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+        tag : str
+        '''
+        self.config = [NetworkConfig.from_json(o) for o in config or []]
+        self.tag = tag
+
+
+
+class SetMachinesAddresses(Type):
+    _toSchema = {'machine_addresses': 'machine-addresses'}
+    _toPy = {'machine-addresses': 'machine_addresses'}
+    def __init__(self, machine_addresses=None, **unknown_fields):
+        '''
+        machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
+        '''
+        self.machine_addresses = [MachineAddresses.from_json(o) for o in machine_addresses or []]
+
+
+
+class SetMigrationPhaseArgs(Type):
+    _toSchema = {'phase': 'phase'}
+    _toPy = {'phase': 'phase'}
+    def __init__(self, phase=None, **unknown_fields):
+        '''
+        phase : str
+        '''
+        self.phase = phase
+
+
+
+class SetMigrationStatusMessageArgs(Type):
+    _toSchema = {'message': 'message'}
+    _toPy = {'message': 'message'}
+    def __init__(self, message=None, **unknown_fields):
+        '''
+        message : str
+        '''
+        self.message = message
+
+
+
+class SetModelAgentVersion(Type):
+    _toSchema = {'version': 'version'}
+    _toPy = {'version': 'version'}
+    def __init__(self, version=None, **unknown_fields):
+        '''
+        version : Number
+        '''
+        self.version = Number.from_json(version) if version else None
+
+
+
+class SetModelDefaults(Type):
+    _toSchema = {'config': 'config'}
+    _toPy = {'config': 'config'}
+    def __init__(self, config=None, **unknown_fields):
+        '''
+        config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
+        '''
+        self.config = [ModelDefaultValues.from_json(o) for o in config or []]
+
+
+
+class SetPayloadStatusArg(Type):
+    _toSchema = {'entity': 'Entity', 'status': 'status'}
+    _toPy = {'Entity': 'entity', 'status': 'status'}
+    def __init__(self, entity=None, status=None, **unknown_fields):
+        '''
+        entity : Entity
+        status : str
+        '''
+        self.entity = Entity.from_json(entity) if entity else None
+        self.status = status
+
+
+
+class SetPayloadStatusArgs(Type):
+    _toSchema = {'args': 'args'}
+    _toPy = {'args': 'args'}
+    def __init__(self, args=None, **unknown_fields):
+        '''
+        args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg>
+        '''
+        self.args = [SetPayloadStatusArg.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>
+        '''
+        self.entities = [EntityStatusArgs.from_json(o) for o in entities or []]
+
+
+
+class SetStatusArg(Type):
+    _toSchema = {'entity': 'Entity', 'status': 'status'}
+    _toPy = {'Entity': 'entity', 'status': 'status'}
+    def __init__(self, entity=None, status=None, **unknown_fields):
+        '''
+        entity : Entity
+        status : str
+        '''
+        self.entity = Entity.from_json(entity) if entity else None
+        self.status = status
+
+
+
+class SetStatusArgs(Type):
+    _toSchema = {'args': 'args'}
+    _toPy = {'args': 'args'}
+    def __init__(self, args=None, **unknown_fields):
+        '''
+        args : typing.Sequence<+T_co>[~SetStatusArg]<~SetStatusArg>
+        '''
+        self.args = [SetStatusArg.from_json(o) for o in args or []]
+
+
+
+class Settings(Type):
+    _toSchema = {'ftp': 'Ftp', 'http': 'Http', 'https': 'Https', 'noproxy': 'NoProxy'}
+    _toPy = {'Ftp': 'ftp', 'Http': 'http', 'Https': 'https', 'NoProxy': 'noproxy'}
+    def __init__(self, ftp=None, http=None, https=None, noproxy=None, **unknown_fields):
+        '''
+        ftp : str
+        http : str
+        https : str
+        noproxy : str
+        '''
+        self.ftp = ftp
+        self.http = http
+        self.https = https
+        self.noproxy = noproxy
+
+
+
+class SettingsResult(Type):
+    _toSchema = {'error': 'error', 'settings': 'settings'}
+    _toPy = {'error': 'error', 'settings': 'settings'}
+    def __init__(self, error=None, settings=None, **unknown_fields):
+        '''
+        error : Error
+        settings : typing.Mapping<~KT, +VT_co>[str, str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.settings = settings
+
+
+
+class SettingsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
+        '''
+        self.results = [SettingsResult.from_json(o) for o in results or []]
+
+
+
+class SingularClaim(Type):
+    _toSchema = {'controller_tag': 'controller-tag', 'duration': 'duration', 'model_tag': 'model-tag'}
+    _toPy = {'controller-tag': 'controller_tag', 'duration': 'duration', 'model-tag': 'model_tag'}
+    def __init__(self, controller_tag=None, duration=None, model_tag=None, **unknown_fields):
+        '''
+        controller_tag : str
+        duration : int
+        model_tag : str
+        '''
+        self.controller_tag = controller_tag
+        self.duration = duration
+        self.model_tag = model_tag
+
+
+
+class SingularClaims(Type):
+    _toSchema = {'claims': 'claims'}
+    _toPy = {'claims': 'claims'}
+    def __init__(self, claims=None, **unknown_fields):
+        '''
+        claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim>
+        '''
+        self.claims = [SingularClaim.from_json(o) for o in claims or []]
+
+
+
+class Space(Type):
+    _toSchema = {'error': 'error', 'name': 'name', 'subnets': 'subnets'}
+    _toPy = {'error': 'error', 'name': 'name', 'subnets': 'subnets'}
+    def __init__(self, error=None, name=None, subnets=None, **unknown_fields):
+        '''
+        error : Error
+        name : str
+        subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+        self.subnets = [Subnet.from_json(o) for o in subnets or []]
+
+
+
+class SpaceResult(Type):
+    _toSchema = {'error': 'error', 'tag': 'tag'}
+    _toPy = {'error': 'error', 'tag': 'tag'}
+    def __init__(self, error=None, tag=None, **unknown_fields):
+        '''
+        error : Error
+        tag : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.tag = tag
+
+
+
+class SpaceResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult>
+        '''
+        self.results = [SpaceResult.from_json(o) for o in results or []]
+
+
+
+class StateServingInfo(Type):
+    _toSchema = {'api_port': 'api-port', 'ca_private_key': 'ca-private-key', 'cert': 'cert', 'private_key': 'private-key', 'shared_secret': 'shared-secret', 'state_port': 'state-port', 'system_identity': 'system-identity'}
+    _toPy = {'api-port': 'api_port', 'ca-private-key': 'ca_private_key', 'cert': 'cert', 'private-key': 'private_key', 'shared-secret': 'shared_secret', 'state-port': 'state_port', 'system-identity': 'system_identity'}
+    def __init__(self, api_port=None, ca_private_key=None, cert=None, private_key=None, shared_secret=None, state_port=None, system_identity=None, **unknown_fields):
+        '''
+        api_port : int
+        ca_private_key : str
+        cert : str
+        private_key : str
+        shared_secret : str
+        state_port : int
+        system_identity : str
+        '''
+        self.api_port = api_port
+        self.ca_private_key = ca_private_key
+        self.cert = cert
+        self.private_key = private_key
+        self.shared_secret = shared_secret
+        self.state_port = state_port
+        self.system_identity = system_identity
+
+
+
+class StatusHistoryFilter(Type):
+    _toSchema = {'date': 'date', 'delta': 'delta', 'size': 'size'}
+    _toPy = {'date': 'date', 'delta': 'delta', 'size': 'size'}
+    def __init__(self, date=None, delta=None, size=None, **unknown_fields):
+        '''
+        date : str
+        delta : int
+        size : int
+        '''
+        self.date = date
+        self.delta = delta
+        self.size = size
+
+
+
+class StatusHistoryPruneArgs(Type):
+    _toSchema = {'max_history_mb': 'max-history-mb', 'max_history_time': 'max-history-time'}
+    _toPy = {'max-history-mb': 'max_history_mb', 'max-history-time': 'max_history_time'}
+    def __init__(self, max_history_mb=None, max_history_time=None, **unknown_fields):
+        '''
+        max_history_mb : int
+        max_history_time : int
+        '''
+        self.max_history_mb = max_history_mb
+        self.max_history_time = max_history_time
+
+
+
+class StatusHistoryRequest(Type):
+    _toSchema = {'filter_': 'filter', 'historykind': 'historyKind', 'size': 'size', 'tag': 'tag'}
+    _toPy = {'filter': 'filter_', 'historyKind': 'historykind', 'size': 'size', 'tag': 'tag'}
+    def __init__(self, filter_=None, historykind=None, size=None, tag=None, **unknown_fields):
+        '''
+        filter_ : StatusHistoryFilter
+        historykind : str
+        size : int
+        tag : str
+        '''
+        self.filter_ = StatusHistoryFilter.from_json(filter_) if filter_ else None
+        self.historykind = historykind
+        self.size = size
+        self.tag = tag
+
+
+
+class StatusHistoryRequests(Type):
+    _toSchema = {'requests': 'requests'}
+    _toPy = {'requests': 'requests'}
+    def __init__(self, requests=None, **unknown_fields):
+        '''
+        requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest>
+        '''
+        self.requests = [StatusHistoryRequest.from_json(o) for o in requests or []]
+
+
+
+class StatusHistoryResult(Type):
+    _toSchema = {'error': 'error', 'history': 'history'}
+    _toPy = {'error': 'error', 'history': 'history'}
+    def __init__(self, error=None, history=None, **unknown_fields):
+        '''
+        error : Error
+        history : History
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.history = History.from_json(history) if history else None
+
+
+
+class StatusHistoryResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult>
+        '''
+        self.results = [StatusHistoryResult.from_json(o) for o in results or []]
+
+
+
+class StatusParams(Type):
+    _toSchema = {'patterns': 'patterns'}
+    _toPy = {'patterns': 'patterns'}
+    def __init__(self, patterns=None, **unknown_fields):
+        '''
+        patterns : typing.Sequence<+T_co>[str]
+        '''
+        self.patterns = patterns
+
+
+
+class StatusResult(Type):
+    _toSchema = {'data': 'data', 'error': 'error', 'id_': 'id', 'info': 'info', 'life': 'life', 'since': 'since', 'status': 'status'}
+    _toPy = {'data': 'data', 'error': 'error', 'id': 'id_', 'info': 'info', 'life': 'life', 'since': 'since', 'status': 'status'}
+    def __init__(self, data=None, error=None, id_=None, info=None, life=None, since=None, status=None, **unknown_fields):
+        '''
+        data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        error : Error
+        id_ : str
+        info : str
+        life : str
+        since : str
+        status : str
+        '''
+        self.data = data
+        self.error = Error.from_json(error) if error else None
+        self.id_ = id_
+        self.info = info
+        self.life = life
+        self.since = since
+        self.status = status
+
+
+
+class StatusResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+        '''
+        self.results = [StatusResult.from_json(o) for o in results or []]
+
+
+
+class StorageAddParams(Type):
+    _toSchema = {'name': 'name', 'storage': 'storage', 'unit': 'unit'}
+    _toPy = {'name': 'name', 'storage': 'storage', 'unit': 'unit'}
+    def __init__(self, name=None, storage=None, unit=None, **unknown_fields):
+        '''
+        name : str
+        storage : StorageConstraints
+        unit : str
+        '''
+        self.name = name
+        self.storage = StorageConstraints.from_json(storage) if storage else None
+        self.unit = unit
+
+
+
+class StorageAttachment(Type):
+    _toSchema = {'kind': 'kind', 'life': 'life', 'location': 'location', 'owner_tag': 'owner-tag', 'storage_tag': 'storage-tag', 'unit_tag': 'unit-tag'}
+    _toPy = {'kind': 'kind', 'life': 'life', 'location': 'location', 'owner-tag': 'owner_tag', 'storage-tag': 'storage_tag', 'unit-tag': 'unit_tag'}
+    def __init__(self, kind=None, life=None, location=None, owner_tag=None, storage_tag=None, unit_tag=None, **unknown_fields):
+        '''
+        kind : int
+        life : str
+        location : str
+        owner_tag : str
+        storage_tag : str
+        unit_tag : str
+        '''
+        self.kind = kind
+        self.life = life
+        self.location = location
+        self.owner_tag = owner_tag
+        self.storage_tag = storage_tag
+        self.unit_tag = unit_tag
+
+
+
+class StorageAttachmentDetails(Type):
+    _toSchema = {'location': 'location', 'machine_tag': 'machine-tag', 'storage_tag': 'storage-tag', 'unit_tag': 'unit-tag'}
+    _toPy = {'location': 'location', 'machine-tag': 'machine_tag', 'storage-tag': 'storage_tag', 'unit-tag': 'unit_tag'}
+    def __init__(self, location=None, machine_tag=None, storage_tag=None, unit_tag=None, **unknown_fields):
+        '''
+        location : str
+        machine_tag : str
+        storage_tag : str
+        unit_tag : str
+        '''
+        self.location = location
+        self.machine_tag = machine_tag
+        self.storage_tag = storage_tag
+        self.unit_tag = unit_tag
+
+
+
+class StorageAttachmentId(Type):
+    _toSchema = {'storage_tag': 'storage-tag', 'unit_tag': 'unit-tag'}
+    _toPy = {'storage-tag': 'storage_tag', 'unit-tag': 'unit_tag'}
+    def __init__(self, storage_tag=None, unit_tag=None, **unknown_fields):
+        '''
+        storage_tag : str
+        unit_tag : str
+        '''
+        self.storage_tag = storage_tag
+        self.unit_tag = unit_tag
+
+
+
+class StorageAttachmentIds(Type):
+    _toSchema = {'ids': 'ids'}
+    _toPy = {'ids': 'ids'}
+    def __init__(self, ids=None, **unknown_fields):
+        '''
+        ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
+        '''
+        self.ids = [StorageAttachmentId.from_json(o) for o in ids or []]
+
+
+
+class StorageAttachmentIdsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : StorageAttachmentIds
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = StorageAttachmentIds.from_json(result) if result else None
+
+
+
+class StorageAttachmentIdsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
+        '''
+        self.results = [StorageAttachmentIdsResult.from_json(o) for o in results or []]
+
+
+
+class StorageAttachmentResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : StorageAttachment
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = StorageAttachment.from_json(result) if result else None
+
+
+
+class StorageAttachmentResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult>
+        '''
+        self.results = [StorageAttachmentResult.from_json(o) for o in results or []]
+
+
+
+class StorageConstraints(Type):
+    _toSchema = {'count': 'count', 'pool': 'pool', 'size': 'size'}
+    _toPy = {'count': 'count', 'pool': 'pool', 'size': 'size'}
+    def __init__(self, count=None, pool=None, size=None, **unknown_fields):
+        '''
+        count : int
+        pool : str
+        size : int
+        '''
+        self.count = count
+        self.pool = pool
+        self.size = size
+
+
+
+class StorageDetails(Type):
+    _toSchema = {'attachments': 'attachments', 'kind': 'kind', 'owner_tag': 'owner-tag', 'persistent': 'persistent', 'status': 'status', 'storage_tag': 'storage-tag'}
+    _toPy = {'attachments': 'attachments', 'kind': 'kind', 'owner-tag': 'owner_tag', 'persistent': 'persistent', 'status': 'status', 'storage-tag': 'storage_tag'}
+    def __init__(self, attachments=None, kind=None, owner_tag=None, persistent=None, status=None, storage_tag=None, **unknown_fields):
+        '''
+        attachments : typing.Mapping<~KT, +VT_co>[str, ~StorageAttachmentDetails]<~StorageAttachmentDetails>
+        kind : int
+        owner_tag : str
+        persistent : bool
+        status : EntityStatus
+        storage_tag : str
+        '''
+        self.attachments = attachments
+        self.kind = kind
+        self.owner_tag = owner_tag
+        self.persistent = persistent
+        self.status = EntityStatus.from_json(status) if status else None
+        self.storage_tag = storage_tag
+
+
+
+class StorageDetailsListResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : typing.Sequence<+T_co>[~StorageDetails]<~StorageDetails>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = [StorageDetails.from_json(o) for o in result or []]
+
+
+
+class StorageDetailsListResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult>
+        '''
+        self.results = [StorageDetailsListResult.from_json(o) for o in results or []]
+
+
+
+class StorageDetailsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : StorageDetails
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = StorageDetails.from_json(result) if result else None
+
+
+
+class StorageDetailsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StorageDetailsResult]<~StorageDetailsResult>
+        '''
+        self.results = [StorageDetailsResult.from_json(o) for o in results or []]
+
+
+
+class StorageFilter(Type):
+    _toSchema = {}
+    _toPy = {}
+    def __init__(self, **unknown_fields):
+        '''
+
+        '''
+        pass
+
+
+
+class StorageFilters(Type):
+    _toSchema = {'filters': 'filters'}
+    _toPy = {'filters': 'filters'}
+    def __init__(self, filters=None, **unknown_fields):
+        '''
+        filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter>
+        '''
+        self.filters = [StorageFilter.from_json(o) for o in filters or []]
+
+
+
+class StoragePool(Type):
+    _toSchema = {'attrs': 'attrs', 'name': 'name', 'provider': 'provider'}
+    _toPy = {'attrs': 'attrs', 'name': 'name', 'provider': 'provider'}
+    def __init__(self, attrs=None, name=None, provider=None, **unknown_fields):
+        '''
+        attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        name : str
+        provider : str
+        '''
+        self.attrs = attrs
+        self.name = name
+        self.provider = provider
+
+
+
+class StoragePoolFilter(Type):
+    _toSchema = {'names': 'names', 'providers': 'providers'}
+    _toPy = {'names': 'names', 'providers': 'providers'}
+    def __init__(self, names=None, providers=None, **unknown_fields):
+        '''
+        names : typing.Sequence<+T_co>[str]
+        providers : typing.Sequence<+T_co>[str]
+        '''
+        self.names = names
+        self.providers = providers
+
+
+
+class StoragePoolFilters(Type):
+    _toSchema = {'filters': 'filters'}
+    _toPy = {'filters': 'filters'}
+    def __init__(self, filters=None, **unknown_fields):
+        '''
+        filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter>
+        '''
+        self.filters = [StoragePoolFilter.from_json(o) for o in filters or []]
+
+
+
+class StoragePoolsResult(Type):
+    _toSchema = {'error': 'error', 'storage_pools': 'storage-pools'}
+    _toPy = {'error': 'error', 'storage-pools': 'storage_pools'}
+    def __init__(self, error=None, storage_pools=None, **unknown_fields):
+        '''
+        error : Error
+        storage_pools : typing.Sequence<+T_co>[~StoragePool]<~StoragePool>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.storage_pools = [StoragePool.from_json(o) for o in storage_pools or []]
+
+
+
+class StoragePoolsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult>
+        '''
+        self.results = [StoragePoolsResult.from_json(o) for o in results or []]
+
+
+
+class StoragesAddParams(Type):
+    _toSchema = {'storages': 'storages'}
+    _toPy = {'storages': 'storages'}
+    def __init__(self, storages=None, **unknown_fields):
+        '''
+        storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
+        '''
+        self.storages = [StorageAddParams.from_json(o) for o in storages or []]
+
+
+
+class StringBoolResult(Type):
+    _toSchema = {'error': 'error', 'ok': 'ok', 'result': 'result'}
+    _toPy = {'error': 'error', 'ok': 'ok', 'result': 'result'}
+    def __init__(self, error=None, ok=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        ok : bool
+        result : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.ok = ok
+        self.result = result
+
+
+
+class StringBoolResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
+        '''
+        self.results = [StringBoolResult.from_json(o) for o in results or []]
+
+
+
+class StringResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class StringResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StringResult]<~StringResult>
+        '''
+        self.results = [StringResult.from_json(o) for o in results or []]
+
+
+
+class StringsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : typing.Sequence<+T_co>[str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+
+class StringsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+        '''
+        self.results = [StringsResult.from_json(o) for o in results or []]
+
+
+
+class StringsWatchResult(Type):
+    _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'}
+    _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
+    def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
+        '''
+        changes : typing.Sequence<+T_co>[str]
+        error : Error
+        watcher_id : str
+        '''
+        self.changes = changes
+        self.error = Error.from_json(error) if error else None
+        self.watcher_id = watcher_id
+
+
+
+class StringsWatchResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+        '''
+        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<+T_co>[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 Tools(Type):
+    _toSchema = {'sha256': 'sha256', 'size': 'size', 'url': 'url', 'version': 'version'}
+    _toPy = {'sha256': 'sha256', 'size': 'size', 'url': 'url', 'version': 'version'}
+    def __init__(self, sha256=None, size=None, url=None, version=None, **unknown_fields):
+        '''
+        sha256 : str
+        size : int
+        url : str
+        version : Binary
+        '''
+        self.sha256 = sha256
+        self.size = size
+        self.url = url
+        self.version = Binary.from_json(version) if version else None
+
+
+
+class ToolsResult(Type):
+    _toSchema = {'disable_ssl_hostname_verification': 'disable-ssl-hostname-verification', 'error': 'error', 'tools': 'tools'}
+    _toPy = {'disable-ssl-hostname-verification': 'disable_ssl_hostname_verification', 'error': 'error', 'tools': 'tools'}
+    def __init__(self, disable_ssl_hostname_verification=None, error=None, tools=None, **unknown_fields):
+        '''
+        disable_ssl_hostname_verification : bool
+        error : Error
+        tools : typing.Sequence<+T_co>[~Tools]<~Tools>
+        '''
+        self.disable_ssl_hostname_verification = disable_ssl_hostname_verification
+        self.error = Error.from_json(error) if error else None
+        self.tools = [Tools.from_json(o) for o in tools or []]
+
+
+
+class ToolsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
+        '''
+        self.results = [ToolsResult.from_json(o) for o in results or []]
+
+
+
+class TrackArgs(Type):
+    _toSchema = {'payloads': 'payloads'}
+    _toPy = {'payloads': 'payloads'}
+    def __init__(self, payloads=None, **unknown_fields):
+        '''
+        payloads : typing.Sequence<+T_co>[~Payload]<~Payload>
+        '''
+        self.payloads = [Payload.from_json(o) for o in payloads or []]
+
+
+
+class TrackPayloadArgs(Type):
+    _toSchema = {'payloads': 'payloads'}
+    _toPy = {'payloads': 'payloads'}
+    def __init__(self, payloads=None, **unknown_fields):
+        '''
+        payloads : typing.Sequence<+T_co>[~Payload]<~Payload>
+        '''
+        self.payloads = [Payload.from_json(o) for o in payloads or []]
+
+
+
+class UndertakerModelInfo(Type):
+    _toSchema = {'global_name': 'global-name', 'is_system': 'is-system', 'life': 'life', 'name': 'name', 'uuid': 'uuid'}
+    _toPy = {'global-name': 'global_name', 'is-system': 'is_system', 'life': 'life', 'name': 'name', 'uuid': 'uuid'}
+    def __init__(self, global_name=None, is_system=None, life=None, name=None, uuid=None, **unknown_fields):
+        '''
+        global_name : str
+        is_system : bool
+        life : str
+        name : str
+        uuid : str
+        '''
+        self.global_name = global_name
+        self.is_system = is_system
+        self.life = life
+        self.name = name
+        self.uuid = uuid
+
+
+
+class UndertakerModelInfoResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : UndertakerModelInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = UndertakerModelInfo.from_json(result) if result else None
+
+
+
+class UnitNetworkConfig(Type):
+    _toSchema = {'binding_name': 'binding-name', 'unit_tag': 'unit-tag'}
+    _toPy = {'binding-name': 'binding_name', 'unit-tag': 'unit_tag'}
+    def __init__(self, binding_name=None, unit_tag=None, **unknown_fields):
+        '''
+        binding_name : str
+        unit_tag : str
+        '''
+        self.binding_name = binding_name
+        self.unit_tag = unit_tag
+
+
+
+class UnitNetworkConfigResult(Type):
+    _toSchema = {'error': 'error', 'info': 'info'}
+    _toPy = {'error': 'error', 'info': 'info'}
+    def __init__(self, error=None, info=None, **unknown_fields):
+        '''
+        error : Error
+        info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.info = [NetworkConfig.from_json(o) for o in info or []]
+
+
+
+class UnitNetworkConfigResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult>
+        '''
+        self.results = [UnitNetworkConfigResult.from_json(o) for o in results or []]
+
+
+
+class UnitResourceResult(Type):
+    _toSchema = {'errorresult': 'ErrorResult', 'resource': 'resource'}
+    _toPy = {'ErrorResult': 'errorresult', 'resource': 'resource'}
+    def __init__(self, errorresult=None, resource=None, **unknown_fields):
+        '''
+        errorresult : ErrorResult
+        resource : Resource
+        '''
+        self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
+        self.resource = Resource.from_json(resource) if resource else None
+
+
+
+class UnitResources(Type):
+    _toSchema = {'download_progress': 'download-progress', 'entity': 'Entity', 'resources': 'resources'}
+    _toPy = {'Entity': 'entity', 'download-progress': 'download_progress', 'resources': 'resources'}
+    def __init__(self, entity=None, download_progress=None, resources=None, **unknown_fields):
+        '''
+        entity : Entity
+        download_progress : typing.Mapping<~KT, +VT_co>[str, int]
+        resources : typing.Sequence<+T_co>[~Resource]<~Resource>
+        '''
+        self.entity = Entity.from_json(entity) if entity else None
+        self.download_progress = download_progress
+        self.resources = [Resource.from_json(o) for o in resources or []]
+
+
+
+class UnitResourcesResult(Type):
+    _toSchema = {'errorresult': 'ErrorResult', 'resources': 'resources'}
+    _toPy = {'ErrorResult': 'errorresult', 'resources': 'resources'}
+    def __init__(self, errorresult=None, resources=None, **unknown_fields):
+        '''
+        errorresult : ErrorResult
+        resources : typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>
+        '''
+        self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
+        self.resources = [UnitResourceResult.from_json(o) for o in resources or []]
+
+
+
+class UnitSettings(Type):
+    _toSchema = {'version': 'version'}
+    _toPy = {'version': 'version'}
+    def __init__(self, version=None, **unknown_fields):
+        '''
+        version : int
+        '''
+        self.version = version
+
+
+
+class UnitStatus(Type):
+    _toSchema = {'agent_status': 'agent-status', 'charm': 'charm', 'leader': 'leader', 'machine': 'machine', 'opened_ports': 'opened-ports', 'public_address': 'public-address', 'subordinates': 'subordinates', 'workload_status': 'workload-status', 'workload_version': 'workload-version'}
+    _toPy = {'agent-status': 'agent_status', 'charm': 'charm', 'leader': 'leader', 'machine': 'machine', 'opened-ports': 'opened_ports', 'public-address': 'public_address', 'subordinates': 'subordinates', 'workload-status': 'workload_status', 'workload-version': 'workload_version'}
+    def __init__(self, agent_status=None, charm=None, leader=None, machine=None, opened_ports=None, public_address=None, subordinates=None, workload_status=None, workload_version=None, **unknown_fields):
+        '''
+        agent_status : DetailedStatus
+        charm : str
+        leader : bool
+        machine : str
+        opened_ports : typing.Sequence<+T_co>[str]
+        public_address : str
+        subordinates : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus>
+        workload_status : DetailedStatus
+        workload_version : str
+        '''
+        self.agent_status = DetailedStatus.from_json(agent_status) if agent_status else None
+        self.charm = charm
+        self.leader = leader
+        self.machine = machine
+        self.opened_ports = opened_ports
+        self.public_address = public_address
+        self.subordinates = subordinates
+        self.workload_status = DetailedStatus.from_json(workload_status) if workload_status else None
+        self.workload_version = workload_version
+
+
+
+class UnitsNetworkConfig(Type):
+    _toSchema = {'args': 'args'}
+    _toPy = {'args': 'args'}
+    def __init__(self, args=None, **unknown_fields):
+        '''
+        args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig>
+        '''
+        self.args = [UnitNetworkConfig.from_json(o) for o in args or []]
+
+
+
+class UnsetModelDefaults(Type):
+    _toSchema = {'keys': 'keys'}
+    _toPy = {'keys': 'keys'}
+    def __init__(self, keys=None, **unknown_fields):
+        '''
+        keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
+        '''
+        self.keys = [ModelUnsetKeys.from_json(o) for o in keys or []]
+
+
+
+class UpdateBehavior(Type):
+    _toSchema = {'enable_os_refresh_update': 'enable-os-refresh-update', 'enable_os_upgrade': 'enable-os-upgrade'}
+    _toPy = {'enable-os-refresh-update': 'enable_os_refresh_update', 'enable-os-upgrade': 'enable_os_upgrade'}
+    def __init__(self, enable_os_refresh_update=None, enable_os_upgrade=None, **unknown_fields):
+        '''
+        enable_os_refresh_update : bool
+        enable_os_upgrade : bool
+        '''
+        self.enable_os_refresh_update = enable_os_refresh_update
+        self.enable_os_upgrade = enable_os_upgrade
+
+
+
+class UpdateCloudCredential(Type):
+    _toSchema = {'credential': 'credential', 'tag': 'tag'}
+    _toPy = {'credential': 'credential', 'tag': 'tag'}
+    def __init__(self, credential=None, tag=None, **unknown_fields):
+        '''
+        credential : CloudCredential
+        tag : str
+        '''
+        self.credential = CloudCredential.from_json(credential) if credential else None
+        self.tag = tag
+
+
+
+class UpdateCloudCredentials(Type):
+    _toSchema = {'credentials': 'credentials'}
+    _toPy = {'credentials': 'credentials'}
+    def __init__(self, credentials=None, **unknown_fields):
+        '''
+        credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential>
+        '''
+        self.credentials = [UpdateCloudCredential.from_json(o) for o in credentials or []]
+
+
+
+class UpgradeMongoParams(Type):
+    _toSchema = {'target': 'target'}
+    _toPy = {'target': 'target'}
+    def __init__(self, target=None, **unknown_fields):
+        '''
+        target : MongoVersion
+        '''
+        self.target = MongoVersion.from_json(target) if target else None
+
+
+
+class UserAccess(Type):
+    _toSchema = {'access': 'access', 'user_tag': 'user-tag'}
+    _toPy = {'access': 'access', 'user-tag': 'user_tag'}
+    def __init__(self, access=None, user_tag=None, **unknown_fields):
+        '''
+        access : str
+        user_tag : str
+        '''
+        self.access = access
+        self.user_tag = user_tag
+
+
+
+class UserAccessResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : UserAccess
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = UserAccess.from_json(result) if result else None
+
+
+
+class UserAccessResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult>
+        '''
+        self.results = [UserAccessResult.from_json(o) for o in results or []]
+
+
+
+class UserCloud(Type):
+    _toSchema = {'cloud_tag': 'cloud-tag', 'user_tag': 'user-tag'}
+    _toPy = {'cloud-tag': 'cloud_tag', 'user-tag': 'user_tag'}
+    def __init__(self, cloud_tag=None, user_tag=None, **unknown_fields):
+        '''
+        cloud_tag : str
+        user_tag : str
+        '''
+        self.cloud_tag = cloud_tag
+        self.user_tag = user_tag
+
+
+
+class UserClouds(Type):
+    _toSchema = {'user_clouds': 'user-clouds'}
+    _toPy = {'user-clouds': 'user_clouds'}
+    def __init__(self, user_clouds=None, **unknown_fields):
+        '''
+        user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud>
+        '''
+        self.user_clouds = [UserCloud.from_json(o) for o in user_clouds or []]
+
+
+
+class UserInfo(Type):
+    _toSchema = {'access': 'access', 'created_by': 'created-by', 'date_created': 'date-created', 'disabled': 'disabled', 'display_name': 'display-name', 'last_connection': 'last-connection', 'username': 'username'}
+    _toPy = {'access': 'access', 'created-by': 'created_by', 'date-created': 'date_created', 'disabled': 'disabled', 'display-name': 'display_name', 'last-connection': 'last_connection', 'username': 'username'}
+    def __init__(self, access=None, created_by=None, date_created=None, disabled=None, display_name=None, last_connection=None, username=None, **unknown_fields):
+        '''
+        access : str
+        created_by : str
+        date_created : str
+        disabled : bool
+        display_name : str
+        last_connection : str
+        username : str
+        '''
+        self.access = access
+        self.created_by = created_by
+        self.date_created = date_created
+        self.disabled = disabled
+        self.display_name = display_name
+        self.last_connection = last_connection
+        self.username = username
+
+
+
+class UserInfoRequest(Type):
+    _toSchema = {'entities': 'entities', 'include_disabled': 'include-disabled'}
+    _toPy = {'entities': 'entities', 'include-disabled': 'include_disabled'}
+    def __init__(self, entities=None, include_disabled=None, **unknown_fields):
+        '''
+        entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+        include_disabled : bool
+        '''
+        self.entities = [Entity.from_json(o) for o in entities or []]
+        self.include_disabled = include_disabled
+
+
+
+class UserInfoResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : UserInfo
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = UserInfo.from_json(result) if result else None
+
+
+
+class UserInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult>
+        '''
+        self.results = [UserInfoResult.from_json(o) for o in results or []]
+
+
+
+class UserModel(Type):
+    _toSchema = {'last_connection': 'last-connection', 'model': 'model'}
+    _toPy = {'last-connection': 'last_connection', 'model': 'model'}
+    def __init__(self, last_connection=None, model=None, **unknown_fields):
+        '''
+        last_connection : str
+        model : Model
+        '''
+        self.last_connection = last_connection
+        self.model = Model.from_json(model) if model else None
+
+
+
+class UserModelList(Type):
+    _toSchema = {'user_models': 'user-models'}
+    _toPy = {'user-models': 'user_models'}
+    def __init__(self, user_models=None, **unknown_fields):
+        '''
+        user_models : typing.Sequence<+T_co>[~UserModel]<~UserModel>
+        '''
+        self.user_models = [UserModel.from_json(o) for o in user_models or []]
+
+
+
+class Value(Type):
+    _toSchema = {'arch': 'arch', 'container': 'container', 'cores': 'cores', 'cpu_power': 'cpu-power', 'instance_type': 'instance-type', 'mem': 'mem', 'root_disk': 'root-disk', 'spaces': 'spaces', 'tags': 'tags', 'virt_type': 'virt-type'}
+    _toPy = {'arch': 'arch', 'container': 'container', 'cores': 'cores', 'cpu-power': 'cpu_power', 'instance-type': 'instance_type', 'mem': 'mem', 'root-disk': 'root_disk', 'spaces': 'spaces', 'tags': 'tags', 'virt-type': 'virt_type'}
+    def __init__(self, arch=None, container=None, cores=None, cpu_power=None, instance_type=None, mem=None, root_disk=None, spaces=None, tags=None, virt_type=None, **unknown_fields):
+        '''
+        arch : str
+        container : str
+        cores : int
+        cpu_power : int
+        instance_type : str
+        mem : int
+        root_disk : int
+        spaces : typing.Sequence<+T_co>[str]
+        tags : typing.Sequence<+T_co>[str]
+        virt_type : str
+        '''
+        self.arch = arch
+        self.container = container
+        self.cores = cores
+        self.cpu_power = cpu_power
+        self.instance_type = instance_type
+        self.mem = mem
+        self.root_disk = root_disk
+        self.spaces = spaces
+        self.tags = tags
+        self.virt_type = virt_type
+
+
+
+class Version(Type):
+    _toSchema = {'version': 'version'}
+    _toPy = {'version': 'version'}
+    def __init__(self, version=None, **unknown_fields):
+        '''
+        version : Binary
+        '''
+        self.version = Binary.from_json(version) if version else None
+
+
+
+class VersionResult(Type):
+    _toSchema = {'error': 'error', 'version': 'version'}
+    _toPy = {'error': 'error', 'version': 'version'}
+    def __init__(self, error=None, version=None, **unknown_fields):
+        '''
+        error : Error
+        version : Number
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.version = Number.from_json(version) if version else None
+
+
+
+class VersionResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~VersionResult]<~VersionResult>
+        '''
+        self.results = [VersionResult.from_json(o) for o in results or []]
+
+
+
+class Volume(Type):
+    _toSchema = {'info': 'info', 'volume_tag': 'volume-tag'}
+    _toPy = {'info': 'info', 'volume-tag': 'volume_tag'}
+    def __init__(self, info=None, volume_tag=None, **unknown_fields):
+        '''
+        info : VolumeInfo
+        volume_tag : str
+        '''
+        self.info = VolumeInfo.from_json(info) if info else None
+        self.volume_tag = volume_tag
+
+
+
+class VolumeAttachment(Type):
+    _toSchema = {'info': 'info', 'machine_tag': 'machine-tag', 'volume_tag': 'volume-tag'}
+    _toPy = {'info': 'info', 'machine-tag': 'machine_tag', 'volume-tag': 'volume_tag'}
+    def __init__(self, info=None, machine_tag=None, volume_tag=None, **unknown_fields):
+        '''
+        info : VolumeAttachmentInfo
+        machine_tag : str
+        volume_tag : str
+        '''
+        self.info = VolumeAttachmentInfo.from_json(info) if info else None
+        self.machine_tag = machine_tag
+        self.volume_tag = volume_tag
+
+
+
+class VolumeAttachmentDetails(Type):
+    _toSchema = {'life': 'life', 'volumeattachmentinfo': 'VolumeAttachmentInfo'}
+    _toPy = {'VolumeAttachmentInfo': 'volumeattachmentinfo', 'life': 'life'}
+    def __init__(self, volumeattachmentinfo=None, life=None, **unknown_fields):
+        '''
+        volumeattachmentinfo : VolumeAttachmentInfo
+        life : str
+        '''
+        self.volumeattachmentinfo = VolumeAttachmentInfo.from_json(volumeattachmentinfo) if volumeattachmentinfo else None
+        self.life = life
+
+
+
+class VolumeAttachmentInfo(Type):
+    _toSchema = {'bus_address': 'bus-address', 'device_link': 'device-link', 'device_name': 'device-name', 'read_only': 'read-only'}
+    _toPy = {'bus-address': 'bus_address', 'device-link': 'device_link', 'device-name': 'device_name', 'read-only': 'read_only'}
+    def __init__(self, bus_address=None, device_link=None, device_name=None, read_only=None, **unknown_fields):
+        '''
+        bus_address : str
+        device_link : str
+        device_name : str
+        read_only : bool
+        '''
+        self.bus_address = bus_address
+        self.device_link = device_link
+        self.device_name = device_name
+        self.read_only = read_only
+
+
+
+class VolumeAttachmentParams(Type):
+    _toSchema = {'instance_id': 'instance-id', 'machine_tag': 'machine-tag', 'provider': 'provider', 'read_only': 'read-only', 'volume_id': 'volume-id', 'volume_tag': 'volume-tag'}
+    _toPy = {'instance-id': 'instance_id', 'machine-tag': 'machine_tag', 'provider': 'provider', 'read-only': 'read_only', 'volume-id': 'volume_id', 'volume-tag': 'volume_tag'}
+    def __init__(self, instance_id=None, machine_tag=None, provider=None, read_only=None, volume_id=None, volume_tag=None, **unknown_fields):
+        '''
+        instance_id : str
+        machine_tag : str
+        provider : str
+        read_only : bool
+        volume_id : str
+        volume_tag : str
+        '''
+        self.instance_id = instance_id
+        self.machine_tag = machine_tag
+        self.provider = provider
+        self.read_only = read_only
+        self.volume_id = volume_id
+        self.volume_tag = volume_tag
+
+
+
+class VolumeAttachmentParamsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : VolumeAttachmentParams
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = VolumeAttachmentParams.from_json(result) if result else None
+
+
+
+class VolumeAttachmentParamsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult>
+        '''
+        self.results = [VolumeAttachmentParamsResult.from_json(o) for o in results or []]
+
+
+
+class VolumeAttachmentResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : VolumeAttachment
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = VolumeAttachment.from_json(result) if result else None
+
+
+
+class VolumeAttachmentResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~VolumeAttachmentResult]<~VolumeAttachmentResult>
+        '''
+        self.results = [VolumeAttachmentResult.from_json(o) for o in results or []]
+
+
+
+class VolumeAttachments(Type):
+    _toSchema = {'volume_attachments': 'volume-attachments'}
+    _toPy = {'volume-attachments': 'volume_attachments'}
+    def __init__(self, volume_attachments=None, **unknown_fields):
+        '''
+        volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment>
+        '''
+        self.volume_attachments = [VolumeAttachment.from_json(o) for o in volume_attachments or []]
+
+
+
+class VolumeDetails(Type):
+    _toSchema = {'info': 'info', 'machine_attachments': 'machine-attachments', 'status': 'status', 'storage': 'storage', 'volume_tag': 'volume-tag'}
+    _toPy = {'info': 'info', 'machine-attachments': 'machine_attachments', 'status': 'status', 'storage': 'storage', 'volume-tag': 'volume_tag'}
+    def __init__(self, info=None, machine_attachments=None, status=None, storage=None, volume_tag=None, **unknown_fields):
+        '''
+        info : VolumeInfo
+        machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo>
+        status : EntityStatus
+        storage : StorageDetails
+        volume_tag : str
+        '''
+        self.info = VolumeInfo.from_json(info) if info else None
+        self.machine_attachments = machine_attachments
+        self.status = EntityStatus.from_json(status) if status else None
+        self.storage = StorageDetails.from_json(storage) if storage else None
+        self.volume_tag = volume_tag
+
+
+
+class VolumeDetailsListResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : typing.Sequence<+T_co>[~VolumeDetails]<~VolumeDetails>
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = [VolumeDetails.from_json(o) for o in result or []]
+
+
+
+class VolumeDetailsListResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult>
+        '''
+        self.results = [VolumeDetailsListResult.from_json(o) for o in results or []]
+
+
+
+class VolumeFilter(Type):
+    _toSchema = {'machines': 'machines'}
+    _toPy = {'machines': 'machines'}
+    def __init__(self, machines=None, **unknown_fields):
+        '''
+        machines : typing.Sequence<+T_co>[str]
+        '''
+        self.machines = machines
+
+
+
+class VolumeFilters(Type):
+    _toSchema = {'filters': 'filters'}
+    _toPy = {'filters': 'filters'}
+    def __init__(self, filters=None, **unknown_fields):
+        '''
+        filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter>
+        '''
+        self.filters = [VolumeFilter.from_json(o) for o in filters or []]
+
+
+
+class VolumeInfo(Type):
+    _toSchema = {'hardware_id': 'hardware-id', 'persistent': 'persistent', 'size': 'size', 'volume_id': 'volume-id'}
+    _toPy = {'hardware-id': 'hardware_id', 'persistent': 'persistent', 'size': 'size', 'volume-id': 'volume_id'}
+    def __init__(self, hardware_id=None, persistent=None, size=None, volume_id=None, **unknown_fields):
+        '''
+        hardware_id : str
+        persistent : bool
+        size : int
+        volume_id : str
+        '''
+        self.hardware_id = hardware_id
+        self.persistent = persistent
+        self.size = size
+        self.volume_id = volume_id
+
+
+
+class VolumeParams(Type):
+    _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume_tag': 'volume-tag'}
+    _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume-tag': 'volume_tag'}
+    def __init__(self, attachment=None, attributes=None, provider=None, size=None, tags=None, volume_tag=None, **unknown_fields):
+        '''
+        attachment : VolumeAttachmentParams
+        attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+        provider : str
+        size : int
+        tags : typing.Mapping<~KT, +VT_co>[str, str]
+        volume_tag : str
+        '''
+        self.attachment = VolumeAttachmentParams.from_json(attachment) if attachment else None
+        self.attributes = attributes
+        self.provider = provider
+        self.size = size
+        self.tags = tags
+        self.volume_tag = volume_tag
+
+
+
+class VolumeParamsResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : VolumeParams
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = VolumeParams.from_json(result) if result else None
+
+
+
+class VolumeParamsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult>
+        '''
+        self.results = [VolumeParamsResult.from_json(o) for o in results or []]
+
+
+
+class VolumeResult(Type):
+    _toSchema = {'error': 'error', 'result': 'result'}
+    _toPy = {'error': 'error', 'result': 'result'}
+    def __init__(self, error=None, result=None, **unknown_fields):
+        '''
+        error : Error
+        result : Volume
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = Volume.from_json(result) if result else None
+
+
+
+class VolumeResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~VolumeResult]<~VolumeResult>
+        '''
+        self.results = [VolumeResult.from_json(o) for o in results or []]
+
+
+
+class Volumes(Type):
+    _toSchema = {'volumes': 'volumes'}
+    _toPy = {'volumes': 'volumes'}
+    def __init__(self, volumes=None, **unknown_fields):
+        '''
+        volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
+        '''
+        self.volumes = [Volume.from_json(o) for o in volumes or []]
+
+
+
+class WatchContainer(Type):
+    _toSchema = {'container_type': 'container-type', 'machine_tag': 'machine-tag'}
+    _toPy = {'container-type': 'container_type', 'machine-tag': 'machine_tag'}
+    def __init__(self, container_type=None, machine_tag=None, **unknown_fields):
+        '''
+        container_type : str
+        machine_tag : str
+        '''
+        self.container_type = container_type
+        self.machine_tag = machine_tag
+
+
+
+class WatchContainers(Type):
+    _toSchema = {'params': 'params'}
+    _toPy = {'params': 'params'}
+    def __init__(self, params=None, **unknown_fields):
+        '''
+        params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
+        '''
+        self.params = [WatchContainer.from_json(o) for o in params or []]
+
+
+
+class ZoneResult(Type):
+    _toSchema = {'available': 'available', 'error': 'error', 'name': 'name'}
+    _toPy = {'available': 'available', 'error': 'error', 'name': 'name'}
+    def __init__(self, available=None, error=None, name=None, **unknown_fields):
+        '''
+        available : bool
+        error : Error
+        name : str
+        '''
+        self.available = available
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+
+
+
+class ZoneResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None, **unknown_fields):
+        '''
+        results : typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult>
+        '''
+        self.results = [ZoneResult.from_json(o) for o in results or []]
+
+
diff --git a/juju/client/client.py b/juju/client/client.py
new file mode 100644 (file)
index 0000000..89b5248
--- /dev/null
@@ -0,0 +1,34 @@
+'''Replace auto-generated classes with our own, where necessary.
+'''
+
+from . import _client, _definitions, overrides
+
+
+for o in overrides.__all__:
+    if not "Facade" 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!)
+        setattr(_definitions, o, getattr(overrides, o))
+        setattr(_client, o, getattr(overrides, o))
+    # We shouldn't be overriding Facades!
+    else:
+        raise ValueError(
+            "Cannot override a versioned Facade class -- you must patch "
+            "it instead.")
+
+for o in overrides.__patches__:
+    # Patch a versioned Facade.
+    for client_version in _client.CLIENTS.values():
+        try:
+            c_type = getattr(client_version, o)
+        except AttributeError:
+            # Not all the _client<version> modules may have the
+            # facade. That's okay -- we just skip over them.
+            continue
+        o_type = getattr(overrides, o)
+        for a in dir(o_type):
+            if not a.startswith('_'):
+                setattr(c_type, a, getattr(o_type, a))
+
+from ._client import *  # noqa
diff --git a/juju/client/codegen.py b/juju/client/codegen.py
new file mode 100644 (file)
index 0000000..f8a792a
--- /dev/null
@@ -0,0 +1,52 @@
+from collections import defaultdict
+from io import StringIO
+from textwrap import indent
+
+
+class CodeWriter(StringIO):
+    """
+    Blob of text that, when used in the context of facade.py, ends up
+    holding the source code for a Python class and associated methods.
+
+    """
+    INDENT = "    "
+
+    CLASS = 0
+    METHOD = 1
+
+    def write(self, msg, depth=0):
+        if depth:
+            prefix = self.INDENT * depth
+            msg = indent(msg, prefix)
+
+        return super(CodeWriter, self).write(msg)
+
+    def __str__(self):
+        return super(CodeWriter, self).getvalue()
+
+
+class Capture(defaultdict):
+    """
+    A collection of CodeWriter objects, together representing a Python
+    module.
+
+    """
+
+    def __init__(self, default_factory=CodeWriter, *args, **kwargs):
+        super(Capture, self).__init__(default_factory, *args, **kwargs)
+
+    def clear(self, name):
+        """
+        Reset one of the keys in this class, if it exists.
+
+        This is necessary, because we don't worry about de-duplicating
+        the schemas for each version of juju up front, and this gives
+        us a way to sort of de-duplicate on the fly, by resetting a
+        specific CodeWriter instance before we start to write a class
+        into it.
+
+        """
+        try:
+            del self[name]
+        except KeyError:
+            pass
diff --git a/juju/client/connection.py b/juju/client/connection.py
new file mode 100644 (file)
index 0000000..7457391
--- /dev/null
@@ -0,0 +1,623 @@
+import base64
+import io
+import json
+import logging
+import os
+import random
+import shlex
+import ssl
+import string
+import subprocess
+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
+from juju.client import client
+from juju.errors import JujuError, JujuAPIError, JujuConnectionError
+from juju.utils import IdQueue
+
+log = logging.getLogger("websocket")
+
+
+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
+    these objects, this class determines whether the connection is in
+    an 'error', 'connected' or 'disconnected' state.
+
+    Use this class to stay up to date on the health of a connection,
+    and take appropriate action if the connection errors out due to
+    network issues or other unexpected circumstances.
+
+    """
+    ERROR = 'error'
+    CONNECTED = 'connected'
+    DISCONNECTING = 'disconnecting'
+    DISCONNECTED = 'disconnected'
+
+    def __init__(self, connection):
+        self.connection = weakref.ref(connection)
+        self.reconnecting = asyncio.Lock(loop=connection.loop)
+        self.close_called = asyncio.Event(loop=connection.loop)
+        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):
+        """
+        Determine the status of the connection and receiver, and return
+        ERROR, CONNECTED, or DISCONNECTED as appropriate.
+
+        For simplicity, we only consider ourselves to be connected
+        after the Connection class has setup a receiver task. This
+        only happens after the websocket is open, and the connection
+        isn't usable until that receiver has been started.
+
+        """
+        connection = self.connection()
+
+        # the connection instance was destroyed but someone kept
+        # a separate reference to the monitor for some reason
+        if not connection:
+            return self.DISCONNECTED
+
+        # connection cleanly disconnected or not yet opened
+        if not connection.ws:
+            return self.DISCONNECTED
+
+        # close called but not yet complete
+        if self.close_called.is_set():
+            return self.DISCONNECTING
+
+        # connection closed uncleanly (we didn't call connection.close)
+        if self.receiver_stopped.is_set() or not connection.ws.open:
+            return self.ERROR
+
+        # everything is fine!
+        return self.CONNECTED
+
+
+class Connection:
+    """
+    Usage::
+
+        # Connect to an arbitrary api server
+        client = await Connection.connect(
+            api_endpoint, model_uuid, username, password, cacert)
+
+        # 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
+        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
+        self.loop = loop or asyncio.get_event_loop()
+
+        self.__request_id__ = 0
+        self.addr = None
+        self.ws = None
+        self.facades = {}
+        self.messages = IdQueue(loop=self.loop)
+        self.monitor = Monitor(connection=self)
+        if max_frame_size is self.DEFAULT_FRAME_SIZE:
+            max_frame_size = self.MAX_FRAME_SIZE
+        self.max_frame_size = max_frame_size
+
+    @property
+    def is_open(self):
+        return self.monitor.status == Monitor.CONNECTED
+
+    def _get_ssl(self, cert=None):
+        return ssl.create_default_context(
+            purpose=ssl.Purpose.CLIENT_AUTH, cadata=cert)
+
+    async def open(self):
+        if self.uuid:
+            url = "wss://{}/model/{}/api".format(self.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
+
+    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.ws.close()
+        self.ws = None
+
+    async def recv(self, request_id):
+        if not self.is_open:
+            raise websockets.exceptions.ConnectionClosed(0, 'websocket closed')
+        return await self.messages.get(request_id)
+
+    async def receiver(self):
+        try:
+            while self.is_open:
+                result = await utils.run_with_interrupt(
+                    self.ws.recv(),
+                    self.monitor.close_called,
+                    loop=self.loop)
+                if self.monitor.close_called.is_set():
+                    break
+                if result is not None:
+                    result = json.loads(result)
+                    await self.messages.put(result['request-id'], result)
+        except CancelledError:
+            pass
+        except websockets.ConnectionClosed as e:
+            log.warning('Receiver: Connection closed, reconnecting')
+            await self.messages.put_all(e)
+            # the reconnect has to be done as a task because the receiver will
+            # be cancelled by the reconnect and we don't want the reconnect
+            # to be aborted half-way through
+            self.loop.create_task(self.reconnect())
+            return
+        except Exception as e:
+            log.exception("Error in receiver")
+            # make pending listeners aware of the error
+            await self.messages.put_all(e)
+            raise
+        finally:
+            self.monitor.receiver_stopped.set()
+
+    async def pinger(self):
+        '''
+        A Controller can time us out if we are silent for too long. This
+        is especially true in JaaS, which has a fairly strict timeout.
+
+        To prevent timing out, we send a ping every ten seconds.
+
+        '''
+        async def _do_ping():
+            try:
+                await pinger_facade.Ping()
+                await asyncio.sleep(10, loop=self.loop)
+            except CancelledError:
+                pass
+
+        pinger_facade = client.PingerFacade.from_connection(self)
+        try:
+            while True:
+                await utils.run_with_interrupt(
+                    _do_ping(),
+                    self.monitor.close_called,
+                    loop=self.loop)
+                if self.monitor.close_called.is_set():
+                    break
+        finally:
+            self.monitor.pinger_stopped.set()
+            return
+
+    async def rpc(self, msg, encoder=None):
+        self.__request_id__ += 1
+        msg['request-id'] = self.__request_id__
+        if'params' not in msg:
+            msg['params'] = {}
+        if "version" not in msg:
+            msg['version'] = self.facades[msg['type']]
+        outgoing = json.dumps(msg, indent=2, cls=encoder)
+        for attempt in range(3):
+            try:
+                await self.ws.send(outgoing)
+                break
+            except websockets.ConnectionClosed:
+                if attempt == 2:
+                    raise
+                log.warning('RPC: Connection closed, reconnecting')
+                # the reconnect has to be done in a separate task because,
+                # if it is triggered by the pinger, then this RPC call will
+                # be cancelled when the pinger is cancelled by the reconnect,
+                # and we don't want the reconnect to be aborted halfway through
+                await asyncio.wait([self.reconnect()], loop=self.loop)
+        result = await self.recv(msg['request-id'])
+
+        if not result:
+            return result
+
+        if 'error' in result:
+            # API Error Response
+            raise JujuAPIError(result)
+
+        if 'response' not in result:
+            # This may never happen
+            return result
+
+        if 'results' in result['response']:
+            # Check for errors in a result list.
+            errors = []
+            for res in result['response']['results']:
+                if res.get('error', {}).get('message'):
+                    errors.append(res['error']['message'])
+            if errors:
+                raise JujuError(errors)
+
+        elif result['response'].get('error', {}).get('message'):
+            raise JujuError(result['response']['error']['message'])
+
+        return result
+
+    def http_headers(self):
+        """Return dictionary of http headers necessary for making an http
+        connection to the endpoint of this Connection.
+
+        :return: Dictionary of headers
+
+        """
+        if not self.username:
+            return {}
+
+        creds = u'{}:{}'.format(
+            tag.user(self.username),
+            self.password or ''
+        )
+        token = base64.b64encode(creds.encode())
+        return {
+            'Authorization': 'Basic {}'.format(token.decode())
+        }
+
+    def https_connection(self):
+        """Return an https connection to this Connection's endpoint.
+
+        Returns a 3-tuple containing::
+
+            1. The :class:`HTTPSConnection` instance
+            2. Dictionary of auth headers to be used with the connection
+            3. The root url path (str) to be used for requests.
+
+        """
+        endpoint = self.endpoint
+        host, remainder = endpoint.split(':', 1)
+        port = remainder
+        if '/' in remainder:
+            port, _ = remainder.split('/', 1)
+
+        conn = HTTPSConnection(
+            host, int(port),
+            context=self._get_ssl(self.cacert),
+        )
+
+        path = (
+            "/model/{}".format(self.uuid)
+            if self.uuid else ""
+        )
+        return conn, self.http_headers(), path
+
+    async def clone(self):
+        """Return a new Connection, connected to the same websocket endpoint
+        as this one.
+
+        """
+        return await Connection.connect(
+            self.endpoint,
+            self.uuid,
+            self.username,
+            self.password,
+            self.cacert,
+            self.macaroons,
+            self.loop,
+            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,
+        )
+
+    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.
+        """
+        monitor = self.monitor
+        if monitor.reconnecting.locked() or monitor.close_called.is_set():
+            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()
+
+    @classmethod
+    async def connect(
+            cls, endpoint, uuid, username, password, cacert=None,
+            macaroons=None, loop=None, max_frame_size=None):
+        """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.
+
+        """
+        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>
+
+        """
+        jujudata = JujuData()
+
+        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):
+        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
+
+    async def redirect_info(self):
+        try:
+            result = await self.rpc({
+                "type": "Admin",
+                "request": "RedirectInfo",
+                "version": 3,
+            })
+        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]
+
+
+def get_macaroons(controller_name=None):
+    """Decode and return macaroons from default ~/.go-cookies
+
+    """
+    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():
+            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
+    ]
diff --git a/juju/client/facade.py b/juju/client/facade.py
new file mode 100644 (file)
index 0000000..c959e01
--- /dev/null
@@ -0,0 +1,784 @@
+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 . import codegen
+
+_marker = object()
+
+JUJU_VERSION = re.compile('[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']
+
+
+# Map basic types to Python's typing with a callable
+SCHEMA_TO_PYTHON = {
+    'string': str,
+    'integer': int,
+    'float': float,
+    'number': float,
+    'boolean': bool,
+    'object': Any,
+}
+
+
+# Friendly warning message to stick at the top of generated files.
+HEADER = """\
+# DO NOT CHANGE THIS FILE! This file is auto-generated by facade.py.
+# Changes will be overwritten/lost when the file is regenerated.
+
+"""
+
+
+# Classes and helper functions that we'll write to _client.py
+LOOKUP_FACADE = '''
+def lookup_facade(name, version):
+        """
+        Given a facade name and version, attempt to pull that facade out
+        of the correct client<version>.py file.
+
+        """
+        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
+
+
+'''
+
+TYPE_FACTORY = '''
+class TypeFactory:
+    @classmethod
+    def from_connection(cls, connection):
+        """
+        Given a connected Connection object, return an initialized and
+        connected instance of an API Interface matching the name of
+        this class.
+
+        @param connection: initialized Connection object.
+
+        """
+        version = connection.facades[cls.__name__[:-6]]
+
+        c = lookup_facade(cls.__name__, version)
+        c = c()
+        c.connect(connection)
+
+        return c
+
+
+'''
+
+CLIENT_TABLE = '''
+CLIENTS = {{
+    {clients}
+}}
+
+
+'''
+
+
+class KindRegistry(dict):
+    def register(self, name, version, obj):
+        self[name] = {version: {
+            "object": obj,
+        }}
+
+    def lookup(self, name, version=None):
+        """If version is omitted, max version is used"""
+        versions = self.get(name)
+        if not versions:
+            return None
+        if version:
+            return versions[version]
+        return versions[max(versions)]
+
+    def getObj(self, name, version=None):
+        result = self.lookup(name, version)
+        if result:
+            obj = result["object"]
+            return obj
+        return None
+
+
+class TypeRegistry(dict):
+    def get(self, name):
+        # Two way mapping
+        refname = Schema.referenceName(name)
+        if refname not in self:
+            result = TypeVar(refname)
+            self[refname] = result
+            self[result] = refname
+
+        return self[refname]
+
+_types = TypeRegistry()
+_registry = KindRegistry()
+CLASSES = {}
+factories = codegen.Capture()
+
+
+def booler(v):
+    if isinstance(v, str):
+        if v == "false":
+            return False
+    return bool(v)
+
+
+def getRefType(ref):
+    return _types.get(ref)
+
+
+def refType(obj):
+    return getRefType(obj["$ref"])
+
+
+def objType(obj):
+    kind = obj.get('type')
+    if not kind:
+        raise ValueError("%s has no type" % obj)
+    result = SCHEMA_TO_PYTHON.get(kind)
+    if not result:
+        raise ValueError("%s has type %s" % (obj, kind))
+    return result
+
+
+basic_types = [str, bool, int, float]
+
+
+def name_to_py(name):
+    result = name.replace("-", "_")
+    result = result.lower()
+    if keyword.iskeyword(result) or result in dir(builtins):
+        result += "_"
+    return result
+
+
+def strcast(kind, keep_builtins=False):
+    if 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__
+    return kind
+
+
+class Args(list):
+    def __init__(self, defs):
+        self.defs = defs
+        if defs:
+            rtypes = _registry.getObj(_types[defs])
+            if len(rtypes) == 1:
+                if not self.do_explode(rtypes[0][1]):
+                    for name, rtype in rtypes:
+                        self.append((name, rtype))
+            else:
+                for name, rtype in rtypes:
+                    self.append((name, rtype))
+
+    def do_explode(self, kind):
+        if kind in basic_types or type(kind) is typing.TypeVar:
+            return False
+        if not issubclass(kind, (typing.Sequence,
+                                 typing.Mapping)):
+            self.clear()
+            self.extend(Args(kind))
+            return True
+        return False
+
+    def PyToSchemaMapping(self):
+        m = {}
+        for n, rt in self:
+            m[name_to_py(n)] = n
+        return m
+
+    def SchemaToPyMapping(self):
+        m = {}
+        for n, tr in self:
+            m[n] = name_to_py(n)
+        return m
+
+    def _format(self, name, rtype, typed=True):
+        if typed:
+            return "{} : {}".format(
+                name_to_py(name),
+                strcast(rtype)
+            )
+        else:
+            return name_to_py(name)
+
+    def _get_arg_str(self, typed=False, joined=", "):
+        if self:
+            parts = []
+            for item in self:
+                parts.append(self._format(item[0], item[1], typed))
+            if joined:
+                return joined.join(parts)
+            return parts
+        return ''
+
+    def as_kwargs(self):
+        if self:
+            parts = []
+            for item in self:
+                parts.append('{}=None'.format(name_to_py(item[0])))
+            return ', '.join(parts)
+        return ''
+
+    def typed(self):
+        return self._get_arg_str(True)
+
+    def __str__(self):
+        return self._get_arg_str(False)
+
+    def get_doc(self):
+        return self._get_arg_str(True, "\n")
+
+
+def buildTypes(schema, capture):
+    INDENT = "    "
+    for kind in sorted((k for k in _types if not isinstance(k, str)),
+                       key=lambda x: str(x)):
+        name = _types[kind]
+        if name in capture and not name in NAUGHTY_CLASSES:
+            continue
+        args = Args(kind)
+        # Write Factory class for _client.py
+        make_factory(name)
+        # Write actual class
+        source = ["""
+class {}(Type):
+    _toSchema = {}
+    _toPy = {}
+    def __init__(self{}{}, **unknown_fields):
+        '''
+{}
+        '''""".format(
+            name,
+            # pprint these to get stable ordering across regens
+            pprint.pformat(args.PyToSchemaMapping(), width=999),
+            pprint.pformat(args.SchemaToPyMapping(), width=999),
+            ", " if args else "",
+            args.as_kwargs(),
+            textwrap.indent(args.get_doc(), INDENT * 2))
+                  ]
+        assignments = args._get_arg_str(False, False)
+
+        if not args:
+            source.append("{}pass".format(INDENT * 2))
+        else:
+            for arg in args:
+                arg_name = name_to_py(arg[0])
+                arg_type = arg[1]
+                arg_type_name = strcast(arg_type)
+                if arg_type in basic_types:
+                    source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name))
+                elif issubclass(arg_type, typing.Sequence):
+                    value_type = (
+                        arg_type_name.__parameters__[0]
+                        if len(arg_type_name.__parameters__)
+                        else None
+                    )
+                    if type(value_type) is typing.TypeVar:
+                        source.append("{}self.{} = [{}.from_json(o) for o in {} or []]".format(
+                            INDENT * 2, arg_name, strcast(value_type), arg_name))
+                    else:
+                        source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name))
+                elif issubclass(arg_type, typing.Mapping):
+                    value_type = (
+                        arg_type_name.__parameters__[1]
+                        if len(arg_type_name.__parameters__) > 1
+                        else None
+                    )
+                    if type(value_type) is typing.TypeVar:
+                        source.append("{}self.{} = {{k: {}.from_json(v) for k, v in ({} or dict()).items()}}".format(
+                            INDENT * 2, arg_name, strcast(value_type), arg_name))
+                    else:
+                        source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name))
+                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))
+                else:
+                    source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name))
+
+        source = "\n".join(source)
+        capture.clear(name)
+        capture[name].write(source)
+        capture[name].write("\n\n")
+        co = compile(source, __name__, "exec")
+        ns = _getns()
+        exec(co, ns)
+        cls = ns[name]
+        CLASSES[name] = cls
+
+
+def retspec(defs):
+    # return specs
+    # only return 1, so if there is more than one type
+    # we need to include a union
+    # In truth there is only 1 return
+    # Error or the expected Type
+    if not defs:
+        return None
+    if defs in basic_types:
+        return strcast(defs, False)
+    rtypes = _registry.getObj(_types[defs])
+    if not rtypes:
+        return None
+    if len(rtypes) > 1:
+        return Union[tuple([strcast(r[1], True) for r in rtypes])]
+    return strcast(rtypes[0][1], False)
+
+
+def return_type(defs):
+    if not defs:
+        return None
+    rtypes = _registry.getObj(_types[defs])
+    if not rtypes:
+        return None
+    if len(rtypes) > 1:
+        for n, t in rtypes:
+            if n == "Error":
+                continue
+            return t
+    return rtypes[0][1]
+
+
+def type_anno_func(func, defs, is_result=False):
+    annos = {}
+    if not defs:
+        return func
+    rtypes = _registry.getObj(_types[defs])
+    if is_result:
+        kn = "return"
+        if not rtypes:
+            annos[kn] = None
+        elif len(rtypes) > 1:
+            annos[kn] = Union[tuple([r[1] for r in rtypes])]
+        else:
+            annos[kn] = rtypes[0][1]
+    else:
+        for name, rtype in rtypes:
+            name = name_to_py(name)
+            annos[name] = rtype
+    func.__annotations__.update(annos)
+    return func
+
+
+def ReturnMapping(cls):
+    # Annotate the method with a return Type
+    # so the value can be cast
+    def decorator(f):
+        @functools.wraps(f)
+        async def wrapper(*args, **kwargs):
+            nonlocal cls
+            reply = await f(*args, **kwargs)
+            if cls is None:
+                return reply
+            if 'error' in reply:
+                cls = CLASSES['Error']
+            if issubclass(cls, typing.Sequence):
+                result = []
+                item_cls = cls.__parameters__[0]
+                for item in reply:
+                    result.append(item_cls.from_json(item))
+                    """
+                    if 'error' in item:
+                        cls = CLASSES['Error']
+                    else:
+                        cls = item_cls
+                    result.append(cls.from_json(item))
+                    """
+            else:
+                result = cls.from_json(reply['response'])
+
+            return result
+        return wrapper
+    return decorator
+
+
+def makeFunc(cls, name, params, result, async=True):
+    INDENT = "    "
+    args = Args(params)
+    assignments = []
+    toschema = args.PyToSchemaMapping()
+    for arg in args._get_arg_str(False, False):
+        assignments.append("{}_params[\'{}\'] = {}".format(INDENT,
+                                                           toschema[arg],
+                                                           arg))
+    assignments = "\n".join(assignments)
+    res = retspec(result)
+    source = """
+
+@ReturnMapping({rettype})
+{async}def {name}(self{argsep}{args}):
+    '''
+{docstring}
+    Returns -> {res}
+    '''
+    # map input types to rpc msg
+    _params = dict()
+    msg = dict(type='{cls.name}', request='{name}', version={cls.version}, params=_params)
+{assignments}
+    reply = {await}self.rpc(msg)
+    return reply
+
+"""
+
+    fsource = source.format(async="async " if async else "",
+                            name=name,
+                            argsep=", " if args else "",
+                            args=args,
+                            res=res,
+                            rettype=result.__name__ if result else None,
+                            docstring=textwrap.indent(args.get_doc(), INDENT),
+                            cls=cls,
+                            assignments=assignments,
+                            await="await " if async else "")
+    ns = _getns()
+    exec(fsource, ns)
+    func = ns[name]
+    return func, fsource
+
+
+def buildMethods(cls, capture):
+    properties = cls.schema['properties']
+    for methodname in sorted(properties):
+        method, source = _buildMethod(cls, methodname)
+        setattr(cls, methodname, method)
+        capture["{}Facade".format(cls.__name__)].write(source, depth=1)
+
+
+def _buildMethod(cls, name):
+    params = None
+    result = None
+    method = cls.schema['properties'][name]
+    if 'properties' in method:
+        prop = method['properties']
+        spec = prop.get('Params')
+        if spec:
+            params = _types.get(spec['$ref'])
+        spec = prop.get('Result')
+        if spec:
+            if '$ref' in spec:
+                result = _types.get(spec['$ref'])
+            else:
+                result = SCHEMA_TO_PYTHON[spec['type']]
+    return makeFunc(cls, name, params, result)
+
+
+def buildFacade(schema):
+    cls = type(schema.name, (Type,), dict(name=schema.name,
+                                          version=schema.version,
+                                          schema=schema))
+    source = """
+class {name}Facade(Type):
+    name = '{name}'
+    version = {version}
+    schema = {schema}
+    """.format(name=schema.name,
+               version=schema.version,
+               schema=textwrap.indent(pprint.pformat(schema), "    "))
+    return cls, source
+
+
+class TypeEncoder(json.JSONEncoder):
+    def default(self, obj):
+        if isinstance(obj, Type):
+            return obj.serialize()
+        return json.JSONEncoder.default(self, obj)
+
+
+class Type:
+    def connect(self, connection):
+        self.connection = connection
+
+    async def rpc(self, msg):
+        result = await self.connection.rpc(msg, encoder=TypeEncoder)
+        return result
+
+    @classmethod
+    def from_json(cls, data):
+        if isinstance(data, cls):
+            return data
+        if isinstance(data, str):
+            try:
+                data = json.loads(data)
+            except json.JSONDecodeError:
+                raise
+        d = {}
+        for k, v in (data or {}).items():
+            d[cls._toPy.get(k, k)] = v
+
+        try:
+            return cls(**d)
+        except TypeError:
+            raise
+
+    def serialize(self):
+        d = {}
+        for attr, tgt in self._toSchema.items():
+            d[tgt] = getattr(self, attr)
+        return d
+
+    def to_json(self):
+        return json.dumps(self.serialize())
+
+
+class Schema(dict):
+    def __init__(self, schema):
+        self.name = schema['Name']
+        self.version = schema['Version']
+        self.update(schema['Schema'])
+
+    @classmethod
+    def referenceName(cls, ref):
+        if ref.startswith("#/definitions/"):
+            ref = ref.rsplit("/", 1)[-1]
+        return ref
+
+    def resolveDefinition(self, ref):
+        return self['definitions'][self.referenceName(ref)]
+
+    def deref(self, prop, name):
+        if not isinstance(prop, dict):
+            raise TypeError(prop)
+        if "$ref" not in prop:
+            return prop
+
+        target = self.resolveDefinition(prop["$ref"])
+        return target
+
+    def buildDefinitions(self):
+        # here we are building the types out
+        # anything in definitions is a type
+        # but these may contain references themselves
+        # so we dfs to the bottom and build upwards
+        # when a types is already in the registry
+        defs = self.get('definitions')
+        if not defs:
+            return
+        for d, data in defs.items():
+            if d in _registry and not d in NAUGHTY_CLASSES:
+                continue
+            node = self.deref(data, d)
+            kind = node.get("type")
+            if kind == "object":
+                result = self.buildObject(node, d)
+            elif kind == "array":
+                pass
+            _registry.register(d, self.version, result)
+            # XXX: This makes sure that the type gets added to the global
+            # _types dict even if no other type in the schema has a ref
+            # to it.
+            getRefType(d)
+
+    def buildObject(self, node, name=None, d=0):
+        # we don't need to build types recursively here
+        # they are all in definitions already
+        # we only want to include the type reference
+        # which we can derive from the name
+        struct = []
+        add = struct.append
+        props = node.get("properties")
+        pprops = node.get("patternProperties")
+        if props:
+            # Sort these so the __init__ arg list for each Type remains
+            # consistently ordered across regens of client.py
+            for p in sorted(props):
+                prop = props[p]
+                if "$ref" in prop:
+                    add((p, refType(prop)))
+                else:
+                    kind = prop['type']
+                    if kind == "array":
+                        add((p, self.buildArray(prop, d + 1)))
+                    elif kind == "object":
+                        struct.extend(self.buildObject(prop, p, d + 1))
+                    else:
+                        add((p, objType(prop)))
+        if pprops:
+            if ".*" not in pprops:
+                raise ValueError(
+                    "Cannot handle actual pattern in patternProperties %s" %
+                    pprops)
+            pprop = pprops[".*"]
+            if "$ref" in pprop:
+                add((name, Mapping[str, refType(pprop)]))
+                return struct
+            ppkind = pprop["type"]
+            if ppkind == "array":
+                add((name, self.buildArray(pprop, d + 1)))
+            else:
+                add((name, Mapping[str, SCHEMA_TO_PYTHON[ppkind]]))
+
+        if not struct and node.get('additionalProperties', False):
+            add((name, Mapping[str, SCHEMA_TO_PYTHON['object']]))
+
+        return struct
+
+    def buildArray(self, obj, d=0):
+        # return a sequence from an array in the schema
+        if "$ref" in obj:
+            return Sequence[refType(obj)]
+        else:
+            kind = obj.get("type")
+            if kind and kind == "array":
+                items = obj['items']
+                return self.buildArray(items, d + 1)
+            else:
+                return Sequence[objType(obj)]
+
+
+def _getns():
+    ns = {'Type': Type,
+          'typing': typing,
+          'ReturnMapping': ReturnMapping
+          }
+    # Copy our types into the globals of the method
+    for facade in _registry:
+        ns[facade] = _registry.getObj(facade)
+    return ns
+
+
+def make_factory(name):
+    if name in factories:
+        del factories[name]
+    factories[name].write("class {}(TypeFactory):\n    pass\n\n".format(name))
+
+
+def write_facades(captures, options):
+    """
+    Write the Facades to the appropriate _client<version>.py
+
+    """
+    for version in sorted(captures.keys()):
+        filename = "{}/_client{}.py".format(options.output_dir, version)
+        with open(filename, "w") as f:
+            f.write(HEADER)
+            f.write("from juju.client.facade import Type, ReturnMapping\n")
+            f.write("from juju.client._definitions import *\n\n")
+            for key in sorted(
+                    [k for k in captures[version].keys() if "Facade" in k]):
+                print(captures[version][key], file=f)
+
+    # Return the last (most recent) version for use in other routines.
+    return version
+
+
+def write_definitions(captures, options, version):
+    """
+    Write auxillary (non versioned) classes to
+    _definitions.py The auxillary classes currently get
+    written redudantly into each capture object, so we can look in
+    one of them -- we just use the last one from the loop above.
+
+    """
+    with open("{}/_definitions.py".format(options.output_dir), "w") as f:
+        f.write(HEADER)
+        f.write("from juju.client.facade import Type, ReturnMapping\n\n")
+        for key in sorted(
+                [k for k in captures[version].keys() if "Facade" not in k]):
+            print(captures[version][key], file=f)
+
+
+def write_client(captures, options):
+    """
+    Write the TypeFactory classes to _client.py, along with some
+    imports and tables so that we can look up versioned Facades.
+
+    """
+    with open("{}/_client.py".format(options.output_dir), "w") as f:
+        f.write(HEADER)
+        f.write("from juju.client._definitions import *\n\n")
+        clients = ", ".join("_client{}".format(v) for v in captures)
+        f.write("from juju.client import " + clients + "\n\n")
+        f.write(CLIENT_TABLE.format(clients=",\n    ".join(
+            ['"{}": _client{}'.format(v, v) for v in captures])))
+        f.write(LOOKUP_FACADE)
+        f.write(TYPE_FACTORY)
+        for key in sorted([k for k in factories.keys() if "Facade" in k]):
+            print(factories[key], file=f)
+
+
+def generate_facades(options):
+    captures = defaultdict(codegen.Capture)
+    schemas = {}
+    for p in sorted(glob(options.schema)):
+        if 'latest' in p:
+            juju_version = 'latest'
+        else:
+            try:
+                juju_version = re.search(JUJU_VERSION, p).group()
+            except AttributeError:
+                print("Cannot extract a juju version from {}".format(p))
+                print("Schemas must include a juju version in the filename")
+                raise SystemExit(1)
+
+        new_schemas = json.loads(Path(p).read_text("utf-8"))
+        schemas[juju_version] = [Schema(s) for s in new_schemas]
+
+    # Build all of the auxillary (unversioned) classes
+    # TODO: get rid of some of the excess trips through loops in the
+    # called functions.
+    for juju_version in sorted(schemas.keys()):
+        for schema in schemas[juju_version]:
+            schema.buildDefinitions()
+            buildTypes(schema, captures[schema.version])
+
+    # Build the Facade classes
+    for juju_version in sorted(schemas.keys()):
+        for schema in schemas[juju_version]:
+            cls, source = buildFacade(schema)
+            cls_name = "{}Facade".format(schema.name)
+
+            captures[schema.version].clear(cls_name)
+            # Make the factory class for _client.py
+            make_factory(cls_name)
+            # Make the actual class
+            captures[schema.version][cls_name].write(source)
+            # Build the methods for each Facade class.
+            buildMethods(cls, captures[schema.version])
+            # Mark this Facade class as being done for this version --
+            # helps mitigate some excessive looping.
+            CLASSES[schema.name] = cls
+
+    return captures
+
+def setup():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-s", "--schema", default="juju/client/schemas*")
+    parser.add_argument("-o", "--output_dir", default="juju/client")
+    options = parser.parse_args()
+    return options
+
+def main():
+    options = setup()
+
+    # Generate some text blobs
+    captures = generate_facades(options)
+
+    # ... and write them out
+    last_version = write_facades(captures, options)
+    write_definitions(captures, options, last_version)
+    write_client(captures, options)
+
+if __name__ == '__main__':
+    main()
diff --git a/juju/client/overrides.py b/juju/client/overrides.py
new file mode 100644 (file)
index 0000000..f439adb
--- /dev/null
@@ -0,0 +1,275 @@
+from collections import namedtuple
+import re
+
+from .facade import ReturnMapping, Type, TypeEncoder
+from .import _client
+from .import _definitions
+
+
+__all__ = [
+    'Delta',
+    'Number',
+    'Binary',
+    'ConfigValue',
+]
+
+__patches__ = [
+    'ResourcesFacade',
+    'AllWatcherFacade',
+]
+
+
+class Delta(Type):
+    """A single websocket delta.
+
+    :ivar entity: The entity name, e.g. 'unit', 'application'
+    :vartype entity: str
+
+    :ivar type: The delta type, e.g. 'add', 'change', 'remove'
+    :vartype type: str
+
+    :ivar data: The raw delta data
+    :vartype data: dict
+
+    NOTE: The 'data' variable above is being incorrectly cross-linked by a
+    Sphinx bug: https://github.com/sphinx-doc/sphinx/issues/2549
+
+    """
+    _toSchema = {'deltas': 'deltas'}
+    _toPy = {'deltas': 'deltas'}
+
+    def __init__(self, deltas=None):
+        """
+        :param deltas: [str, str, object]
+
+        """
+        self.deltas = deltas
+
+        Change = namedtuple('Change', 'entity type data')
+        change = Change(*self.deltas)
+
+        self.entity = change.entity
+        self.type = change.type
+        self.data = change.data
+
+    @classmethod
+    def from_json(cls, data):
+        return cls(deltas=data)
+
+
+class ResourcesFacade(Type):
+    """Patch parts of ResourcesFacade to make it work.
+    """
+
+    @ReturnMapping(_client.AddPendingResourcesResult)
+    async def AddPendingResources(self, application_tag, charm_url, resources):
+        """Fix the calling signature of AddPendingResources.
+
+        The ResourcesFacade doesn't conform to the standard facade pattern in
+        the Juju source, which leads to the schemagened code not matching up
+        properly with the actual calling convention in the API.  There is work
+        planned to fix this in Juju, but we have to work around it for now.
+
+        application_tag : str
+        charm_url : str
+        resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
+        Returns -> typing.Union[_ForwardRef('ErrorResult'),
+                                typing.Sequence<+T_co>[str]]
+        """
+        # map input types to rpc msg
+        _params = dict()
+        msg = dict(type='Resources',
+                   request='AddPendingResources',
+                   version=1,
+                   params=_params)
+        _params['tag'] = application_tag
+        _params['url'] = charm_url
+        _params['resources'] = resources
+        reply = await self.rpc(msg)
+        return reply
+
+
+class AllWatcherFacade(Type):
+    """
+    Patch rpc method of allwatcher to add in 'id' stuff.
+
+    """
+    async def rpc(self, msg):
+        if not hasattr(self, 'Id'):
+            client = _client.ClientFacade.from_connection(self.connection)
+
+            result = await client.WatchAll()
+            self.Id = result.watcher_id
+
+        msg['Id'] = self.Id
+        result = await self.connection.rpc(msg, encoder=TypeEncoder)
+        return result
+
+
+class Number(_definitions.Number):
+    """
+    This type represents a semver string.
+
+    Because it is not standard JSON, the typical from_json parsing fails and
+    the parsing must be handled specially.
+
+    See https://github.com/juju/version for more info.
+    """
+    numberPat = re.compile(r'^(\d{1,9})\.(\d{1,9})(?:\.|-([a-z]+))(\d{1,9})(\.\d{1,9})?$')  # noqa
+
+    def __init__(self, major=None, minor=None, patch=None, tag=None,
+                 build=None, **unknown_fields):
+        '''
+        major : int
+        minor : int
+        patch : int
+        tag : str
+        build : int
+        '''
+        self.major = int(major or '0')
+        self.minor = int(minor or '0')
+        self.patch = int(patch or '0')
+        self.tag = tag or ''
+        self.build = int(build or '0')
+
+    def __repr__(self):
+        return '<Number major={} minor={} patch={} tag={} build={}>'.format(
+            self.major, self.minor, self.patch, self.tag, self.build)
+
+    def __str__(self):
+        return self.serialize()
+
+    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)
+
+    @classmethod
+    def from_json(cls, data):
+        parsed = None
+        if isinstance(data, cls):
+            return data
+        elif data is None:
+            return cls()
+        elif isinstance(data, dict):
+            parsed = data
+        elif isinstance(data, str):
+            match = cls.numberPat.match(data)
+            if match:
+                parsed = {
+                    'major': match.group(1),
+                    'minor': match.group(2),
+                    'tag': match.group(3),
+                    'patch': match.group(4),
+                    'build': (match.group(5)[1:] if match.group(5)
+                              else 0),
+                }
+        if not parsed:
+            raise TypeError('Unable to parse Number version string: '
+                            '{}'.format(data))
+        d = {}
+        for k, v in parsed.items():
+            d[cls._toPy.get(k, k)] = v
+
+        return cls(**d)
+
+    def serialize(self):
+        s = ""
+        if not self.tag:
+            s = "{}.{}.{}".format(self.major, self.minor, self.patch)
+        else:
+            s = "{}.{}-{}{}".format(self.major, self.minor, self.tag,
+                                    self.patch)
+        if self.build:
+            s = "{}.{}".format(s, self.build)
+        return s
+
+    def to_json(self):
+        return self.serialize()
+
+
+class Binary(_definitions.Binary):
+    """
+    This type represents a semver string with additional series and arch info.
+
+    Because it is not standard JSON, the typical from_json parsing fails and
+    the parsing must be handled specially.
+
+    See https://github.com/juju/version for more info.
+    """
+    binaryPat = re.compile(r'^(\d{1,9})\.(\d{1,9})(?:\.|-([a-z]+))(\d{1,9})(\.\d{1,9})?-([^-]+)-([^-]+)$')  # noqa
+
+    def __init__(self, number=None, series=None, arch=None, **unknown_fields):
+        '''
+        number : Number
+        series : str
+        arch : str
+        '''
+        self.number = Number.from_json(number)
+        self.series = series
+        self.arch = arch
+
+    def __repr__(self):
+        return '<Binary number={} series={} arch={}>'.format(
+            self.number, self.series, self.arch)
+
+    def __str__(self):
+        return self.serialize()
+
+    def __eq__(self, other):
+        return (
+            isinstance(other, type(self)) and
+            other.number == self.number and
+            other.series == self.series and
+            other.arch == self.arch)
+
+    @classmethod
+    def from_json(cls, data):
+        parsed = None
+        if isinstance(data, cls):
+            return data
+        elif data is None:
+            return cls()
+        elif isinstance(data, dict):
+            parsed = data
+        elif isinstance(data, str):
+            match = cls.binaryPat.match(data)
+            if match:
+                parsed = {
+                    'number': {
+                        'major': match.group(1),
+                        'minor': match.group(2),
+                        'tag': match.group(3),
+                        'patch': match.group(4),
+                        'build': (match.group(5)[1:] if match.group(5)
+                                  else 0),
+                    },
+                    'series': match.group(6),
+                    'arch': match.group(7),
+                }
+        if parsed is None:
+            raise TypeError('Unable to parse Binary version string: '
+                            '{}'.format(data))
+        d = {}
+        for k, v in parsed.items():
+            d[cls._toPy.get(k, k)] = v
+
+        return cls(**d)
+
+    def serialize(self):
+        return "{}-{}-{}".format(self.number.serialize(),
+                                 self.series, self.arch)
+
+    def to_json(self):
+        return self.serialize()
+
+
+class ConfigValue(_definitions.ConfigValue):
+    def __repr__(self):
+        return '<{} source={} value={}>'.format(type(self).__name__,
+                                                repr(self.source),
+                                                repr(self.value))
diff --git a/juju/client/runner.py b/juju/client/runner.py
new file mode 100644 (file)
index 0000000..61f2963
--- /dev/null
@@ -0,0 +1,28 @@
+
+
+
+class AsyncRunner:
+    async def __call__(self, facade_method, *args, **kwargs):
+        await self.connection.rpc(facade_method(*args, **kwargs))
+
+
+class ThreadedRunner:
+    pass
+
+# Methods are descriptors??
+# get is called with params
+# set gets called with the result?
+# 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
+
+
+
+
+
diff --git a/juju/client/schemas-juju-2.0.0.json b/juju/client/schemas-juju-2.0.0.json
new file mode 100644 (file)
index 0000000..c53a541
--- /dev/null
@@ -0,0 +1,24533 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 2,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "instance-id",
+            "series",
+            "id",
+            "containers",
+            "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": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "agent-version"
+          ]
+        },
+        "MigrationSpec": {
+          "type": "object",
+          "properties": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "Import": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SerializedModel"
+            }
+          }
+        },
+        "Prechecks": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MigrationModelInfo"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "MigrationModelInfo": {
+          "type": "object",
+          "properties": {
+            "agent-version": {
+              "$ref": "#/definitions/Number"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "SerializedModelTools": {
+          "type": "object",
+          "properties": {
+            "uri": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version",
+            "uri"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelConfig",
+    "Version": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "SetInstanceInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/InstancesInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetInstanceStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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
+        },
+        "HostPort": {
+          "type": "object",
+          "properties": {
+            "Address": {
+              "$ref": "#/definitions/Address"
+            },
+            "port": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Address",
+            "port"
+          ]
+        },
+        "InstanceInfo": {
+          "type": "object",
+          "properties": {
+            "characteristics": {
+              "$ref": "#/definitions/HardwareCharacteristics"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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"
+          ]
+        },
+        "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.0.1.json b/juju/client/schemas-juju-2.0.1.json
new file mode 100644 (file)
index 0000000..69db493
--- /dev/null
@@ -0,0 +1,24799 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 3,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "ApplicationRelationsWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ApplicationRelationsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "ApplicationRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationChange"
+              }
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ApplicationRelationsWatchResult": {
+          "type": "object",
+          "properties": {
+            "ApplicationRelationsWatcherId": {
+              "type": "string"
+            },
+            "changes": {
+              "$ref": "#/definitions/ApplicationRelationsChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationRelationsWatcherId"
+          ]
+        },
+        "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
+        },
+        "RelationChange": {
+          "type": "object",
+          "properties": {
+            "changedunits": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RelationUnitChange"
+                }
+              }
+            },
+            "departedunits": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "instance-id",
+            "series",
+            "id",
+            "containers",
+            "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": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "agent-version"
+          ]
+        },
+        "MigrationSpec": {
+          "type": "object",
+          "properties": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "Import": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SerializedModel"
+            }
+          }
+        },
+        "Prechecks": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MigrationModelInfo"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "MigrationModelInfo": {
+          "type": "object",
+          "properties": {
+            "agent-version": {
+              "$ref": "#/definitions/Number"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "SerializedModelTools": {
+          "type": "object",
+          "properties": {
+            "uri": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version",
+            "uri"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelConfig",
+    "Version": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "SetInstanceInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/InstancesInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetInstanceStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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
+        },
+        "HostPort": {
+          "type": "object",
+          "properties": {
+            "Address": {
+              "$ref": "#/definitions/Address"
+            },
+            "port": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Address",
+            "port"
+          ]
+        },
+        "InstanceInfo": {
+          "type": "object",
+          "properties": {
+            "characteristics": {
+              "$ref": "#/definitions/HardwareCharacteristics"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.0.2.json b/juju/client/schemas-juju-2.0.2.json
new file mode 100644 (file)
index 0000000..69db493
--- /dev/null
@@ -0,0 +1,24799 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 3,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "ApplicationRelationsWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ApplicationRelationsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "ApplicationRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationChange"
+              }
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ApplicationRelationsWatchResult": {
+          "type": "object",
+          "properties": {
+            "ApplicationRelationsWatcherId": {
+              "type": "string"
+            },
+            "changes": {
+              "$ref": "#/definitions/ApplicationRelationsChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationRelationsWatcherId"
+          ]
+        },
+        "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
+        },
+        "RelationChange": {
+          "type": "object",
+          "properties": {
+            "changedunits": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RelationUnitChange"
+                }
+              }
+            },
+            "departedunits": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "instance-id",
+            "series",
+            "id",
+            "containers",
+            "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": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "agent-version"
+          ]
+        },
+        "MigrationSpec": {
+          "type": "object",
+          "properties": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "Import": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SerializedModel"
+            }
+          }
+        },
+        "Prechecks": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MigrationModelInfo"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "MigrationModelInfo": {
+          "type": "object",
+          "properties": {
+            "agent-version": {
+              "$ref": "#/definitions/Number"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "SerializedModelTools": {
+          "type": "object",
+          "properties": {
+            "uri": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version",
+            "uri"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelConfig",
+    "Version": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "SetInstanceInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/InstancesInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetInstanceStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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
+        },
+        "HostPort": {
+          "type": "object",
+          "properties": {
+            "Address": {
+              "$ref": "#/definitions/Address"
+            },
+            "port": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Address",
+            "port"
+          ]
+        },
+        "InstanceInfo": {
+          "type": "object",
+          "properties": {
+            "characteristics": {
+              "$ref": "#/definitions/HardwareCharacteristics"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.0.3.json b/juju/client/schemas-juju-2.0.3.json
new file mode 100644 (file)
index 0000000..69db493
--- /dev/null
@@ -0,0 +1,24799 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 3,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "ApplicationRelationsWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ApplicationRelationsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "ApplicationRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationChange"
+              }
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ApplicationRelationsWatchResult": {
+          "type": "object",
+          "properties": {
+            "ApplicationRelationsWatcherId": {
+              "type": "string"
+            },
+            "changes": {
+              "$ref": "#/definitions/ApplicationRelationsChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationRelationsWatcherId"
+          ]
+        },
+        "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
+        },
+        "RelationChange": {
+          "type": "object",
+          "properties": {
+            "changedunits": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RelationUnitChange"
+                }
+              }
+            },
+            "departedunits": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "instance-id",
+            "series",
+            "id",
+            "containers",
+            "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": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "agent-version"
+          ]
+        },
+        "MigrationSpec": {
+          "type": "object",
+          "properties": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "Import": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SerializedModel"
+            }
+          }
+        },
+        "Prechecks": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MigrationModelInfo"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "MigrationModelInfo": {
+          "type": "object",
+          "properties": {
+            "agent-version": {
+              "$ref": "#/definitions/Number"
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "uuid",
+            "name",
+            "owner-tag",
+            "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"
+              }
+            },
+            "tools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SerializedModelTools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes",
+            "charms",
+            "tools"
+          ]
+        },
+        "SerializedModelTools": {
+          "type": "object",
+          "properties": {
+            "uri": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version",
+            "uri"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelConfig",
+    "Version": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+              }
+            },
+            "name": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "SetInstanceInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/InstancesInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetInstanceStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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
+        },
+        "HostPort": {
+          "type": "object",
+          "properties": {
+            "Address": {
+              "$ref": "#/definitions/Address"
+            },
+            "port": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Address",
+            "port"
+          ]
+        },
+        "InstanceInfo": {
+          "type": "object",
+          "properties": {
+            "characteristics": {
+              "$ref": "#/definitions/HardwareCharacteristics"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.1.0.json b/juju/client/schemas-juju-2.1.0.json
new file mode 100644 (file)
index 0000000..15f068f
--- /dev/null
@@ -0,0 +1,25652 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 3,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "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": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "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"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "RemoteApplicationWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationWatchResult"
+            }
+          }
+        },
+        "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
+        },
+        "RemoteApplicationChange": {
+          "type": "object",
+          "properties": {
+            "application-tag": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "$ref": "#/definitions/RemoteRelationsChange"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "life",
+            "relations"
+          ]
+        },
+        "RemoteApplicationWatchResult": {
+          "type": "object",
+          "properties": {
+            "change": {
+              "$ref": "#/definitions/RemoteApplicationChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "RemoteEntityId": {
+          "type": "object",
+          "properties": {
+            "model-uuid": {
+              "type": "string"
+            },
+            "token": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-uuid",
+            "token"
+          ]
+        },
+        "RemoteRelationChange": {
+          "type": "object",
+          "properties": {
+            "changed-units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteRelationUnitChange"
+                }
+              }
+            },
+            "departed-units": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RemoteRelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "unit-id": {
+              "$ref": "#/definitions/RemoteEntityId"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-id"
+          ]
+        },
+        "RemoteRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteRelationChange"
+              }
+            },
+            "initial": {
+              "type": "boolean"
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "initial"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "RemoteRelationsWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/RemoteRelationsWatchResult"
+            }
+          }
+        },
+        "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
+        },
+        "RemoteEntityId": {
+          "type": "object",
+          "properties": {
+            "model-uuid": {
+              "type": "string"
+            },
+            "token": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-uuid",
+            "token"
+          ]
+        },
+        "RemoteRelationChange": {
+          "type": "object",
+          "properties": {
+            "changed-units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteRelationUnitChange"
+                }
+              }
+            },
+            "departed-units": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RemoteRelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "unit-id": {
+              "$ref": "#/definitions/RemoteEntityId"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-id"
+          ]
+        },
+        "RemoteRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteRelationChange"
+              }
+            },
+            "initial": {
+              "type": "boolean"
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "initial"
+          ]
+        },
+        "RemoteRelationsWatchResult": {
+          "type": "object",
+          "properties": {
+            "RemoteRelationsWatcherId": {
+              "type": "string"
+            },
+            "change": {
+              "$ref": "#/definitions/RemoteRelationsChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RemoteRelationsWatcherId"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.1.1.json b/juju/client/schemas-juju-2.1.1.json
new file mode 100644 (file)
index 0000000..474b204
--- /dev/null
@@ -0,0 +1,25730 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 3,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "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": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "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"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "RemoteApplicationWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationWatchResult"
+            }
+          }
+        },
+        "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
+        },
+        "RemoteApplicationChange": {
+          "type": "object",
+          "properties": {
+            "application-tag": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "$ref": "#/definitions/RemoteRelationsChange"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "life",
+            "relations"
+          ]
+        },
+        "RemoteApplicationWatchResult": {
+          "type": "object",
+          "properties": {
+            "change": {
+              "$ref": "#/definitions/RemoteApplicationChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "RemoteEntityId": {
+          "type": "object",
+          "properties": {
+            "model-uuid": {
+              "type": "string"
+            },
+            "token": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-uuid",
+            "token"
+          ]
+        },
+        "RemoteRelationChange": {
+          "type": "object",
+          "properties": {
+            "changed-units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteRelationUnitChange"
+                }
+              }
+            },
+            "departed-units": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RemoteRelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "unit-id": {
+              "$ref": "#/definitions/RemoteEntityId"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-id"
+          ]
+        },
+        "RemoteRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteRelationChange"
+              }
+            },
+            "initial": {
+              "type": "boolean"
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "initial"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "RemoteRelationsWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/RemoteRelationsWatchResult"
+            }
+          }
+        },
+        "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
+        },
+        "RemoteEntityId": {
+          "type": "object",
+          "properties": {
+            "model-uuid": {
+              "type": "string"
+            },
+            "token": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-uuid",
+            "token"
+          ]
+        },
+        "RemoteRelationChange": {
+          "type": "object",
+          "properties": {
+            "changed-units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteRelationUnitChange"
+                }
+              }
+            },
+            "departed-units": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RemoteRelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "unit-id": {
+              "$ref": "#/definitions/RemoteEntityId"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-id"
+          ]
+        },
+        "RemoteRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteRelationChange"
+              }
+            },
+            "initial": {
+              "type": "boolean"
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "initial"
+          ]
+        },
+        "RemoteRelationsWatchResult": {
+          "type": "object",
+          "properties": {
+            "RemoteRelationsWatcherId": {
+              "type": "string"
+            },
+            "change": {
+              "$ref": "#/definitions/RemoteRelationsChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RemoteRelationsWatcherId"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.1.2.json b/juju/client/schemas-juju-2.1.2.json
new file mode 100644 (file)
index 0000000..474b204
--- /dev/null
@@ -0,0 +1,25730 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 3,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Deploy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationsDeploy"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationDestroy"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "unit-names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-names"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "agent-status",
+            "instance-status",
+            "dns-name",
+            "ip-addresses",
+            "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": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "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"
+          ]
+        },
+        "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"
+            },
+            "migration": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "version": {
+              "$ref": "#/definitions/Number"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "StatusHistoryFilter": {
+          "type": "object",
+          "properties": {
+            "date": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "delta": {
+              "type": "integer"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "size",
+            "date",
+            "delta"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddMachines"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddMachinesResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "Name": "Payloads",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/EnvListArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/EnvListResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "EnvListArgs": {
+          "type": "object",
+          "properties": {
+            "patterns": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "patterns"
+          ]
+        },
+        "EnvListResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Payload"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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/LookUpArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatusArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/PayloadResults"
+            }
+          }
+        },
+        "Track": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/TrackArgs"
+            },
+            "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
+        },
+        "LookUpArg": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "id"
+          ]
+        },
+        "LookUpArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LookUpArg"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "SetStatusArg": {
+          "type": "object",
+          "properties": {
+            "Entity": {
+              "$ref": "#/definitions/Entity"
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entity",
+            "status"
+          ]
+        },
+        "SetStatusArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SetStatusArg"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        },
+        "TrackArgs": {
+          "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "RemoteApplicationWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationWatchResult"
+            }
+          }
+        },
+        "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
+        },
+        "RemoteApplicationChange": {
+          "type": "object",
+          "properties": {
+            "application-tag": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "$ref": "#/definitions/RemoteRelationsChange"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "life",
+            "relations"
+          ]
+        },
+        "RemoteApplicationWatchResult": {
+          "type": "object",
+          "properties": {
+            "change": {
+              "$ref": "#/definitions/RemoteApplicationChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "RemoteEntityId": {
+          "type": "object",
+          "properties": {
+            "model-uuid": {
+              "type": "string"
+            },
+            "token": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-uuid",
+            "token"
+          ]
+        },
+        "RemoteRelationChange": {
+          "type": "object",
+          "properties": {
+            "changed-units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteRelationUnitChange"
+                }
+              }
+            },
+            "departed-units": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RemoteRelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "unit-id": {
+              "$ref": "#/definitions/RemoteEntityId"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-id"
+          ]
+        },
+        "RemoteRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteRelationChange"
+              }
+            },
+            "initial": {
+              "type": "boolean"
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "initial"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "RemoteRelationsWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/RemoteRelationsWatchResult"
+            }
+          }
+        },
+        "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
+        },
+        "RemoteEntityId": {
+          "type": "object",
+          "properties": {
+            "model-uuid": {
+              "type": "string"
+            },
+            "token": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-uuid",
+            "token"
+          ]
+        },
+        "RemoteRelationChange": {
+          "type": "object",
+          "properties": {
+            "changed-units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteRelationUnitChange"
+                }
+              }
+            },
+            "departed-units": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "id": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "life"
+          ]
+        },
+        "RemoteRelationUnitChange": {
+          "type": "object",
+          "properties": {
+            "settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "unit-id": {
+              "$ref": "#/definitions/RemoteEntityId"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-id"
+          ]
+        },
+        "RemoteRelationsChange": {
+          "type": "object",
+          "properties": {
+            "changed": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteRelationChange"
+              }
+            },
+            "initial": {
+              "type": "boolean"
+            },
+            "removed": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "initial"
+          ]
+        },
+        "RemoteRelationsWatchResult": {
+          "type": "object",
+          "properties": {
+            "RemoteRelationsWatcherId": {
+              "type": "string"
+            },
+            "change": {
+              "$ref": "#/definitions/RemoteRelationsChange"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RemoteRelationsWatcherId"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "name": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "name",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            },
+            "storage-tag": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storage-tag",
+            "unit-tag",
+            "machine-tag"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "bus-address": {
+              "type": "string"
+            },
+            "device-link": {
+              "type": "string"
+            },
+            "device-name": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machine-attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystem-id",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": {
+            "space-tag": {
+              "type": "string"
+            },
+            "subnet-provider-id": {
+              "type": "string"
+            },
+            "subnet-tag": {
+              "type": "string"
+            },
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.2-alpha1.json b/juju/client/schemas-juju-2.2-alpha1.json
new file mode 100644 (file)
index 0000000..8fa5071
--- /dev/null
@@ -0,0 +1,25974 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Consume": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ConsumeApplicationArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ConsumeApplicationResults"
+            }
+          }
+        },
+        "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/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyApplicationResults"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "DestroyUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationURLs"
+            },
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationInfoResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "ApplicationURLs": {
+          "type": "object",
+          "properties": {
+            "application-urls": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "ConsumeApplicationArg": {
+          "type": "object",
+          "properties": {
+            "application-alias": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url"
+          ]
+        },
+        "ConsumeApplicationArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationArg"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "local-name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "DestroyUnitInfo": {
+          "type": "object",
+          "properties": {
+            "destroyed-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            },
+            "detached-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "application-url": {
+              "type": "string"
+            },
+            "description": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "icon-url-path": {
+              "type": "string"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "source-model-label": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "name",
+            "description",
+            "application-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"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetModelAgentVersion": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetModelAgentVersion"
+            }
+          }
+        },
+        "SetModelConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "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": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "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"
+          ]
+        },
+        "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"
+            },
+            "model-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "name": {
+              "type": "string"
+            },
+            "region": {
+              "type": "string"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version",
+            "model-status"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "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"
+            }
+          }
+        },
+        "ForceDestroyMachine": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyMachineResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MetricsManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ConfigValue": {
+          "type": "object",
+          "properties": {
+            "source": {
+              "type": "string"
+            },
+            "value": {
+              "type": "object",
+              "additionalProperties": true
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "value",
+            "source"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ConfigValue"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "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"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetSupportedContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineContainersParams"
+            },
+            "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "pool": {
+              "type": "string"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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/ListResourcesArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ResourcesResult"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "ListResourcesArgs": {
+          "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"
+          ]
+        },
+        "ResourceResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resource": {
+              "$ref": "#/definitions/Resource"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ErrorResult",
+            "resource"
+          ]
+        },
+        "ResourcesResult": {
+          "type": "object",
+          "properties": {
+            "ErrorResult": {
+              "$ref": "#/definitions/ErrorResult"
+            },
+            "resources": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ResourceResult"
+              }
+            }
+          },
+          "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Attach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Detach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "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"
+            },
+            "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            }
+          },
+          "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": {
+            "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.2-beta1.json b/juju/client/schemas-juju-2.2-beta1.json
new file mode 100644 (file)
index 0000000..9bd941b
--- /dev/null
@@ -0,0 +1,26135 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Consume": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ConsumeApplicationArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ConsumeApplicationResults"
+            }
+          }
+        },
+        "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/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyApplicationResults"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "DestroyUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationURLs"
+            },
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationInfoResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "ApplicationURLs": {
+          "type": "object",
+          "properties": {
+            "application-urls": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "ConsumeApplicationArg": {
+          "type": "object",
+          "properties": {
+            "application-alias": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url"
+          ]
+        },
+        "ConsumeApplicationArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationArg"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "local-name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "DestroyUnitInfo": {
+          "type": "object",
+          "properties": {
+            "destroyed-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            },
+            "detached-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "application-url": {
+              "type": "string"
+            },
+            "description": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "icon-url-path": {
+              "type": "string"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "source-model-label": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "name",
+            "description",
+            "application-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"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "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": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "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": {
+            "creds": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "level": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "level",
+            "creds"
+          ]
+        },
+        "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"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version",
+            "model-status",
+            "meter-status"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddSubnetParams": {
+          "type": "object",
+          "properties": {
+            "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "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"
+            }
+          }
+        },
+        "ForceDestroyMachine": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyMachineResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": {
+            "creds": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "level": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "level",
+            "creds"
+          ]
+        },
+        "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "pool": {
+              "type": "string"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Attach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Detach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "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"
+            },
+            "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            }
+          },
+          "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": {
+            "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"
+            },
+            "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": 5,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.2-beta2.json b/juju/client/schemas-juju-2.2-beta2.json
new file mode 100644 (file)
index 0000000..4b141fd
--- /dev/null
@@ -0,0 +1,26150 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Consume": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ConsumeApplicationArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ConsumeApplicationResults"
+            }
+          }
+        },
+        "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/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyApplicationResults"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "DestroyUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationURLs"
+            },
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationInfoResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "ApplicationURLs": {
+          "type": "object",
+          "properties": {
+            "application-urls": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "ConsumeApplicationArg": {
+          "type": "object",
+          "properties": {
+            "application-alias": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url"
+          ]
+        },
+        "ConsumeApplicationArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationArg"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "local-name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "DestroyUnitInfo": {
+          "type": "object",
+          "properties": {
+            "destroyed-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            },
+            "detached-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "application-url": {
+              "type": "string"
+            },
+            "description": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "icon-url-path": {
+              "type": "string"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "source-model-label": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "name",
+            "description",
+            "application-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"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "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": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "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": {
+            "creds": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "level": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "level",
+            "creds"
+          ]
+        },
+        "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"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "cloud-tag",
+            "version",
+            "available-version",
+            "model-status",
+            "meter-status"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "cidr": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "provider-network-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
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "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"
+            }
+          }
+        },
+        "ForceDestroyMachine": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyMachineResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "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": {
+            "external-control": {
+              "type": "boolean"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "skip-initial-prechecks": {
+              "type": "boolean"
+            },
+            "target-info": {
+              "$ref": "#/definitions/MigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info",
+            "external-control",
+            "skip-initial-prechecks"
+          ]
+        },
+        "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"
+            },
+            "external-control": {
+              "type": "boolean"
+            },
+            "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",
+            "external-control",
+            "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": {
+            "creds": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "level": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "level",
+            "creds"
+          ]
+        },
+        "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "controller-uuid",
+            "provider-type",
+            "default-series",
+            "cloud-tag",
+            "owner-tag",
+            "life",
+            "status",
+            "users",
+            "machines"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityStatusArgs"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "entities"
+          ]
+        },
+        "Settings": {
+          "type": "object",
+          "properties": {
+            "Ftp": {
+              "type": "string"
+            },
+            "Http": {
+              "type": "string"
+            },
+            "Https": {
+              "type": "string"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Http",
+            "Https",
+            "Ftp",
+            "NoProxy"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardware-id": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "pool": {
+              "type": "string"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volume-id": {
+              "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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"
+            },
+            "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": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Attach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Detach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "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"
+            },
+            "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volume-id",
+            "size",
+            "persistent"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceName",
+            "DeviceLinks",
+            "Label",
+            "UUID",
+            "HardwareId",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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": 5,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UnitsNetworkConfig"
+            },
+            "Result": {
+              "$ref": "#/definitions/UnitNetworkConfigResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchApplicationRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "binding-name": {
+              "type": "string"
+            },
+            "unit-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit-tag",
+            "binding-name"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "info"
+          ]
+        },
+        "UnitNetworkConfigResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        },
+        "UnitsNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UnitNetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "args"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.2-rc1.json b/juju/client/schemas-juju-2.2-rc1.json
new file mode 100644 (file)
index 0000000..17e841a
--- /dev/null
@@ -0,0 +1,26295 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 4,
+    "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"
+            }
+          }
+        },
+        "CharmRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationCharmRelations"
+            },
+            "Result": {
+              "$ref": "#/definitions/ApplicationCharmRelationsResults"
+            }
+          }
+        },
+        "Consume": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ConsumeApplicationArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ConsumeApplicationResults"
+            }
+          }
+        },
+        "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/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyApplicationResults"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "DestroyUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationURLs"
+            },
+            "Result": {
+              "$ref": "#/definitions/RemoteApplicationInfoResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AddApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "channel": {
+              "type": "string"
+            },
+            "charm-url": {
+              "type": "string"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "config-yaml": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "ApplicationURLs": {
+          "type": "object",
+          "properties": {
+            "application-urls": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "ConsumeApplicationArg": {
+          "type": "object",
+          "properties": {
+            "application-alias": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url"
+          ]
+        },
+        "ConsumeApplicationArgs": {
+          "type": "object",
+          "properties": {
+            "args": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationArg"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "local-name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ConsumeApplicationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConsumeApplicationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "DestroyUnitInfo": {
+          "type": "object",
+          "properties": {
+            "destroyed-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            },
+            "detached-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "RemoteApplicationInfo": {
+          "type": "object",
+          "properties": {
+            "application-url": {
+              "type": "string"
+            },
+            "description": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "icon-url-path": {
+              "type": "string"
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "name": {
+              "type": "string"
+            },
+            "source-model-label": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "name",
+            "description",
+            "application-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"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "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"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "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"
+            },
+            "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"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "DiscoverSpaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddSubnetsParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/DiscoverSpacesResults"
+            }
+          }
+        },
+        "ListSubnets": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SubnetsFilters"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListSubnetsResults"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "DiscoverSpacesResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProviderSpace"
+              }
+            }
+          },
+          "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
+        },
+        "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
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "ProviderSpace": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "name": {
+              "type": "string"
+            },
+            "provider-id": {
+              "type": "string"
+            },
+            "subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "provider-id",
+            "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"
+          ]
+        },
+        "SubnetsFilters": {
+          "type": "object",
+          "properties": {
+            "space-tag": {
+              "type": "string"
+            },
+            "zone": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "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"
+            }
+          }
+        },
+        "ForceDestroyMachine": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyMachineResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "DumpModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "DumpModelsDB": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MapResults"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "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"
+            },
+            "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"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+                }
+              }
+            },
+            "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"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-tag",
+            "duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "claims"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Spaces",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateSpaces": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CreateSpacesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "ListSpaces": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ListSpacesResults"
+            }
+          }
+        }
+      },
+      "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Attach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Detach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "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"
+            },
+            "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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": 5,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+              }
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "bindings"
+          ]
+        },
+        "NetworkInfoResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "network-info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkInfo"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "network-info"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-2.3-alpha1.json b/juju/client/schemas-juju-2.3-alpha1.json
new file mode 100644 (file)
index 0000000..e59c105
--- /dev/null
@@ -0,0 +1,26050 @@
+[
+  {
+    "Name": "Action",
+    "Version": 2,
+    "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": "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"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+            },
+            "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": 5,
+    "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"
+            }
+          }
+        },
+        "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/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyApplicationResults"
+            }
+          }
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyRelation"
+            }
+          }
+        },
+        "DestroyUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "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"
+            }
+          }
+        },
+        "GetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/GetApplicationConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetConstraintsResults"
+            }
+          }
+        },
+        "Set": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSet"
+            }
+          }
+        },
+        "SetCharm": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationSetCharm"
+            }
+          }
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetConstraints"
+            }
+          }
+        },
+        "SetMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationMetricCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Unexpose": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnexpose"
+            }
+          }
+        },
+        "Unset": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUnset"
+            }
+          }
+        },
+        "Update": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ApplicationUpdate"
+            }
+          }
+        }
+      },
+      "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"
+              }
+            }
+          },
+          "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"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+            },
+            "endpoint-bindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "num-units": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            },
+            "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"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "ApplicationOffer": {
+          "type": "object",
+          "properties": {
+            "access": {
+              "type": "string"
+            },
+            "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"
+            },
+            "source-model-tag": {
+              "type": "string"
+            },
+            "spaces": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteSpace"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "source-model-tag",
+            "offer-url",
+            "offer-name",
+            "application-description",
+            "endpoints",
+            "spaces",
+            "bindings",
+            "access"
+          ]
+        },
+        "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-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-units",
+            "force-series"
+          ]
+        },
+        "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-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",
+            "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"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "ConsumeApplicationArg": {
+          "type": "object",
+          "properties": {
+            "ApplicationOffer": {
+              "$ref": "#/definitions/ApplicationOffer"
+            },
+            "application-alias": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationOffer"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "DestroyRelation": {
+          "type": "object",
+          "properties": {
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "endpoints"
+          ]
+        },
+        "DestroyUnitInfo": {
+          "type": "object",
+          "properties": {
+            "destroyed-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            },
+            "detached-storage": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Entity"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "application": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "Restore": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RestoreArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BackupsCreateArgs": {
+          "type": "object",
+          "properties": {
+            "notes": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "notes"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "BackupsRemoveArgs": {
+          "type": "object",
+          "properties": {
+            "id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "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": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "BundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChange"
+              }
+            },
+            "errors": {
+              "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
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "actions": {
+              "$ref": "#/definitions/CharmActions"
+            },
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/CharmOption"
+                }
+              }
+            },
+            "meta": {
+              "$ref": "#/definitions/CharmMeta"
+            },
+            "metrics": {
+              "$ref": "#/definitions/CharmMetrics"
+            },
+            "revision": {
+              "type": "integer"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "revision",
+            "url",
+            "config"
+          ]
+        },
+        "CharmMeta": {
+          "type": "object",
+          "properties": {
+            "categories": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "description": {
+              "type": "string"
+            },
+            "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": 1,
+    "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"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel"
+          ]
+        },
+        "AddCharmWithAuthorization": {
+          "type": "object",
+          "properties": {
+            "channel": {
+              "type": "string"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "can-upgrade-to": {
+              "type": "string"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "exposed": {
+              "type": "boolean"
+            },
+            "life": {
+              "type": "string"
+            },
+            "meter-statuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "series": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "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"
+          ]
+        },
+        "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": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "model": {
+              "$ref": "#/definitions/ModelStatusInfo"
+            },
+            "relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            },
+            "remote-applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/RemoteApplicationStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model",
+            "machines",
+            "applications",
+            "remote-applications",
+            "relations"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+              }
+            },
+            "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"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "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"
+            },
+            "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"
+            },
+            "version": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id",
+            "key",
+            "interface",
+            "scope",
+            "endpoints"
+          ]
+        },
+        "RemoteApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "application-name": {
+              "type": "string"
+            },
+            "application-url": {
+              "type": "string"
+            },
+            "endpoints": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RemoteEndpoint"
+              }
+            },
+            "err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "life": {
+              "type": "string"
+            },
+            "relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-url",
+            "application-name",
+            "endpoints",
+            "life",
+            "relations",
+            "status"
+          ]
+        },
+        "RemoteEndpoint": {
+          "type": "object",
+          "properties": {
+            "interface": {
+              "type": "string"
+            },
+            "limit": {
+              "type": "integer"
+            },
+            "name": {
+              "type": "string"
+            },
+            "role": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "role",
+            "interface",
+            "limit",
+            "scope"
+          ]
+        },
+        "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": {
+            "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": {
+            "agent-status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "charm": {
+              "type": "string"
+            },
+            "leader": {
+              "type": "boolean"
+            },
+            "machine": {
+              "type": "string"
+            },
+            "opened-ports": {
+              "type": "array",
+              "items": {
+                "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Cloud",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Cloud": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudResults"
+            }
+          }
+        },
+        "Clouds": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/CloudsResult"
+            }
+          }
+        },
+        "Credential": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudCredentialResults"
+            }
+          }
+        },
+        "DefaultCloud": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringResult"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CloudInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        },
+        "RevokeCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UpdateCloudCredentials"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UserCredentials": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/UserClouds"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "Cloud": {
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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
+        },
+        "CloudsResult": {
+          "type": "object",
+          "properties": {
+            "clouds": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/Cloud"
+                }
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+          ]
+        },
+        "UpdateCloudCredential": {
+          "type": "object",
+          "properties": {
+            "credential": {
+              "$ref": "#/definitions/CloudCredential"
+            },
+            "tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "tag",
+            "credential"
+          ]
+        },
+        "UpdateCloudCredentials": {
+          "type": "object",
+          "properties": {
+            "credentials": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UpdateCloudCredential"
+              }
+            }
+          },
+          "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"
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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": {
+            "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"
+          ]
+        },
+        "ControllerConfigResult": {
+          "type": "object",
+          "properties": {
+            "config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "config"
+          ]
+        },
+        "DestroyControllerArgs": {
+          "type": "object",
+          "properties": {
+            "destroy-models": {
+              "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "ModelMachineInfo": {
+          "type": "object",
+          "properties": {
+            "hardware": {
+              "$ref": "#/definitions/MachineHardware"
+            },
+            "has-vote": {
+              "type": "boolean"
+            },
+            "id": {
+              "type": "string"
+            },
+            "instance-id": {
+              "type": "string"
+            },
+            "status": {
+              "type": "string"
+            },
+            "wants-vote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "id"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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
+        },
+        "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": "Deployer",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "DeployerConnectionValues": {
+          "type": "object",
+          "properties": {
+            "api-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "state-addresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "state-addresses",
+            "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": "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": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CloudSpec": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/CloudSpecResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "Watch": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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": {
+            "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
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "Arbiter": {
+              "type": "boolean"
+            },
+            "BuildIndexes": {
+              "type": "boolean"
+            },
+            "Hidden": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Priority": {
+              "type": "number"
+            },
+            "SlaveDelay": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "Votes": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Id",
+            "Address",
+            "Arbiter",
+            "BuildIndexes",
+            "Hidden",
+            "Priority",
+            "Tags",
+            "SlaveDelay",
+            "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"
+            }
+          },
+          "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": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Delete": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataImageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ImageMetadataFilter"
+            },
+            "Result": {
+              "$ref": "#/definitions/ListCloudImageMetadataResult"
+            }
+          }
+        },
+        "Save": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MetadataSaveParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "UpdateFromPublishedImages": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "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"
+          ]
+        },
+        "CloudImageMetadataList": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "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"
+          ]
+        },
+        "ImageMetadataFilter": {
+          "type": "object",
+          "properties": {
+            "arches": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "region": {
+              "type": "string"
+            },
+            "root-storage-type": {
+              "type": "string"
+            },
+            "series": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "stream": {
+              "type": "string"
+            },
+            "virt-type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ListCloudImageMetadataResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MetadataImageIds": {
+          "type": "object",
+          "properties": {
+            "image-ids": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "image-ids"
+          ]
+        },
+        "MetadataSaveParams": {
+          "type": "object",
+          "properties": {
+            "metadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadataList"
+              }
+            }
+          },
+          "additionalProperties": false
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "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"
+            }
+          }
+        },
+        "ForceDestroyMachine": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DestroyMachineResults"
+            }
+          }
+        },
+        "InstanceTypes": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelInstanceTypesConstraints"
+            },
+            "Result": {
+              "$ref": "#/definitions/InstanceTypesResults"
+            }
+          }
+        }
+      },
+      "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
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "directive": {
+              "type": "string"
+            },
+            "scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "scope",
+            "directive"
+          ]
+        },
+        "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"
+            }
+          },
+          "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "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"
+            },
+            "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",
+            "info"
+          ]
+        },
+        "MeterStatusParams": {
+          "type": "object",
+          "properties": {
+            "statues": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusParam"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "statues"
+          ]
+        },
+        "MetricResult": {
+          "type": "object",
+          "properties": {
+            "key": {
+              "type": "string"
+            },
+            "time": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value",
+            "unit"
+          ]
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfo"
+            }
+          }
+        },
+        "DestroyModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "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"
+            }
+          }
+        },
+        "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": {
+        "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid",
+            "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"
+          ]
+        },
+        "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"
+            },
+            "users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "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"
+            },
+            "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"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMachineInfo"
+              }
+            },
+            "model-tag": {
+              "type": "string"
+            },
+            "owner-tag": {
+              "type": "string"
+            }
+          },
+          "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "APIAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "APIHostPorts": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/APIHostPortsResult"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "ControllerConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ControllerConfigResult"
+            }
+          }
+        },
+        "DistributionGroup": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/DistributionGroupResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Series": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchMachineErrorRetry": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "WatchModelMachines": {
+          "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+            },
+            "provider-type": {
+              "type": "string"
+            },
+            "proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "ssl-hostname-verification": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "provider-type",
+            "authorized-keys",
+            "ssl-hostname-verification",
+            "proxy",
+            "apt-proxy",
+            "apt-mirror",
+            "UpdateBehavior"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "host-device-name",
+            "bridge-name"
+          ]
+        },
+        "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": {
+            "arch": {
+              "type": "string"
+            },
+            "major": {
+              "type": "integer"
+            },
+            "minor": {
+              "type": "integer"
+            },
+            "number": {
+              "$ref": "#/definitions/Number"
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "number",
+            "major",
+            "minor",
+            "arch",
+            "series"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "ProvisioningInfo": {
+          "type": "object",
+          "properties": {
+            "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"
+          ]
+        },
+        "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
+        },
+        "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"
+            }
+          },
+          "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"
+            },
+            "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"
+          ]
+        },
+        "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": 1,
+    "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"
+            },
+            "proxy-settings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "proxy-settings",
+            "apt-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": "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": "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"
+            },
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "url": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "url",
+            "channel",
+            "macaroon"
+          ]
+        },
+        "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": 1,
+    "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": {
+            "controller-tag": {
+              "type": "string"
+            },
+            "duration": {
+              "type": "integer"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "controller-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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddToUnit": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragesAddParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Attach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "CreatePool": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StoragePool"
+            }
+          }
+        },
+        "Destroy": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "Detach": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StorageAttachmentIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StorageDetailsResults"
+            }
+          }
+        }
+      },
+      "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"
+          ]
+        },
+        "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"
+            },
+            "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"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "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"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "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"
+            },
+            "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": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AttachmentLife": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/MachineStorageIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/LifeResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "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
+        },
+        "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": 5,
+    "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"
+            }
+          }
+        },
+        "CACert": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BytesResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "HasSubordinates": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/BoolResults"
+            }
+          }
+        },
+        "JoinedRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "Relation": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationUnits"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "RelationById": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RelationIds"
+            },
+            "Result": {
+              "$ref": "#/definitions/RelationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "SetStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "SetUnitStatus": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetStatus"
+            },
+            "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchConfigSettings": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchUnitAddresses": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResults"
+            }
+          }
+        },
+        "WatchUnitRelations": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "WatchUnitStorageAttachments": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringsWatchResults"
+            }
+          }
+        },
+        "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"
+          ]
+        },
+        "BytesResult": {
+          "type": "object",
+          "properties": {
+            "result": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "result"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "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"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "application-tag",
+            "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"
+            },
+            "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"
+            },
+            "uuid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "name",
+            "uuid"
+          ]
+        },
+        "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"
+              }
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "bindings"
+          ]
+        },
+        "NetworkInfoResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "network-info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkInfo"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "network-info"
+          ]
+        },
+        "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": {
+            "endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "integer"
+            },
+            "key": {
+              "type": "string"
+            },
+            "life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "life",
+            "id",
+            "key",
+            "endpoint"
+          ]
+        },
+        "RelationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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"
+          ]
+        },
+        "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
+        },
+        "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"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "version"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": 1,
+    "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"
+            }
+          }
+        },
+        "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": "VolumeAttachmentsWatcher",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/MachineStorageIdsWatchResult"
+            }
+          }
+        },
+        "Stop": {
+          "type": "object"
+        }
+      },
+      "definitions": {
+        "Error": {
+          "type": "object",
+          "properties": {
+            "code": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "message",
+            "code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "macaroon-path": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "additionalProperties": false
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachment-tag": {
+              "type": "string"
+            },
+            "machine-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine-tag",
+            "attachment-tag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "watcher-id": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "watcher-id",
+            "changes"
+          ]
+        }
+      }
+    }
+  }
+]
diff --git a/juju/client/schemas-juju-latest.json b/juju/client/schemas-juju-latest.json
new file mode 120000 (symlink)
index 0000000..6a2593e
--- /dev/null
@@ -0,0 +1 @@
+schemas-juju-2.3-alpha1.json
\ No newline at end of file
diff --git a/juju/cloud.py b/juju/cloud.py
new file mode 100644 (file)
index 0000000..e4793ee
--- /dev/null
@@ -0,0 +1,81 @@
+class Cloud(object):
+    """Cloud
+
+    :ivar name: Name of the cloud
+
+    """
+    def add_credential(self, credential):
+        """Add or replaces credentials for this cloud.
+
+        :param `juju.Credential` credential: The Credential to add
+
+        """
+        raise NotImplementedError()
+
+    def get_credentials(self):
+        """Return list of all credentials for this cloud.
+
+        """
+        raise NotImplementedError()
+
+    def remove_credential(self, credential_name):
+        """Remove a credential for this cloud.
+
+        :param str credential_name: Name of the credential to remove
+
+        """
+        raise NotImplementedError()
+
+    def bootstrap(
+            self, controller_name, region=None, agent_version=None,
+            auto_upgrade=False, bootstrap_constraints=None,
+            bootstrap_series=None, config=None, constraints=None,
+            credential=None, default_model=None, keep_broken=False,
+            metadata_source=None, no_gui=False, to=None,
+            upload_tools=False):
+
+        """Initialize a cloud environment.
+
+        :param str controller_name: Name of controller to create
+        :param str region: Cloud region in which to bootstrap
+        :param str agent_version: Version of tools to use for Juju agents
+        :param bool auto_upgrade: Upgrade to latest path release tools on first
+            bootstrap
+        :param bootstrap_constraints: Constraints for the bootstrap machine
+        :type bootstrap_constraints: :class:`juju.Constraints`
+        :param str bootstrap_series: Series of the bootstrap machine
+        :param dict config: Controller configuration
+        :param constraints: Default constraints for all future workload
+            machines
+        :type constraints: :class:`juju.Constraints`
+        :param credential: Credential to use when bootstrapping
+        :type credential: :class:`juju.Credential`
+        :param str default_model: Name to give the default model
+        :param bool keep_broken: Don't destroy model if bootstrap fails
+        :param str metadata_source: Local path to use as tools and/or metadata
+            source
+        :param bool no_gui: Don't install the Juju GUI in the controller when
+            bootstrapping
+        :param str to: Placement directive for bootstrap node (typically used
+            with MAAS)
+        :param bool upload_tools: Upload local version of tools before
+            bootstrapping
+
+        """
+        raise NotImplementedError()
+
+    def set_default_credential(self, credential_name):
+        """Set the default credentials for this cloud.
+
+        :param str credential_name: Credential to make default
+
+        """
+        raise NotImplementedError()
+
+    def set_default_region(self, region):
+        """Set the default region for this cloud.
+
+        :param str region: Name of region to make default
+
+        """
+        raise NotImplementedError()
diff --git a/juju/constraints.py b/juju/constraints.py
new file mode 100644 (file)
index 0000000..998862d
--- /dev/null
@@ -0,0 +1,84 @@
+#
+# Module that parses constraints
+#
+# The current version of juju core expects the client to take
+# constraints given in the form "mem=10G foo=bar" and parse them into
+# json that looks like {"mem": 10240, "foo": "bar"}. This module helps us
+# accomplish that task.
+#
+# We do not attempt to duplicate the checking done in
+# client/_client.py:Value here. That class will verify that the
+# constraints keys are valid, and that we can successfully dump the
+# constraints dict to json.
+#
+# Once https://bugs.launchpad.net/juju/+bug/1645402 is addressed, this
+# module should be deprecated.
+#
+
+import re
+
+# Matches on a string specifying memory size
+MEM = re.compile('^[1-9][0-9]*[MGTP]$')
+
+# Multiplication factors to get Megabytes
+# https://github.com/juju/juju/blob/master/constraints/constraints.go#L666
+FACTORS = {
+    "M": 1,
+    "G": 1024,
+    "T": 1024 * 1024,
+    "P": 1024 * 1024 * 1024
+}
+
+SNAKE1 = re.compile(r'(.)([A-Z][a-z]+)')
+SNAKE2 = re.compile('([a-z0-9])([A-Z])')
+
+
+def parse(constraints):
+    """
+    Constraints must be expressed as a string containing only spaces
+    and key value pairs joined by an '='.
+
+    """
+    if not constraints:
+        return None
+
+    if type(constraints) is dict:
+        # Fowards compatibilty: already parsed
+        return constraints
+
+    constraints = {
+        normalize_key(k): normalize_value(v) for k, v in [
+            s.split("=") for s in constraints.split(" ")]}
+
+    return constraints
+
+
+def normalize_key(key):
+    key = key.strip()
+
+    key = key.replace("-", "_")  # Our _client lib wants "_" in place of "-"
+
+    # Convert camelCase to snake_case
+    key = SNAKE1.sub(r'\1_\2', key)
+    key = SNAKE2.sub(r'\1_\2', key).lower()
+
+    return key
+
+
+def normalize_value(value):
+    value = value.strip()
+
+    if MEM.match(value):
+        # 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
diff --git a/juju/controller.py b/juju/controller.py
new file mode 100644 (file)
index 0000000..9b452c7
--- /dev/null
@@ -0,0 +1,331 @@
+import asyncio
+import logging
+
+from . import tag
+from . import utils
+from .client import client
+from .client import connection
+from .model import Model
+
+log = logging.getLogger(__name__)
+
+
+class Controller(object):
+    def __init__(self, loop=None,
+                 max_frame_size=connection.Connection.DEFAULT_FRAME_SIZE):
+        """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
+
+        """
+        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.connection = await connection.Connection.connect(
+            endpoint, None, username, password, cacert, macaroons,
+            max_frame_size=self.max_frame_size)
+
+    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))
+
+    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
+
+    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
+
+    async def add_model(
+            self, model_name, cloud_name=None, credential_name=None,
+            owner=None, config=None, region=None):
+        """Add a model to this controller.
+
+        :param str model_name: Name to give the new model.
+        :param str cloud_name: Name of the cloud in which to create the
+            model, e.g. 'aws'. Defaults to same cloud as controller.
+        :param str credential_name: Name of the credential to use when
+            creating the model. Defaults to current credential. If you
+            pass a credential_name, you must also pass a cloud_name,
+            even if it's the default cloud.
+        :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.
+
+        """
+        model_facade = client.ModelManagerFacade.from_connection(
+            self.connection)
+
+        owner = owner or self.connection.info['user-info']['identity']
+        cloud_name = cloud_name or await self.get_cloud()
+
+        if credential_name:
+            credential = tag.credential(
+                cloud_name,
+                tag.untag('user-', owner),
+                credential_name
+            )
+        else:
+            credential = None
+
+        log.debug('Creating model %s', model_name)
+
+        model_info = await model_facade.CreateModel(
+            tag.cloud(cloud_name),
+            config,
+            credential,
+            model_name,
+            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,
+        )
+
+        return model
+
+    async def destroy_models(self, *uuids):
+        """Destroy one or more models.
+
+        :param str \*uuids: UUIDs of models to destroy
+
+        """
+        model_facade = client.ModelManagerFacade.from_connection(
+            self.connection)
+
+        log.debug(
+            'Destroying model%s %s',
+            '' if len(uuids) == 1 else 's',
+            ', '.join(uuids)
+        )
+
+        await model_facade.DestroyModels([
+            client.Entity(tag.model(uuid))
+            for uuid in uuids
+        ])
+    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 display_name: Display name
+        :param str acl: Access control, e.g. 'read'
+        :param list models: Models to which the user is granted access
+
+        """
+        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)
+
+    async def change_user_password(self, username, password):
+        """Change the password for a user in this controller.
+
+        :param str username: Username
+        :param str password: New password
+
+        """
+        user_facade = client.UserManagerFacade.from_connection(self.connection)
+        entity = client.EntityPassword(password, tag.user(username))
+        return await user_facade.SetPassword([entity])
+
+    async def destroy(self, destroy_all_models=False):
+        """Destroy this controller.
+
+        :param bool destroy_all_models: Destroy all hosted models in the
+            controller.
+
+        """
+        controller_facade = client.ControllerFacade.from_connection(
+            self.connection)
+        return await controller_facade.DestroyController(destroy_all_models)
+
+    async def disable_user(self, username):
+        """Disable a user.
+
+        :param str username: Username
+
+        """
+        user_facade = client.UserManagerFacade.from_connection(self.connection)
+        entity = client.Entity(tag.user(username))
+        return await user_facade.DisableUser([entity])
+
+    async def enable_user(self, username):
+        """Re-enable a previously disabled user.
+
+        """
+        user_facade = client.UserManagerFacade.from_connection(self.connection)
+        entity = client.Entity(tag.user(username))
+        return await user_facade.EnableUser([entity])
+
+    def kill(self):
+        """Forcibly terminate all machines and other associated resources for
+        this controller.
+
+        """
+        raise NotImplementedError()
+
+    async def get_cloud(self):
+        """
+        Get the name of the cloud that this controller lives on.
+        """
+        cloud_facade = client.CloudFacade.from_connection(self.connection)
+
+        result = await cloud_facade.Clouds()
+        cloud = list(result.clouds.keys())[0]  # only lives on one cloud
+        return tag.untag('cloud-', cloud)
+
+    async def get_models(self, all_=False, username=None):
+        """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)
+
+        """
+        controller_facade = client.ControllerFacade.from_connection(
+            self.connection)
+        return await controller_facade.AllModels()
+
+    def get_payloads(self, *patterns):
+        """Return list of known payloads.
+
+        :param str \*patterns: Patterns to match against
+
+        Each pattern will be checked against the following info in Juju::
+
+            - unit name
+            - machine id
+            - payload type
+            - payload class
+            - payload id
+            - payload tag
+            - payload status
+
+        """
+        raise NotImplementedError()
+
+    def 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 logout(self, force=False):
+        """Log out of this controller.
+
+        :param bool force: Don't fail even if user not previously logged in
+            with a password
+
+        """
+        raise NotImplementedError()
+
+    def get_model(self, name):
+        """Get a model by name.
+
+        :param str name: Model name
+
+        """
+        raise NotImplementedError()
+
+    async def get_user(self, username, include_disabled=False):
+        """Get a user by name.
+
+        :param str username: Username
+
+        """
+        client_facade = client.UserManagerFacade.from_connection(
+            self.connection)
+        user = tag.user(username)
+        return await client_facade.UserInfo([client.Entity(user)],
+                                            include_disabled)
+
+    async def grant(self, username, acl='login'):
+        """Set access level of the given user on the controller
+
+        :param str username: Username
+        :param str acl: Access control ('login', 'add-model' or 'superuser')
+
+        """
+        controller_facade = client.ControllerFacade.from_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
+
+        :param str username: username
+
+        """
+        controller_facade = client.ControllerFacade.from_connection(
+            self.connection)
+        user = tag.user(username)
+        changes = client.ModifyControllerAccess('login', 'revoke', user)
+        return await controller_facade.ModifyControllerAccess([changes])
diff --git a/juju/credential.py b/juju/credential.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/juju/delta.py b/juju/delta.py
new file mode 100644 (file)
index 0000000..b1eba23
--- /dev/null
@@ -0,0 +1,79 @@
+from .client import client
+
+
+def get_entity_delta(d):
+    return _delta_types[d.entity](d.deltas)
+
+
+def get_entity_class(entity_type):
+    return _delta_types[entity_type].get_entity_class()
+
+
+class EntityDelta(client.Delta):
+    def get_id(self):
+        return self.data['id']
+
+    @classmethod
+    def get_entity_class(self):
+        return None
+
+
+class ActionDelta(EntityDelta):
+    @classmethod
+    def get_entity_class(self):
+        from .action import Action
+        return Action
+
+
+class ApplicationDelta(EntityDelta):
+    def get_id(self):
+        return self.data['name']
+
+    @classmethod
+    def get_entity_class(self):
+        from .application import Application
+        return Application
+
+
+class AnnotationDelta(EntityDelta):
+    def get_id(self):
+        return self.data['tag']
+
+    @classmethod
+    def get_entity_class(self):
+        from .annotation import Annotation
+        return Annotation
+
+
+class MachineDelta(EntityDelta):
+    @classmethod
+    def get_entity_class(self):
+        from .machine import Machine
+        return Machine
+
+
+class UnitDelta(EntityDelta):
+    def get_id(self):
+        return self.data['name']
+
+    @classmethod
+    def get_entity_class(self):
+        from .unit import Unit
+        return Unit
+
+
+class RelationDelta(EntityDelta):
+    @classmethod
+    def get_entity_class(self):
+        from .relation import Relation
+        return Relation
+
+
+_delta_types = {
+    'action': ActionDelta,
+    'application': ApplicationDelta,
+    'annotation': AnnotationDelta,
+    'machine': MachineDelta,
+    'unit': UnitDelta,
+    'relation': RelationDelta,
+}
diff --git a/juju/errors.py b/juju/errors.py
new file mode 100644 (file)
index 0000000..de52174
--- /dev/null
@@ -0,0 +1,16 @@
+class JujuError(Exception):
+    pass
+
+
+class JujuAPIError(JujuError):
+    def __init__(self, result):
+        self.result = result
+        self.message = result['error']
+        self.error_code = result.get('error-code')
+        self.response = result['response']
+        self.request_id = result['request-id']
+        super().__init__(self.message)
+
+
+class JujuConnectionError(ConnectionError, JujuError):
+    pass
diff --git a/juju/exceptions.py b/juju/exceptions.py
new file mode 100644 (file)
index 0000000..bcf07b6
--- /dev/null
@@ -0,0 +1,2 @@
+class DeadEntityException(Exception):
+    pass
diff --git a/juju/juju.py b/juju/juju.py
new file mode 100644 (file)
index 0000000..a9fcbbe
--- /dev/null
@@ -0,0 +1,118 @@
+class Juju(object):
+    def add_cloud(self, name, definition, replace=False):
+        """Add a user-defined cloud to Juju from among known cloud types.
+
+        :param str name: Name of cloud
+        :param dict definition: Cloud definition
+
+        Example cloud definition, as yaml::
+
+            type: openstack
+            auth-types: [ userpass ]
+            regions:
+              london:
+                endpoint: https://london.mycloud.com:35574/v3.0/
+
+        """
+        raise NotImplementedError()
+
+    def agree(self, *terms):
+        """Agree to the terms of a charm.
+
+        :param str \*terms: Terms to agree to
+
+        """
+        raise NotImplementedError()
+
+    def autoload_credentials(self):
+        """Finds cloud credentials and caches them for use by Juju when
+        bootstrapping.
+
+        """
+        raise NotImplementedError()
+
+    def create_budget(self):
+        """Create a new budget.
+
+        """
+        raise NotImplementedError()
+
+    def get_agreements(self):
+        """Return list of terms to which the current user has agreed.
+
+        """
+        raise NotImplementedError()
+
+    def get_budgets(self):
+        """Return list of available budgets.
+
+        """
+        raise NotImplementedError()
+
+    def get_clouds(self):
+        """Return list of all available clouds.
+
+        """
+        raise NotImplementedError()
+
+    def get_controllers(self):
+        """Return list of all available controllers.
+
+        (maybe move this to Cloud?)
+        """
+        raise NotImplementedError()
+
+    def get_plans(self, charm_url):
+        """Return list of plans available for the specified charm.
+
+        :param str charm_url: Charm url
+
+        """
+        raise NotImplementedError()
+
+    def register(self, registration_string):
+        """Register a user to a controller.
+
+        :param str registration_string: The registration string
+
+        """
+        raise NotImplementedError()
+
+    def set_budget(self, name, limit):
+        """Set a monthly budget limit.
+
+        :param str name: Name of budget
+        :param int limit: Monthly limit
+
+        """
+        raise NotImplementedError()
+
+    def get_cloud(self, name):
+        """Get a cloud by name.
+
+        :param str name: Name of cloud
+
+        """
+        raise NotImplementedError()
+
+    def get_controller(self, name, include_passwords=False):
+        """Get a controller by name.
+
+        :param str name: Name of controller
+        :param bool include_passwords: Include passwords for accounts
+
+        (maybe move this to Cloud?)
+        """
+        raise NotImplementedError()
+
+    def update_clouds(self):
+        """Update public cloud info available to Juju.
+
+        """
+        raise NotImplementedError()
+
+    def version(self):
+        """Return the Juju version.
+
+        """
+        raise NotImplementedError()
diff --git a/juju/loop.py b/juju/loop.py
new file mode 100644 (file)
index 0000000..4abedfc
--- /dev/null
@@ -0,0 +1,42 @@
+import asyncio
+import signal
+
+
+def run(*steps):
+    """
+    Helper to run one or more async functions synchronously, with graceful
+    handling of SIGINT / Ctrl-C.
+
+    Returns the return value of the last function.
+    """
+    if not steps:
+        return
+
+    task = None
+    run._sigint = False  # function attr to allow setting from closure
+    loop = asyncio.get_event_loop()
+
+    def abort():
+        task.cancel()
+        run._sigint = True
+
+    added = False
+    try:
+        loop.add_signal_handler(signal.SIGINT, abort)
+        added = True
+    except ValueError as e:
+        # add_signal_handler doesn't work in a thread
+        if 'main thread' not in str(e):
+            raise
+    try:
+        for step in steps:
+            task = loop.create_task(step)
+            loop.run_until_complete(asyncio.wait([task], loop=loop))
+            if run._sigint:
+                raise KeyboardInterrupt()
+            if task.exception():
+                raise task.exception()
+        return task.result()
+    finally:
+        if added:
+            loop.remove_signal_handler(signal.SIGINT)
diff --git a/juju/machine.py b/juju/machine.py
new file mode 100644 (file)
index 0000000..23b41c6
--- /dev/null
@@ -0,0 +1,262 @@
+import asyncio
+import logging
+import os
+
+from dateutil.parser import parse as parse_date
+
+from . import model, utils
+from .client import client
+from .errors import JujuError
+
+log = logging.getLogger(__name__)
+
+
+class Machine(model.ModelEntity):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.on_change(self._workaround_1695335)
+
+    async def _workaround_1695335(self, delta, old, new, model):
+        """
+        This is a (hacky) temporary work around for a bug in Juju where the
+        instance status and agent version fields don't get updated properly
+        by the AllWatcher.
+
+        Deltas never contain a value for `data['agent-status']['version']`,
+        and once the `instance-status` reaches `pending`, we no longer get
+        any updates for it (the deltas come in, but the `instance-status`
+        data is always the same after that).
+
+        To work around this, whenever a delta comes in for this machine, we
+        query FullStatus and use the data from there if and only if it's newer.
+        Luckily, the timestamps on the `since` field does seem to be accurate.
+
+        See https://bugs.launchpad.net/juju/+bug/1695335
+        """
+        if delta.data.get('synthetic', False):
+            # prevent infinite loops re-processing already processed deltas
+            return
+
+        full_status = await utils.run_with_interrupt(model.get_status(),
+                                                     model._watch_stopping,
+                                                     model.loop)
+        if model._watch_stopping.is_set():
+            return
+
+        if self.id not in full_status.machines:
+            return
+
+        if not full_status.machines[self.id]['instance-status']['since']:
+            return
+
+        machine = full_status.machines[self.id]
+
+        change_log = []
+        key_map = {
+            'status': 'current',
+            'info': 'message',
+            'since': 'since',
+        }
+
+        # handle agent version specially, because it's never set in
+        # deltas, and we don't want even a newer delta to clear it
+        agent_version = machine['agent-status']['version']
+        if agent_version:
+            delta.data['agent-status']['version'] = agent_version
+            change_log.append(('agent-version', '', agent_version))
+
+        # only update (other) delta fields if status data is newer
+        status_since = parse_date(machine['instance-status']['since'])
+        delta_since = parse_date(delta.data['instance-status']['since'])
+        if status_since > delta_since:
+            for status_key in ('status', 'info', 'since'):
+                delta_key = key_map[status_key]
+                status_value = machine['instance-status'][status_key]
+                delta_value = delta.data['instance-status'][delta_key]
+                change_log.append((delta_key, delta_value, status_value))
+                delta.data['instance-status'][delta_key] = status_value
+
+        if change_log:
+            log.debug('Overriding machine delta with FullStatus data')
+            for log_item in change_log:
+                log.debug('    {}: {} -> {}'.format(*log_item))
+            delta.data['synthetic'] = True
+            old_obj, new_obj = self.model.state.apply_delta(delta)
+            await model._notify_observers(delta, old_obj, new_obj)
+
+    async def destroy(self, force=False):
+        """Remove this machine from the model.
+
+        Blocks until the machine is actually removed.
+
+        """
+        facade = client.ClientFacade.from_connection(self.connection)
+
+        log.debug(
+            'Destroying machine %s', self.id)
+
+        await facade.DestroyMachines(force, [self.id])
+        return await self.model._wait(
+            'machine', self.id, 'remove')
+    remove = destroy
+
+    def run(self, command, timeout=None):
+        """Run command on this machine.
+
+        :param str command: The command to run
+        :param int timeout: Time to wait before command is considered failed
+
+        """
+        raise NotImplementedError()
+
+    async def set_annotations(self, annotations):
+        """Set annotations on this machine.
+
+        :param annotations map[string]string: the annotations as key/value
+            pairs.
+
+        """
+        log.debug('Updating annotations on machine %s', self.id)
+
+        self.ann_facade = client.AnnotationsFacade.from_connection(
+            self.connection)
+
+        ann = client.EntityAnnotations(
+            entity=self.id,
+            annotations=annotations,
+        )
+        return await self.ann_facade.Set([ann])
+
+    async def scp_to(self, source, destination, user='ubuntu', proxy=False,
+                     scp_opts=''):
+        """Transfer files to this machine.
+
+        :param str source: Local path of file(s) to transfer
+        :param str destination: Remote destination of transferred files
+        :param str user: Remote username
+        :param bool proxy: Proxy through the Juju API server
+        :param str scp_opts: Additional options to the `scp` command
+        """
+        if proxy:
+            raise NotImplementedError('proxy option is not implemented')
+
+        address = self.dns_name
+        destination = '%s@%s:%s' % (user, address, destination)
+        await self._scp(source, destination, scp_opts)
+
+    async def scp_from(self, source, destination, user='ubuntu', proxy=False,
+                       scp_opts=''):
+        """Transfer files from this machine.
+
+        :param str source: Remote path of file(s) to transfer
+        :param str destination: Local destination of transferred files
+        :param str user: Remote username
+        :param bool proxy: Proxy through the Juju API server
+        :param str scp_opts: Additional options to the `scp` command
+        """
+        if proxy:
+            raise NotImplementedError('proxy option is not implemented')
+
+        address = self.dns_name
+        source = '%s@%s:%s' % (user, address, source)
+        await self._scp(source, destination, scp_opts)
+
+    async def _scp(self, source, destination, scp_opts):
+        """ Execute an scp command. Requires a fully qualified source and
+        destination.
+        """
+        cmd = [
+            'scp',
+            '-i', os.path.expanduser('~/.local/share/juju/ssh/juju_id_rsa'),
+            '-o', 'StrictHostKeyChecking=no',
+            source, destination
+        ]
+        cmd += scp_opts.split()
+        loop = self.model.loop
+        process = await asyncio.create_subprocess_exec(*cmd, loop=loop)
+        await process.wait()
+        if process.returncode != 0:
+            raise JujuError("command failed: %s" % cmd)
+
+    def ssh(
+            self, command, user=None, proxy=False, ssh_opts=None):
+        """Execute a command over SSH on this machine.
+
+        :param str command: Command to execute
+        :param str user: Remote username
+        :param bool proxy: Proxy through the Juju API server
+        :param str ssh_opts: Additional options to the `ssh` command
+
+        """
+        raise NotImplementedError()
+
+    def status_history(self, num=20, utc=False):
+        """Get status history for this machine.
+
+        :param int num: Size of history backlog
+        :param bool utc: Display time as UTC in RFC3339 format
+
+        """
+        raise NotImplementedError()
+
+    @property
+    def agent_status(self):
+        """Returns the current Juju agent status string.
+
+        """
+        return self.safe_data['agent-status']['current']
+
+    @property
+    def agent_status_since(self):
+        """Get the time when the `agent_status` was last updated.
+
+        """
+        return parse_date(self.safe_data['agent-status']['since'])
+
+    @property
+    def agent_version(self):
+        """Get the version of the Juju machine agent.
+
+        May return None if the agent is not yet available.
+        """
+        version = self.safe_data['agent-status']['version']
+        if version:
+            return client.Number.from_json(version)
+        else:
+            return None
+
+    @property
+    def status(self):
+        """Returns the current machine provisioning status string.
+
+        """
+        return self.safe_data['instance-status']['current']
+
+    @property
+    def status_message(self):
+        """Returns the current machine provisioning status message.
+
+        """
+        return self.safe_data['instance-status']['message']
+
+    @property
+    def status_since(self):
+        """Get the time when the `status` was last updated.
+
+        """
+        return parse_date(self.safe_data['instance-status']['since'])
+
+    @property
+    def dns_name(self):
+        """Get the DNS name for this machine. This is a best guess based on the
+        addresses available in current data.
+
+        May return None if no suitable address is found.
+        """
+        for scope in ['public', 'local-cloud']:
+            addresses = self.safe_data['addresses'] or []
+            addresses = [address for address in addresses
+                         if address['scope'] == scope]
+            if addresses:
+                return addresses[0]['value']
+        return None
diff --git a/juju/model.py b/juju/model.py
new file mode 100644 (file)
index 0000000..bd8709a
--- /dev/null
@@ -0,0 +1,2031 @@
+import asyncio
+import base64
+import collections
+import hashlib
+import json
+import logging
+import os
+import re
+import stat
+import tempfile
+import weakref
+import zipfile
+from concurrent.futures import CancelledError
+from functools import partial
+from pathlib import Path
+
+import websockets
+import yaml
+import theblues.charmstore
+import theblues.errors
+
+from . import tag, utils
+from .client import client
+from .client import connection
+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 .exceptions import DeadEntityException
+from .errors import JujuError, JujuAPIError
+from .placement import parse as parse_placement
+
+log = logging.getLogger(__name__)
+
+
+class _Observer(object):
+    """Wrapper around an observer callable.
+
+    This wrapper allows filter criteria to be associated with the
+    callable so that it's only called for changes that meet the criteria.
+
+    """
+    def __init__(self, callable_, entity_type, action, entity_id, predicate):
+        self.callable_ = callable_
+        self.entity_type = entity_type
+        self.action = action
+        self.entity_id = entity_id
+        self.predicate = predicate
+        if self.entity_id:
+            self.entity_id = str(self.entity_id)
+            if not self.entity_id.startswith('^'):
+                self.entity_id = '^' + self.entity_id
+            if not self.entity_id.endswith('$'):
+                self.entity_id += '$'
+
+    async def __call__(self, delta, old, new, model):
+        await self.callable_(delta, old, new, model)
+
+    def cares_about(self, delta):
+        """Return True if this observer "cares about" (i.e. wants to be
+        called) for a this delta.
+
+        """
+        if (self.entity_id and delta.get_id() and
+                not re.match(self.entity_id, str(delta.get_id()))):
+            return False
+
+        if self.entity_type and self.entity_type != delta.entity:
+            return False
+
+        if self.action and self.action != delta.type:
+            return False
+
+        if self.predicate and not self.predicate(delta):
+            return False
+
+        return True
+
+
+class ModelObserver(object):
+    """
+    Base class for creating observers that react to changes in a model.
+    """
+    async def __call__(self, delta, old, new, model):
+        handler_name = 'on_{}_{}'.format(delta.entity, delta.type)
+        method = getattr(self, handler_name, self.on_change)
+        await method(delta, old, new, model)
+
+    async def on_change(self, delta, old, new, model):
+        """Generic model-change handler.
+
+        This should be overridden in a subclass.
+
+        :param delta: :class:`juju.client.overrides.Delta`
+        :param old: :class:`juju.model.ModelEntity`
+        :param new: :class:`juju.model.ModelEntity`
+        :param model: :class:`juju.model.Model`
+
+        """
+        pass
+
+
+class ModelState(object):
+    """Holds the state of the model, including the delta history of all
+    entities in the model.
+
+    """
+    def __init__(self, model):
+        self.model = model
+        self.state = dict()
+
+    def _live_entity_map(self, entity_type):
+        """Return an id:Entity map of all the living entities of
+        type ``entity_type``.
+
+        """
+        return {
+            entity_id: self.get_entity(entity_type, entity_id)
+            for entity_id, history in self.state.get(entity_type, {}).items()
+            if history[-1] is not None
+        }
+
+    @property
+    def applications(self):
+        """Return a map of application-name:Application for all applications
+        currently in the model.
+
+        """
+        return self._live_entity_map('application')
+
+    @property
+    def machines(self):
+        """Return a map of machine-id:Machine for all machines currently in
+        the model.
+
+        """
+        return self._live_entity_map('machine')
+
+    @property
+    def units(self):
+        """Return a map of unit-id:Unit for all units currently in
+        the model.
+
+        """
+        return self._live_entity_map('unit')
+
+    def entity_history(self, entity_type, entity_id):
+        """Return the history deque for an entity.
+
+        """
+        return self.state[entity_type][entity_id]
+
+    def entity_data(self, entity_type, entity_id, history_index):
+        """Return the data dict for an entity at a specific index of its
+        history.
+
+        """
+        return self.entity_history(entity_type, entity_id)[history_index]
+
+    def apply_delta(self, delta):
+        """Apply delta to our state and return a copy of the
+        affected object as it was before and after the update, e.g.:
+
+            old_obj, new_obj = self.apply_delta(delta)
+
+        old_obj may be None if the delta is for the creation of a new object,
+        e.g. a new application or unit is deployed.
+
+        new_obj will never be None, but may be dead (new_obj.dead == True)
+        if the object was deleted as a result of the delta being applied.
+
+        """
+        history = (
+            self.state
+            .setdefault(delta.entity, {})
+            .setdefault(delta.get_id(), collections.deque())
+        )
+
+        history.append(delta.data)
+        if delta.type == 'remove':
+            history.append(None)
+
+        entity = self.get_entity(delta.entity, delta.get_id())
+        return entity.previous(), entity
+
+    def get_entity(
+            self, entity_type, entity_id, history_index=-1, connected=True):
+        """Return an object instance for the given entity_type and id.
+
+        By default the object state matches the most recent state from
+        Juju. To get an instance of the object in an older state, pass
+        history_index, an index into the history deque for the entity.
+
+        """
+
+        if history_index < 0 and history_index != -1:
+            history_index += len(self.entity_history(entity_type, entity_id))
+            if history_index < 0:
+                return None
+
+        try:
+            self.entity_data(entity_type, entity_id, history_index)
+        except IndexError:
+            return None
+
+        entity_class = get_entity_class(entity_type)
+        return entity_class(
+            entity_id, self.model, history_index=history_index,
+            connected=connected)
+
+
+class ModelEntity(object):
+    """An object in the Model tree"""
+
+    def __init__(self, entity_id, model, history_index=-1, connected=True):
+        """Initialize a new entity
+
+        :param entity_id str: The unique id of the object in the model
+        :param model: The model instance in whose object tree this
+            entity resides
+        :history_index int: The index of this object's state in the model's
+            history deque for this entity
+        :connected bool: Flag indicating whether this object gets live updates
+            from the model.
+
+        """
+        self.entity_id = entity_id
+        self.model = model
+        self._history_index = history_index
+        self.connected = connected
+        self.connection = model.connection
+
+    def __repr__(self):
+        return '<{} entity_id="{}">'.format(type(self).__name__,
+                                            self.entity_id)
+
+    def __getattr__(self, name):
+        """Fetch object attributes from the underlying data dict held in the
+        model.
+
+        """
+        try:
+            return self.safe_data[name]
+        except KeyError:
+            name = name.replace('_', '-')
+            if name in self.safe_data:
+                return self.safe_data[name]
+            else:
+                raise
+
+    def __bool__(self):
+        return bool(self.data)
+
+    def on_change(self, callable_):
+        """Add a change observer to this entity.
+
+        """
+        self.model.add_observer(
+            callable_, self.entity_type, 'change', self.entity_id)
+
+    def on_remove(self, callable_):
+        """Add a remove observer to this entity.
+
+        """
+        self.model.add_observer(
+            callable_, self.entity_type, 'remove', self.entity_id)
+
+    @property
+    def entity_type(self):
+        """A string identifying the entity type of this object, e.g.
+        'application' or 'unit', etc.
+
+        """
+        return self.__class__.__name__.lower()
+
+    @property
+    def current(self):
+        """Return True if this object represents the current state of the
+        entity in the underlying model.
+
+        This will be True except when the object represents an entity at a
+        non-latest state in history, e.g. if the object was obtained by calling
+        .previous() on another object.
+
+        """
+        return self._history_index == -1
+
+    @property
+    def dead(self):
+        """Returns True if this entity no longer exists in the underlying
+        model.
+
+        """
+        return (
+            self.data is None or
+            self.model.state.entity_data(
+                self.entity_type, self.entity_id, -1) is None
+        )
+
+    @property
+    def alive(self):
+        """Returns True if this entity still exists in the underlying
+        model.
+
+        """
+        return not self.dead
+
+    @property
+    def data(self):
+        """The data dictionary for this entity.
+
+        """
+        return self.model.state.entity_data(
+            self.entity_type, self.entity_id, self._history_index)
+
+    @property
+    def safe_data(self):
+        """The data dictionary for this entity.
+
+        If this `ModelEntity` points to the dead state, it will
+        raise `DeadEntityException`.
+
+        """
+        if self.data is None:
+            raise DeadEntityException(
+                "Entity {}:{} is dead - its attributes can no longer be "
+                "accessed. Use the .previous() method on this object to get "
+                "a copy of the object at its previous state.".format(
+                    self.entity_type, self.entity_id))
+        return self.data
+
+    def previous(self):
+        """Return a copy of this object as was at its previous state in
+        history.
+
+        Returns None if this object is new (and therefore has no history).
+
+        The returned object is always "disconnected", i.e. does not receive
+        live updates.
+
+        """
+        return self.model.state.get_entity(
+            self.entity_type, self.entity_id, self._history_index - 1,
+            connected=False)
+
+    def next(self):
+        """Return a copy of this object at its next state in
+        history.
+
+        Returns None if this object is already the latest.
+
+        The returned object is "disconnected", i.e. does not receive
+        live updates, unless it is current (latest).
+
+        """
+        if self._history_index == -1:
+            return None
+
+        new_index = self._history_index + 1
+        connected = (
+            new_index == len(self.model.state.entity_history(
+                self.entity_type, self.entity_id)) - 1
+        )
+        return self.model.state.get_entity(
+            self.entity_type, self.entity_id, self._history_index - 1,
+            connected=connected)
+
+    def latest(self):
+        """Return a copy of this object at its current state in the model.
+
+        Returns self if this object is already the latest.
+
+        The returned object is always "connected", i.e. receives
+        live updates from the model.
+
+        """
+        if self._history_index == -1:
+            return self
+
+        return self.model.state.get_entity(self.entity_type, self.entity_id)
+
+
+class Model(object):
+    """
+    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.
+
+        :param loop: an asyncio event loop
+        :param max_frame_size: See
+            `juju.client.connection.Connection.MAX_FRAME_SIZE`
+
+        """
+        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)
+
+    async def __aenter__(self):
+        await self.connect_current()
+        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, **kw):
+        """Connect to an arbitrary Juju model.
+
+        args and kw are passed through to Connection.connect()
+
+        """
+        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()
+
+    async def connect_current(self):
+        """Connect to the current Juju model.
+
+        """
+        self.connection = await connection.Connection.connect_current(
+            self.loop, max_frame_size=self.max_frame_size)
+        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
+
+        """
+        self.connection = await connection.Connection.connect_model(
+            model_name, self.loop, self.max_frame_size)
+        await self._after_connect()
+
+    async def _after_connect(self):
+        """Run initialization steps after connecting to websocket.
+
+        """
+        self._watch()
+        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:
+            log.debug('Stopping watcher task')
+            self._watch_stopping.set()
+            await self._watch_stopped.wait()
+            log.debug('Closing model connection')
+            await self.connection.close()
+            self.connection = None
+
+    async def add_local_charm_dir(self, charm_dir, series):
+        """Upload a local charm to the model.
+
+        This will automatically generate an archive from
+        the charm dir.
+
+        :param charm_dir: Path to the charm directory
+        :param series: Charm series
+
+        """
+        fh = tempfile.NamedTemporaryFile()
+        CharmArchiveGenerator(charm_dir).make_archive(fh.name)
+        with fh:
+            func = partial(
+                self.add_local_charm, fh, series, os.stat(fh.name).st_size)
+            charm_url = await self.loop.run_in_executor(None, func)
+
+        log.debug('Uploaded local charm: %s -> %s', charm_dir, charm_url)
+        return charm_url
+
+    def add_local_charm(self, charm_file, series, size=None):
+        """Upload a local charm archive to the model.
+
+        Returns the 'local:...' url that should be used to deploy the charm.
+
+        :param charm_file: Path to charm zip archive
+        :param series: Charm series
+        :param size: Size of the archive, in bytes
+        :return str: 'local:...' url for deploying the charm
+        :raises: :class:`JujuError` if the upload fails
+
+        Uses an https endpoint at the same host:port as the wss.
+        Supports large file uploads.
+
+        .. warning::
+
+           This method will block. Consider using :meth:`add_local_charm_dir`
+           instead.
+
+        """
+        conn, headers, path_prefix = self.connection.https_connection()
+        path = "%s/charms?series=%s" % (path_prefix, series)
+        headers['Content-Type'] = 'application/zip'
+        if size:
+            headers['Content-Length'] = size
+        conn.request("POST", path, charm_file, headers)
+        response = conn.getresponse()
+        result = response.read().decode()
+        if not response.status == 200:
+            raise JujuError(result)
+        result = json.loads(result)
+        return result['charm-url']
+
+    def all_units_idle(self):
+        """Return True if all units are idle.
+
+        """
+        for unit in self.units.values():
+            unit_status = unit.data['agent-status']['current']
+            if unit_status != 'idle':
+                return False
+        return True
+
+    async def reset(self, force=False):
+        """Reset the model to a clean state.
+
+        :param bool force: Force-terminate machines.
+
+        This returns only after the model has reached a clean state. "Clean"
+        means no applications or machines exist in the model.
+
+        """
+        log.debug('Resetting model')
+        for app in self.applications.values():
+            await app.destroy()
+        for machine in self.machines.values():
+            await machine.destroy(force=force)
+        await self.block_until(
+            lambda: len(self.machines) == 0
+        )
+
+    async def block_until(self, *conditions, timeout=None, wait_period=0.5):
+        """Return only after all conditions are true.
+
+        """
+        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)
+
+    @property
+    def applications(self):
+        """Return a map of application-name:Application for all applications
+        currently in the model.
+
+        """
+        return self.state.applications
+
+    @property
+    def machines(self):
+        """Return a map of machine-id:Machine for all machines currently in
+        the model.
+
+        """
+        return self.state.machines
+
+    @property
+    def units(self):
+        """Return a map of unit-id:Unit for all units currently in
+        the model.
+
+        """
+        return self.state.units
+
+    async def get_info(self):
+        """Return a client.ModelInfo object for this Model.
+
+        Retrieves latest info for this Model from the api server. The
+        return value is cached on the Model.info attribute so that the
+        valued may be accessed again without another api call, if
+        desired.
+
+        This method is called automatically when the Model is connected,
+        resulting in Model.info being initialized without requiring an
+        explicit call to this method.
+
+        """
+        facade = client.ClientFacade.from_connection(self.connection)
+
+        self.info = await facade.ModelInfo()
+        log.debug('Got ModelInfo: %s', vars(self.info))
+
+        return self.info
+
+    def add_observer(
+            self, callable_, entity_type=None, action=None, entity_id=None,
+            predicate=None):
+        """Register an "on-model-change" callback
+
+        Once the model is connected, ``callable_``
+        will be called each time the model changes. ``callable_`` should
+        be Awaitable and accept the following positional arguments:
+
+            delta - An instance of :class:`juju.delta.EntityDelta`
+                containing the raw delta data recv'd from the Juju
+                websocket.
+
+            old_obj - If the delta modifies an existing object in the model,
+                old_obj will be a copy of that object, as it was before the
+                delta was applied. Will be None if the delta creates a new
+                entity in the model.
+
+            new_obj - A copy of the new or updated object, after the delta
+                is applied. Will be None if the delta removes an entity
+                from the model.
+
+            model - The :class:`Model` itself.
+
+        Events for which ``callable_`` is called can be specified by passing
+        entity_type, action, and/or entitiy_id filter criteria, e.g.::
+
+            add_observer(
+                myfunc,
+                entity_type='application', action='add', entity_id='ubuntu')
+
+        For more complex filtering conditions, pass a predicate function. It
+        will be called with a delta as its only argument. If the predicate
+        function returns True, the ``callable_`` will be called.
+
+        """
+        observer = _Observer(
+            callable_, entity_type, action, entity_id, predicate)
+        self.observers[observer] = callable_
+
+    def _watch(self):
+        """Start an asynchronous watch against this model.
+
+        See :meth:`add_observer` to register an onchange callback.
+
+        """
+        async def _all_watcher():
+            try:
+                allwatcher = client.AllWatcherFacade.from_connection(
+                    self.connection)
+                while not self._watch_stopping.is_set():
+                    try:
+                        results = await utils.run_with_interrupt(
+                            allwatcher.Next(),
+                            self._watch_stopping,
+                            self.loop)
+                    except JujuAPIError as e:
+                        if 'watcher was stopped' not in str(e):
+                            raise
+                        if self._watch_stopping.is_set():
+                            # this shouldn't ever actually happen, because
+                            # the event should trigger before the controller
+                            # has a chance to tell us the watcher is stopped
+                            # but handle it gracefully, just in case
+                            break
+                        # controller stopped our watcher for some reason
+                        # but we're not actually stopping, so just restart it
+                        log.warning(
+                            'Watcher: watcher stopped, restarting')
+                        del allwatcher.Id
+                        continue
+                    except websockets.ConnectionClosed:
+                        monitor = self.connection.monitor
+                        if monitor.status == monitor.ERROR:
+                            # closed unexpectedly, try to reopen
+                            log.warning(
+                                'Watcher: connection closed, reopening')
+                            await self.connection.reconnect()
+                            del allwatcher.Id
+                            continue
+                        else:
+                            # closed on request, go ahead and shutdown
+                            break
+                    if self._watch_stopping.is_set():
+                        await allwatcher.Stop()
+                        break
+                    for delta in results.deltas:
+                        delta = get_entity_delta(delta)
+                        old_obj, new_obj = self.state.apply_delta(delta)
+                        await self._notify_observers(delta, old_obj, new_obj)
+                    self._watch_received.set()
+            except CancelledError:
+                pass
+            except Exception:
+                log.exception('Error in watcher')
+                raise
+            finally:
+                self._watch_stopped.set()
+
+        log.debug('Starting watcher task')
+        self._watch_received.clear()
+        self._watch_stopping.clear()
+        self._watch_stopped.clear()
+        self.loop.create_task(_all_watcher())
+
+    async def _notify_observers(self, delta, old_obj, new_obj):
+        """Call observing callbacks, notifying them of a change in model state
+
+        :param delta: The raw change from the watcher
+            (:class:`juju.client.overrides.Delta`)
+        :param old_obj: The object in the model that this delta updates.
+            May be None.
+        :param new_obj: The object in the model that is created or updated
+            by applying this delta.
+
+        """
+        if new_obj and not old_obj:
+            delta.type = 'add'
+
+        log.debug(
+            'Model changed: %s %s %s',
+            delta.entity, delta.type, delta.get_id())
+
+        for o in self.observers:
+            if o.cares_about(delta):
+                asyncio.ensure_future(o(delta, old_obj, new_obj, self),
+                                      loop=self.loop)
+
+    async def _wait(self, entity_type, entity_id, action, predicate=None):
+        """
+        Block the calling routine until a given action has happened to the
+        given entity
+
+        :param entity_type: The entity's type.
+        :param entity_id: The entity's id.
+        :param action: the type of action (e.g., 'add', 'change', or 'remove')
+        :param predicate: optional callable that must take as an
+            argument a delta, and must return a boolean, indicating
+            whether the delta contains the specific action we're looking
+            for. For example, you might check to see whether a 'change'
+            has a 'completed' status. See the _Observer class for details.
+
+        """
+        q = asyncio.Queue(loop=self.loop)
+
+        async def callback(delta, old, new, model):
+            await q.put(delta.get_id())
+
+        self.add_observer(callback, entity_type, action, entity_id, predicate)
+        entity_id = await q.get()
+        # object might not be in the entity_map if we were waiting for a
+        # 'remove' action
+        return self.state._live_entity_map(entity_type).get(entity_id)
+
+    async def _wait_for_new(self, entity_type, entity_id=None, predicate=None):
+        """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.
+
+        """
+        # 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)
+
+    async def wait_for_action(self, action_id):
+        """Given an action, wait for it to complete."""
+
+        if action_id.startswith("action-"):
+            # if we've been passed action.tag, transform it into the
+            # id that the api deltas will use.
+            action_id = action_id[7:]
+
+        def predicate(delta):
+            return delta.data['status'] in ('completed', 'failed')
+
+        return await self._wait('action', action_id, 'change', predicate)
+
+    async def add_machine(
+            self, spec=None, constraints=None, disks=None, series=None):
+        """Start a new, empty machine and optionally a container, or add a
+        container to a machine.
+
+        :param str spec: Machine specification
+            Examples::
+
+                (None) - starts a new machine
+                'lxd' - starts a new machine with one lxd container
+                'lxd:4' - starts a new lxd container on machine 4
+                'ssh:user@10.10.0.3' - manually provisions a machine with ssh
+                'zone=us-east-1a' - starts a machine in zone us-east-1s on AWS
+                'maas2.name' - acquire machine maas2.name on MAAS
+
+        :param dict constraints: Machine constraints, which can contain the
+            the following keys::
+
+                arch : str
+                container : str
+                cores : int
+                cpu_power : int
+                instance_type : str
+                mem : int
+                root_disk : int
+                spaces : list(str)
+                tags : list(str)
+                virt_type : str
+
+            Example::
+
+                constraints={
+                    'mem': 256 * MB,
+                    'tags': ['virtual'],
+                }
+
+        :param list disks: List of disk constraint dictionaries, which can
+            contain the following keys::
+
+                count : int
+                pool : str
+                size : int
+
+            Example::
+
+                disks=[{
+                    'pool': 'rootfs',
+                    'size': 10 * GB,
+                    'count': 1,
+                }]
+
+        :param str series: Series, e.g. 'xenial'
+
+        Supported container types are: lxd, kvm
+
+        When deploying a container to an existing machine, constraints cannot
+        be used.
+
+        """
+        params = client.AddMachineParams()
+        params.jobs = ['JobHostUnits']
+
+        if spec:
+            placement = parse_placement(spec)
+            if placement:
+                params.placement = placement[0]
+
+        if constraints:
+            params.constraints = client.Value.from_json(constraints)
+
+        if disks:
+            params.disks = [
+                client.Constraints.from_json(o) for o in disks]
+
+        if series:
+            params.series = series
+
+        # Submit the request.
+        client_facade = client.ClientFacade.from_connection(self.connection)
+        results = await client_facade.AddMachines([params])
+        error = results.machines[0].error
+        if error:
+            raise ValueError("Error adding machine: %s" % error.message)
+        machine_id = results.machines[0].machine
+        log.debug('Added new machine %s', machine_id)
+        return await self._wait_for_new('machine', machine_id)
+
+    async def add_relation(self, relation1, relation2):
+        """Add a relation between two applications.
+
+        :param str relation1: '<application>[:<relation_name>]'
+        :param str relation2: '<application>[:<relation_name>]'
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Adding relation %s <-> %s', relation1, relation2)
+
+        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
+
+        def predicate(delta):
+            endpoints = {}
+            for endpoint in delta.data['endpoints']:
+                endpoints[endpoint['application-name']] = endpoint['relation']
+            return endpoints == result.endpoints
+
+        return await self._wait_for_new('relation', None, predicate)
+
+    def add_space(self, name, *cidrs):
+        """Add a new network space.
+
+        Adds a new space with the given name and associates the given
+        (optional) list of existing subnet CIDRs with it.
+
+        :param str name: Name of the space
+        :param \*cidrs: Optional list of existing subnet CIDRs
+
+        """
+        raise NotImplementedError()
+
+    async def add_ssh_key(self, user, key):
+        """Add a public SSH key to this model.
+
+        :param str user: The username of the user
+        :param str key: The public ssh key
+
+        """
+        key_facade = client.KeyManagerFacade.from_connection(self.connection)
+        return await key_facade.AddKeys([key], user)
+    add_ssh_keys = add_ssh_key
+
+    def add_subnet(self, cidr_or_id, space, *zones):
+        """Add an existing subnet to this model.
+
+        :param str cidr_or_id: CIDR or provider ID of the existing subnet
+        :param str space: Network space with which to associate
+        :param str \*zones: Zone(s) in which the subnet resides
+
+        """
+        raise NotImplementedError()
+
+    def get_backups(self):
+        """Retrieve metadata for backups in this model.
+
+        """
+        raise NotImplementedError()
+
+    def block(self, *commands):
+        """Add a new block to this model.
+
+        :param str \*commands: The commands to block. Valid values are
+            'all-changes', 'destroy-model', 'remove-object'
+
+        """
+        raise NotImplementedError()
+
+    def get_blocks(self):
+        """List blocks for this model.
+
+        """
+        raise NotImplementedError()
+
+    def get_cached_images(self, arch=None, kind=None, series=None):
+        """Return a list of cached OS images.
+
+        :param str arch: Filter by image architecture
+        :param str kind: Filter by image kind, e.g. 'lxd'
+        :param str series: Filter by image series, e.g. 'xenial'
+
+        """
+        raise NotImplementedError()
+
+    def create_backup(self, note=None, no_download=False):
+        """Create a backup of this model.
+
+        :param str note: A note to store with the backup
+        :param bool no_download: Do not download the backup archive
+        :return str: Path to downloaded archive
+
+        """
+        raise NotImplementedError()
+
+    def create_storage_pool(self, name, provider_type, **pool_config):
+        """Create or define a storage pool.
+
+        :param str name: Name to give the storage pool
+        :param str provider_type: Pool provider type
+        :param \*\*pool_config: key/value pool configuration pairs
+
+        """
+        raise NotImplementedError()
+
+    def debug_log(
+            self, no_tail=False, exclude_module=None, include_module=None,
+            include=None, level=None, limit=0, lines=10, replay=False,
+            exclude=None):
+        """Get log messages for this model.
+
+        :param bool no_tail: Stop after returning existing log messages
+        :param list exclude_module: Do not show log messages for these logging
+            modules
+        :param list include_module: Only show log messages for these logging
+            modules
+        :param list include: Only show log messages for these entities
+        :param str level: Log level to show, valid options are 'TRACE',
+            'DEBUG', 'INFO', 'WARNING', 'ERROR,
+        :param int limit: Return this many of the most recent (possibly
+            filtered) lines are shown
+        :param int lines: Yield this many of the most recent lines, and keep
+            yielding
+        :param bool replay: Yield the entire log, and keep yielding
+        :param list exclude: Do not show log messages for these entities
+
+        """
+        raise NotImplementedError()
+
+    def _get_series(self, entity_url, entity):
+        # try to get the series from the provided charm URL
+        if entity_url.startswith('cs:'):
+            parts = entity_url[3:].split('/')
+        else:
+            parts = entity_url.split('/')
+        if parts[0].startswith('~'):
+            parts.pop(0)
+        if len(parts) > 1:
+            # series was specified in the URL
+            return parts[0]
+        # series was not supplied at all, so use the newest
+        # supported series according to the charm store
+        ss = entity['Meta']['supported-series']
+        return ss['SupportedSeries'][0]
+
+    async def deploy(
+            self, entity_url, application_name=None, bind=None, budget=None,
+            channel=None, config=None, constraints=None, force=False,
+            num_units=1, plan=None, resources=None, series=None, storage=None,
+            to=None):
+        """Deploy a new service or bundle.
+
+        :param str entity_url: Charm or bundle url
+        :param str application_name: Name to give the service
+        :param dict bind: <charm endpoint>:<network space> pairs
+        :param dict budget: <budget name>:<limit> pairs
+        :param str channel: Charm store channel from which to retrieve
+            the charm or bundle, e.g. 'edge'
+        :param dict config: Charm configuration dictionary
+        :param constraints: Service constraints
+        :type constraints: :class:`juju.Constraints`
+        :param bool force: Allow charm to be deployed to a machine running
+            an unsupported series
+        :param int num_units: Number of units to deploy
+        :param str plan: Plan under which to deploy charm
+        :param dict resources: <resource name>:<file path> pairs
+        :param str series: Series on which to deploy
+        :param dict storage: Storage constraints TODO how do these look?
+        :param to: Placement directive as a string. For example:
+
+            '23' - place on machine 23
+            'lxd:7' - place in new lxd container on machine 7
+            '24/lxd/3' - place in container 3 on machine 24
+
+            If None, a new machine is provisioned.
+
+
+        TODO::
+
+            - support local resources
+
+        """
+        if storage:
+            storage = {
+                k: client.Constraints(**v)
+                for k, v in storage.items()
+            }
+
+        is_local = (
+            entity_url.startswith('local:') or
+            os.path.isdir(entity_url)
+        )
+        if is_local:
+            entity_id = entity_url.replace('local:', '')
+        else:
+            entity = await self.charmstore.entity(entity_url, channel=channel)
+            entity_id = entity['Id']
+
+        client_facade = client.ClientFacade.from_connection(self.connection)
+
+        is_bundle = ((is_local and
+                      (Path(entity_id) / 'bundle.yaml').exists()) or
+                     (not is_local and 'bundle/' in entity_id))
+
+        if is_bundle:
+            handler = BundleHandler(self)
+            await handler.fetch_plan(entity_id)
+            await handler.execute_plan()
+            extant_apps = {app for app in self.applications}
+            pending_apps = set(handler.applications) - extant_apps
+            if pending_apps:
+                # new apps will usually be in the model by now, but if some
+                # haven't made it yet we'll need to wait on them to be added
+                await asyncio.gather(*[
+                    asyncio.ensure_future(
+                        self._wait_for_new('application', app_name),
+                        loop=self.loop)
+                    for app_name in pending_apps
+                ], loop=self.loop)
+            return [app for name, app in self.applications.items()
+                    if name in handler.applications]
+        else:
+            if not is_local:
+                if not application_name:
+                    application_name = entity['Meta']['charm-metadata']['Name']
+                if not series:
+                    series = self._get_series(entity_url, entity)
+                await client_facade.AddCharm(channel, entity_id)
+                # XXX: we're dropping local resources here, but we don't
+                # actually support them yet anyway
+                resources = await self._add_store_resources(application_name,
+                                                            entity_id,
+                                                            entity)
+            else:
+                # We have a local charm dir that needs to be uploaded
+                charm_dir = os.path.abspath(
+                    os.path.expanduser(entity_id))
+                series = series or get_charm_series(charm_dir)
+                if not series:
+                    raise JujuError(
+                        "Couldn't determine series for charm at {}. "
+                        "Pass a 'series' kwarg to Model.deploy().".format(
+                            charm_dir))
+                entity_id = await self.add_local_charm_dir(charm_dir, series)
+            return await self._deploy(
+                charm_url=entity_id,
+                application=application_name,
+                series=series,
+                config=config or {},
+                constraints=constraints,
+                endpoint_bindings=bind,
+                resources=resources,
+                storage=storage,
+                channel=channel,
+                num_units=num_units,
+                placement=parse_placement(to)
+            )
+
+    async def _add_store_resources(self, application, entity_url, entity=None):
+        if not entity:
+            # avoid extra charm store call if one was already made
+            entity = await self.charmstore.entity(entity_url)
+        resources = [
+            {
+                'description': resource['Description'],
+                'fingerprint': resource['Fingerprint'],
+                'name': resource['Name'],
+                'path': resource['Path'],
+                'revision': resource['Revision'],
+                'size': resource['Size'],
+                'type_': resource['Type'],
+                'origin': 'store',
+            } for resource in entity['Meta']['resources']
+        ]
+
+        if not resources:
+            return None
+
+        resources_facade = client.ResourcesFacade.from_connection(
+            self.connection)
+        response = await resources_facade.AddPendingResources(
+            tag.application(application),
+            entity_url,
+            [client.CharmResource(**resource) for resource in resources])
+        resource_map = {resource['name']: pid
+                        for resource, pid
+                        in zip(resources, response.pending_ids)}
+        return resource_map
+
+    async def _deploy(self, charm_url, application, series, config,
+                      constraints, endpoint_bindings, resources, storage,
+                      channel=None, num_units=None, placement=None):
+        """Logic shared between `Model.deploy` and `BundleHandler.deploy`.
+        """
+        log.info('Deploying %s', charm_url)
+
+        # stringify all config values for API, and convert to YAML
+        config = {k: str(v) for k, v in config.items()}
+        config = yaml.dump({application: config},
+                           default_flow_style=False)
+
+        app_facade = client.ApplicationFacade.from_connection(
+            self.connection)
+
+        app = client.ApplicationDeploy(
+            charm_url=charm_url,
+            application=application,
+            series=series,
+            channel=channel,
+            config_yaml=config,
+            constraints=parse_constraints(constraints),
+            endpoint_bindings=endpoint_bindings,
+            num_units=num_units,
+            resources=resources,
+            storage=storage,
+            placement=placement
+        )
+
+        result = await app_facade.Deploy([app])
+        errors = [r.error.message for r in result.results if r.error]
+        if errors:
+            raise JujuError('\n'.join(errors))
+        return await self._wait_for_new('application', application)
+
+    async def destroy(self):
+        """Terminate all machines and resources for this model.
+            Is already implemented in controller.py.
+        """
+        raise NotImplementedError()
+
+    async def destroy_unit(self, *unit_names):
+        """Destroy units by name.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Destroying unit%s %s',
+            's' if len(unit_names) == 1 else '',
+            ' '.join(unit_names))
+
+        return await app_facade.DestroyUnits(list(unit_names))
+    destroy_units = destroy_unit
+
+    def get_backup(self, archive_id):
+        """Download a backup archive file.
+
+        :param str archive_id: The id of the archive to download
+        :return str: Path to the archive file
+
+        """
+        raise NotImplementedError()
+
+    def enable_ha(
+            self, num_controllers=0, constraints=None, series=None, to=None):
+        """Ensure sufficient controllers exist to provide redundancy.
+
+        :param int num_controllers: Number of controllers to make available
+        :param constraints: Constraints to apply to the controller machines
+        :type constraints: :class:`juju.Constraints`
+        :param str series: Series of the controller machines
+        :param list to: Placement directives for controller machines, e.g.::
+
+            '23' - machine 23
+            'lxc:7' - new lxc container on machine 7
+            '24/lxc/3' - lxc container 3 or machine 24
+
+            If None, a new machine is provisioned.
+
+        """
+        raise NotImplementedError()
+
+    async def get_config(self):
+        """Return the configuration settings for this model.
+
+        :returns: A ``dict`` mapping keys to `ConfigValue` instances,
+            which have `source` and `value` attributes.
+        """
+        config_facade = client.ModelConfigFacade.from_connection(
+            self.connection
+        )
+        result = await config_facade.ModelGet()
+        config = result.config
+        for key, value in config.items():
+            config[key] = ConfigValue.from_json(value)
+        return config
+
+    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])
+
+    def import_ssh_key(self, identity):
+        """Add a public SSH key from a trusted indentity source to this model.
+
+        :param str identity: User identity in the form <lp|gh>:<username>
+
+        """
+        raise NotImplementedError()
+    import_ssh_keys = import_ssh_key
+
+    async def get_machines(self):
+        """Return list of machines in this model.
+
+        """
+        return list(self.state.machines.keys())
+
+    def get_shares(self):
+        """Return list of all users with access to this model.
+
+        """
+        raise NotImplementedError()
+
+    def get_spaces(self):
+        """Return list of all known spaces, including associated subnets.
+
+        """
+        raise NotImplementedError()
+
+    async def get_ssh_key(self, raw_ssh=False):
+        """Return known SSH keys for this model.
+        :param bool raw_ssh: if True, returns the raw ssh key,
+            else it's fingerprint
+
+        """
+        key_facade = client.KeyManagerFacade.from_connection(self.connection)
+        entity = {'tag': tag.model(self.info.uuid)}
+        entities = client.Entities([entity])
+        return await key_facade.ListKeys(entities, raw_ssh)
+    get_ssh_keys = get_ssh_key
+
+    def get_storage(self, filesystem=False, volume=False):
+        """Return details of storage instances.
+
+        :param bool filesystem: Include filesystem storage
+        :param bool volume: Include volume storage
+
+        """
+        raise NotImplementedError()
+
+    def get_storage_pools(self, names=None, providers=None):
+        """Return list of storage pools.
+
+        :param list names: Only include pools with these names
+        :param list providers: Only include pools for these providers
+
+        """
+        raise NotImplementedError()
+
+    def get_subnets(self, space=None, zone=None):
+        """Return list of known subnets.
+
+        :param str space: Only include subnets in this space
+        :param str zone: Only include subnets in this zone
+
+        """
+        raise NotImplementedError()
+
+    def remove_blocks(self):
+        """Remove all blocks from this model.
+
+        """
+        raise NotImplementedError()
+
+    def remove_backup(self, backup_id):
+        """Delete a backup.
+
+        :param str backup_id: The id of the backup to remove
+
+        """
+        raise NotImplementedError()
+
+    def remove_cached_images(self, arch=None, kind=None, series=None):
+        """Remove cached OS images.
+
+        :param str arch: Architecture of the images to remove
+        :param str kind: Image kind to remove, e.g. 'lxd'
+        :param str series: Image series to remove, e.g. 'xenial'
+
+        """
+        raise NotImplementedError()
+
+    def remove_machine(self, *machine_ids):
+        """Remove a machine from this model.
+
+        :param str \*machine_ids: Ids of the machines to remove
+
+        """
+        raise NotImplementedError()
+    remove_machines = remove_machine
+
+    async def remove_ssh_key(self, user, key):
+        """Remove a public SSH key(s) from this model.
+
+        :param str key: Full ssh key
+        :param str user: Juju user to which the key is registered
+
+        """
+        key_facade = client.KeyManagerFacade.from_connection(self.connection)
+        key = base64.b64decode(bytes(key.strip().split()[1].encode('ascii')))
+        key = hashlib.md5(key).hexdigest()
+        key = ':'.join(a+b for a, b in zip(key[::2], key[1::2]))
+        await key_facade.DeleteKeys([key], user)
+    remove_ssh_keys = remove_ssh_key
+
+    def restore_backup(
+            self, bootstrap=False, constraints=None, archive=None,
+            backup_id=None, upload_tools=False):
+        """Restore a backup archive to a new controller.
+
+        :param bool bootstrap: Bootstrap a new state machine
+        :param constraints: Model constraints
+        :type constraints: :class:`juju.Constraints`
+        :param str archive: Path to backup archive to restore
+        :param str backup_id: Id of backup to restore
+        :param bool upload_tools: Upload tools if bootstrapping a new machine
+
+        """
+        raise NotImplementedError()
+
+    def retry_provisioning(self):
+        """Retry provisioning for failed machines.
+
+        """
+        raise NotImplementedError()
+
+    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.
+
+        :param str command: The command to run
+        :param int timeout: Time to wait before command is considered failed
+
+        """
+        raise NotImplementedError()
+
+    async def set_config(self, config):
+        """Set configuration keys on this model.
+
+        :param dict config: Mapping of config keys to either string values or
+            `ConfigValue` instances, as returned by `get_config`.
+        """
+        config_facade = client.ModelConfigFacade.from_connection(
+            self.connection
+        )
+        for key, value in config.items():
+            if isinstance(value, ConfigValue):
+                config[key] = value.value
+        await config_facade.ModelSet(config)
+
+    def set_constraints(self, constraints):
+        """Set machine constraints on this model.
+
+        :param :class:`juju.Constraints` constraints: Machine constraints
+
+        """
+        raise NotImplementedError()
+
+    def get_action_output(self, action_uuid, wait=-1):
+        """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
+
+        """
+        raise NotImplementedError()
+
+    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.
+
+        :param str uuid_or_prefix: Filter by action uuid or prefix
+        :param str name: Filter by action name
+
+        """
+        raise NotImplementedError()
+
+    def get_budget(self, budget_name):
+        """Get budget usage info.
+
+        :param str budget_name: Name of budget
+
+        """
+        raise NotImplementedError()
+
+    async def get_status(self, filters=None, utc=False):
+        """Return the status of the model.
+
+        :param str filters: Optional list of applications, units, or machines
+            to include, which can use wildcards ('*').
+        :param bool utc: Display time as UTC in RFC3339 format
+
+        """
+        client_facade = client.ClientFacade.from_connection(self.connection)
+        return await client_facade.FullStatus(filters)
+
+    def sync_tools(
+            self, all_=False, destination=None, dry_run=False, public=False,
+            source=None, stream=None, version=None):
+        """Copy Juju tools into this model.
+
+        :param bool all_: Copy all versions, not just the latest
+        :param str destination: Path to local destination directory
+        :param bool dry_run: Don't do the actual copy
+        :param bool public: Tools are for a public cloud, so generate mirrors
+            information
+        :param str source: Path to local source directory
+        :param str stream: Simplestreams stream for which to sync metadata
+        :param str version: Copy a specific major.minor version
+
+        """
+        raise NotImplementedError()
+
+    def unblock(self, *commands):
+        """Unblock an operation that would alter this model.
+
+        :param str \*commands: The commands to unblock. Valid values are
+            'all-changes', 'destroy-model', 'remove-object'
+
+        """
+        raise NotImplementedError()
+
+    def unset_config(self, *keys):
+        """Unset configuration on this model.
+
+        :param str \*keys: The keys to unset
+
+        """
+        raise NotImplementedError()
+
+    def upgrade_gui(self):
+        """Upgrade the Juju GUI for this model.
+
+        """
+        raise NotImplementedError()
+
+    def upgrade_juju(
+            self, dry_run=False, reset_previous_upgrade=False,
+            upload_tools=False, version=None):
+        """Upgrade Juju on all machines in a model.
+
+        :param bool dry_run: Don't do the actual upgrade
+        :param bool reset_previous_upgrade: Clear the previous (incomplete)
+            upgrade status
+        :param bool upload_tools: Upload local version of tools
+        :param str version: Upgrade to a specific version
+
+        """
+        raise NotImplementedError()
+
+    def upload_backup(self, archive_path):
+        """Store a backup archive remotely in Juju.
+
+        :param str archive_path: Path to local archive
+
+        """
+        raise NotImplementedError()
+
+    @property
+    def charmstore(self):
+        return self._charmstore
+
+    async def get_metrics(self, *tags):
+        """Retrieve metrics.
+
+        :param str \*tags: Tags of entities from which to retrieve metrics.
+            No tags retrieves the metrics of all units in the model.
+        :return: Dictionary of unit_name:metrics
+
+        """
+        log.debug("Retrieving metrics for %s",
+                  ', '.join(tags) if tags else "all units")
+
+        metrics_facade = client.MetricsDebugFacade.from_connection(
+            self.connection)
+
+        entities = [client.Entity(tag) for tag in tags]
+        metrics_result = await metrics_facade.GetMetrics(entities)
+
+        metrics = collections.defaultdict(list)
+
+        for entity_metrics in metrics_result.results:
+            error = entity_metrics.error
+            if error:
+                if "is not a valid tag" in error:
+                    raise ValueError(error.message)
+                else:
+                    raise Exception(error.message)
+
+            for metric in entity_metrics.metrics:
+                metrics[metric.unit].append(vars(metric))
+
+        return metrics
+
+
+def get_charm_series(path):
+    """Inspects the charm directory at ``path`` and returns a default
+    series from its metadata.yaml (the first item in the 'series' list).
+
+    Returns None if no series can be determined.
+
+    """
+    md = Path(path) / "metadata.yaml"
+    if not md.exists():
+        return None
+    data = yaml.load(md.open())
+    series = data.get('series')
+    return series[0] if series else None
+
+
+class BundleHandler(object):
+    """
+    Handle bundles by using the API to translate bundle YAML into a plan of
+    steps and then dispatching each of those using the API.
+    """
+    def __init__(self, model):
+        self.model = model
+        self.charmstore = model.charmstore
+        self.plan = []
+        self.references = {}
+        self._units_by_app = {}
+        for unit_name, unit in model.units.items():
+            app_units = self._units_by_app.setdefault(unit.application, [])
+            app_units.append(unit_name)
+        self.client_facade = client.ClientFacade.from_connection(
+            model.connection)
+        self.app_facade = client.ApplicationFacade.from_connection(
+            model.connection)
+        self.ann_facade = client.AnnotationsFacade.from_connection(
+            model.connection)
+
+    async def _handle_local_charms(self, bundle):
+        """Search for references to local charms (i.e. filesystem paths)
+        in the bundle. Upload the local charms to the model, and replace
+        the filesystem paths with appropriate 'local:' paths in the bundle.
+
+        Return the modified bundle.
+
+        :param dict bundle: Bundle dictionary
+        :return: Modified bundle dictionary
+
+        """
+        apps, args = [], []
+
+        default_series = bundle.get('series')
+        for app_name in self.applications:
+            app_dict = bundle['services'][app_name]
+            charm_dir = os.path.abspath(os.path.expanduser(app_dict['charm']))
+            if not os.path.isdir(charm_dir):
+                continue
+            series = (
+                app_dict.get('series') or
+                default_series or
+                get_charm_series(charm_dir)
+            )
+            if not series:
+                raise JujuError(
+                    "Couldn't determine series for charm at {}. "
+                    "Add a 'series' key to the bundle.".format(charm_dir))
+
+            # Keep track of what we need to update. We keep a list of apps
+            # that need to be updated, and a corresponding list of args
+            # needed to update those apps.
+            apps.append(app_name)
+            args.append((charm_dir, series))
+
+        if apps:
+            # If we have apps to update, spawn all the coroutines concurrently
+            # and wait for them to finish.
+            charm_urls = await asyncio.gather(*[
+                self.model.add_local_charm_dir(*params)
+                for params in args
+            ], loop=self.model.loop)
+            # Update the 'charm:' entry for each app with the new 'local:' url.
+            for app_name, charm_url in zip(apps, charm_urls):
+                bundle['services'][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:
+            bundle_yaml = (Path(entity_id) / "bundle.yaml").read_text()
+        else:
+            bundle_yaml = await self.charmstore.files(entity_id,
+                                                      filename='bundle.yaml',
+                                                      read_file=True)
+        self.bundle = yaml.safe_load(bundle_yaml)
+        self.bundle = await self._handle_local_charms(self.bundle)
+
+        self.plan = await self.client_facade.GetBundleChanges(
+            yaml.dump(self.bundle))
+
+    async def execute_plan(self):
+        for step in self.plan.changes:
+            method = getattr(self, step.method)
+            result = await method(*step.args)
+            self.references[step.id_] = result
+
+    @property
+    def applications(self):
+        return list(self.bundle['services'].keys())
+
+    def resolve(self, reference):
+        if reference and reference.startswith('$'):
+            reference = self.references[reference[1:]]
+        return reference
+
+    async def addCharm(self, charm, series):
+        """
+        :param charm string:
+            Charm holds the URL of the charm to be added.
+
+        :param series string:
+            Series holds the series of the charm to be added
+            if the charm default is not sufficient.
+        """
+        # We don't add local charms because they've already been added
+        # by self._handle_local_charms
+        if charm.startswith('local:'):
+            return charm
+
+        entity_id = await self.charmstore.entityId(charm)
+        log.debug('Adding %s', entity_id)
+        await self.client_facade.AddCharm(None, entity_id)
+        return entity_id
+
+    async def addMachines(self, params=None):
+        """
+        :param params dict:
+            Dictionary specifying the machine to add. All keys are optional.
+            Keys include:
+
+            series: string specifying the machine OS series.
+
+            constraints: string holding machine constraints, if any. We'll
+                parse this into the json friendly dict that the juju api
+                expects.
+
+            container_type: string holding the type of the container (for
+                instance ""lxd" or kvm"). It is not specified for top level
+                machines.
+
+            parent_id: string holding a placeholder pointing to another
+                machine change or to a unit change. This value is only
+                specified in the case this machine is a container, in
+                which case also ContainerType is set.
+
+        """
+        params = params or {}
+
+        # Normalize keys
+        params = {normalize_key(k): params[k] for k in params.keys()}
+
+        # Fix up values, as necessary.
+        if 'parent_id' in params:
+            params['parent_id'] = self.resolve(params['parent_id'])
+
+        params['constraints'] = parse_constraints(
+            params.get('constraints'))
+        params['jobs'] = params.get('jobs', ['JobHostUnits'])
+
+        if params.get('container_type') == 'lxc':
+            log.warning('Juju 2.0 does not support lxc containers. '
+                        'Converting containers to lxd.')
+            params['container_type'] = 'lxd'
+
+        # Submit the request.
+        params = client.AddMachineParams(**params)
+        results = await self.client_facade.AddMachines([params])
+        error = results.machines[0].error
+        if error:
+            raise ValueError("Error adding machine: %s" % error.message)
+        machine = results.machines[0].machine
+        log.debug('Added new machine %s', machine)
+        return machine
+
+    async def addRelation(self, endpoint1, endpoint2):
+        """
+        :param endpoint1 string:
+        :param endpoint2 string:
+            Endpoint1 and Endpoint2 hold relation endpoints in the
+            "application:interface" form, where the application is always a
+            placeholder pointing to an application change, and the interface is
+            optional. Examples are "$deploy-42:web" or just "$deploy-42".
+        """
+        endpoints = [endpoint1, endpoint2]
+        # resolve indirect references
+        for i in range(len(endpoints)):
+            parts = endpoints[i].split(':')
+            parts[0] = self.resolve(parts[0])
+            endpoints[i] = ':'.join(parts)
+
+        log.info('Relating %s <-> %s', *endpoints)
+        return await self.model.add_relation(*endpoints)
+
+    async def deploy(self, charm, series, application, options, constraints,
+                     storage, endpoint_bindings, resources):
+        """
+        :param charm string:
+            Charm holds the URL of the charm to be used to deploy this
+            application.
+
+        :param series string:
+            Series holds the series of the application to be deployed
+            if the charm default is not sufficient.
+
+        :param application string:
+            Application holds the application name.
+
+        :param options map[string]interface{}:
+            Options holds application options.
+
+        :param constraints string:
+            Constraints holds the optional application constraints.
+
+        :param storage map[string]string:
+            Storage holds the optional storage constraints.
+
+        :param endpoint_bindings map[string]string:
+            EndpointBindings holds the optional endpoint bindings
+
+        :param resources map[string]int:
+            Resources identifies the revision to use for each resource
+            of the application's charm.
+        """
+        # 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 not charm.startswith('local:'):
+            resources = await self.model._add_store_resources(application,
+                                                              charm)
+        await self.model._deploy(
+            charm_url=charm,
+            application=application,
+            series=series,
+            config=options,
+            constraints=constraints,
+            endpoint_bindings=endpoint_bindings,
+            resources=resources,
+            storage=storage,
+        )
+        return application
+
+    async def addUnit(self, application, to):
+        """
+        :param application string:
+            Application holds the application placeholder name for which a unit
+            is added.
+
+        :param to string:
+            To holds the optional location where to add the unit, as a
+            placeholder pointing to another unit change or to a machine change.
+        """
+        application = self.resolve(application)
+        placement = self.resolve(to)
+        if self._units_by_app.get(application):
+            # enough units for this application already exist;
+            # claim one, and carry on
+            # NB: this should probably honor placement, but the juju client
+            # doesn't, so we're not bothering, either
+            unit_name = self._units_by_app[application].pop()
+            log.debug('Reusing unit %s for %s', unit_name, application)
+            return self.model.units[unit_name]
+
+        log.debug('Adding new unit for %s%s', application,
+                  ' to %s' % placement if placement else '')
+        return await self.model.applications[application].add_unit(
+            count=1,
+            to=placement,
+        )
+
+    async def expose(self, application):
+        """
+        :param application string:
+            Application holds the placeholder name of the application that must
+            be exposed.
+        """
+        application = self.resolve(application)
+        log.info('Exposing %s', application)
+        return await self.model.applications[application].expose()
+
+    async def setAnnotations(self, id_, entity_type, annotations):
+        """
+        :param id_ string:
+            Id is the placeholder for the application or machine change
+            corresponding to the entity to be annotated.
+
+        :param entity_type EntityType:
+            EntityType holds the type of the entity, "application" or
+            "machine".
+
+        :param annotations map[string]string:
+            Annotations holds the annotations as key/value pairs.
+        """
+        entity_id = self.resolve(id_)
+        try:
+            entity = self.model.state.get_entity(entity_type, entity_id)
+        except KeyError:
+            entity = await self.model._wait_for_new(entity_type, entity_id)
+        return await entity.set_annotations(annotations)
+
+
+class CharmStore(object):
+    """
+    Async wrapper around theblues.charmstore.CharmStore
+    """
+    def __init__(self, loop):
+        self.loop = loop
+        self._cs = theblues.charmstore.CharmStore(timeout=5)
+
+    def __getattr__(self, name):
+        """
+        Wrap method calls in coroutines that use run_in_executor to make them
+        async.
+        """
+        attr = getattr(self._cs, name)
+        if not callable(attr):
+            wrapper = partial(getattr, self._cs, name)
+            setattr(self, name, wrapper)
+        else:
+            async def coro(*args, **kwargs):
+                method = partial(attr, *args, **kwargs)
+                for attempt in range(1, 4):
+                    try:
+                        return await self.loop.run_in_executor(None, method)
+                    except theblues.errors.ServerError:
+                        if attempt == 3:
+                            raise
+                        await asyncio.sleep(1, loop=self.loop)
+            setattr(self, name, coro)
+            wrapper = coro
+        return wrapper
+
+
+class CharmArchiveGenerator(object):
+    """
+    Create a Zip archive of a local charm directory for upload to a controller.
+
+    This is used automatically by
+    `Model.add_local_charm_dir <#juju.model.Model.add_local_charm_dir>`_.
+    """
+    def __init__(self, path):
+        self.path = os.path.abspath(os.path.expanduser(path))
+
+    def make_archive(self, path):
+        """Create archive of directory and write to ``path``.
+
+        :param path: Path to archive
+
+        Ignored::
+
+            * build/\* - This is used for packing the charm itself and any
+                          similar tasks.
+            * \*/.\*    - Hidden files are all ignored for now.  This will most
+                          likely be changed into a specific ignore list
+                          (.bzr, etc)
+
+        """
+        zf = zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED)
+        for dirpath, dirnames, filenames in os.walk(self.path):
+            relative_path = dirpath[len(self.path) + 1:]
+            if relative_path and not self._ignore(relative_path):
+                zf.write(dirpath, relative_path)
+            for name in filenames:
+                archive_name = os.path.join(relative_path, name)
+                if not self._ignore(archive_name):
+                    real_path = os.path.join(dirpath, name)
+                    self._check_type(real_path)
+                    if os.path.islink(real_path):
+                        self._check_link(real_path)
+                        self._write_symlink(
+                            zf, os.readlink(real_path), archive_name)
+                    else:
+                        zf.write(real_path, archive_name)
+        zf.close()
+        return path
+
+    def _check_type(self, path):
+        """Check the path
+        """
+        s = os.stat(path)
+        if stat.S_ISDIR(s.st_mode) or stat.S_ISREG(s.st_mode):
+            return path
+        raise ValueError("Invalid Charm at % %s" % (
+            path, "Invalid file type for a charm"))
+
+    def _check_link(self, path):
+        link_path = os.readlink(path)
+        if link_path[0] == "/":
+            raise ValueError(
+                "Invalid Charm at %s: %s" % (
+                    path, "Absolute links are invalid"))
+        path_dir = os.path.dirname(path)
+        link_path = os.path.join(path_dir, link_path)
+        if not link_path.startswith(os.path.abspath(self.path)):
+            raise ValueError(
+                "Invalid charm at %s %s" % (
+                    path, "Only internal symlinks are allowed"))
+
+    def _write_symlink(self, zf, link_target, link_path):
+        """Package symlinks with appropriate zipfile metadata."""
+        info = zipfile.ZipInfo()
+        info.filename = link_path
+        info.create_system = 3
+        # Magic code for symlinks / py2/3 compat
+        # 27166663808 = (stat.S_IFLNK | 0755) << 16
+        info.external_attr = 2716663808
+        zf.writestr(info, link_target)
+
+    def _ignore(self, path):
+        if path == "build" or path.startswith("build/"):
+            return True
+        if path.startswith('.'):
+            return True
diff --git a/juju/placement.py b/juju/placement.py
new file mode 100644 (file)
index 0000000..d0d42f7
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# This module allows us to parse a machine placement directive into a
+# Placement object suitable for passing through the websocket API.
+#
+# Once https://bugs.launchpad.net/juju/+bug/1645480 is addressed, this
+# module should be deprecated.
+#
+
+from .client import client
+
+MACHINE_SCOPE = "#"
+
+
+def parse(directive):
+    """
+    Given a string in the format `scope:directive`, or simply `scope`
+    or `directive`, return a Placement object suitable for passing
+    back over the websocket API.
+
+    """
+    if not directive:
+        # Handle null case
+        return None
+
+    if isinstance(directive, (list, tuple)):
+        results = []
+        for d in directive:
+            results.extend(parse(d))
+        return results
+
+    if isinstance(directive, (dict, client.Placement)):
+        # We've been handed something that we can simply hand back to
+        # the api. (Forwards compatibility)
+        return [directive]
+
+    # Juju 2.0 can't handle lxc containers.
+    directive = directive.replace('lxc', 'lxd')
+
+    if ":" in directive:
+        # Planner has given us a scope and directive in string form
+        scope, directive = directive.split(":")
+        return [client.Placement(scope=scope, directive=directive)]
+
+    if directive.isdigit():
+        # Planner has given us a machine id (we rely on juju core to
+        # verify its validity.)
+        return [client.Placement(scope=MACHINE_SCOPE, directive=directive)]
+
+    if "/" in directive:
+        # e.g. "0/lxd/0"
+        # https://github.com/juju/juju/blob/master/instance/placement_test.go#L29
+        return [
+            client.Placement(scope=MACHINE_SCOPE, directive=directive),
+        ]
+
+    # Planner has probably given us a container type. Leave it up to
+    # juju core to verify that it is valid.
+    return [client.Placement(scope=directive)]
diff --git a/juju/relation.py b/juju/relation.py
new file mode 100644 (file)
index 0000000..ef8946a
--- /dev/null
@@ -0,0 +1,11 @@
+import logging
+
+from . import model
+
+log = logging.getLogger(__name__)
+
+
+class Relation(model.ModelEntity):
+    async def destroy(self):
+        raise NotImplementedError()
+        # TODO: destroy a relation
diff --git a/juju/tag.py b/juju/tag.py
new file mode 100644 (file)
index 0000000..2514229
--- /dev/null
@@ -0,0 +1,31 @@
+def _prefix(prefix, s):
+    if s and not s.startswith(prefix):
+        return '{}{}'.format(prefix, s)
+    return s
+
+
+def untag(prefix, s):
+    if s and s.startswith(prefix):
+        return s[len(prefix):]
+    return s
+
+
+def cloud(cloud_name):
+    return _prefix('cloud-', cloud_name)
+
+
+def credential(cloud, user, credential_name):
+    credential_string = '{}_{}_{}'.format(cloud, user, credential_name)
+    return _prefix('cloudcred-', credential_string)
+
+
+def model(cloud_name):
+    return _prefix('model-', cloud_name)
+
+
+def user(username):
+    return _prefix('user-', username)
+
+
+def application(app_name):
+    return _prefix('application-', app_name)
diff --git a/juju/unit.py b/juju/unit.py
new file mode 100644 (file)
index 0000000..fc597bf
--- /dev/null
@@ -0,0 +1,274 @@
+import logging
+
+from dateutil.parser import parse as parse_date
+
+from . import model
+from .client import client
+
+log = logging.getLogger(__name__)
+
+
+class Unit(model.ModelEntity):
+    @property
+    def agent_status(self):
+        """Returns the current agent status string.
+
+        """
+        return self.safe_data['agent-status']['current']
+
+    @property
+    def agent_status_since(self):
+        """Get the time when the `agent_status` was last updated.
+
+        """
+        return parse_date(self.safe_data['agent-status']['since'])
+
+    @property
+    def agent_status_message(self):
+        """Get the agent status message.
+
+        """
+        return self.safe_data['agent-status']['message']
+
+    @property
+    def workload_status(self):
+        """Returns the current workload status string.
+
+        """
+        return self.safe_data['workload-status']['current']
+
+    @property
+    def workload_status_since(self):
+        """Get the time when the `workload_status` was last updated.
+
+        """
+        return parse_date(self.safe_data['workload-status']['since'])
+
+    @property
+    def workload_status_message(self):
+        """Get the workload status message.
+
+        """
+        return self.safe_data['workload-status']['message']
+
+    @property
+    def machine(self):
+        """Get the machine object for this unit.
+
+        """
+        machine_id = self.safe_data['machine-id']
+        if machine_id:
+            return self.model.machines.get(machine_id, None)
+        else:
+            return None
+
+    @property
+    def public_address(self):
+        """ Get the public address.
+
+        """
+        return self.safe_data['public-address'] or None
+
+    @property
+    def tag(self):
+        return 'unit-%s' % self.name.replace('/', '-')
+
+    def add_storage(self, name, constraints=None):
+        """Add unit storage dynamically.
+
+        :param str name: Storage name, as specified by the charm
+        :param str constraints: Comma-separated list of constraints in the
+            form 'POOL,COUNT,SIZE'
+
+        """
+        raise NotImplementedError()
+
+    def collect_metrics(self):
+        """Collect metrics on this unit.
+
+        """
+        raise NotImplementedError()
+
+    async def destroy(self):
+        """Destroy this unit.
+
+        """
+        app_facade = client.ApplicationFacade.from_connection(self.connection)
+
+        log.debug(
+            'Destroying %s', self.name)
+
+        return await app_facade.DestroyUnits([self.name])
+    remove = destroy
+
+    def get_resources(self, details=False):
+        """Return resources for this unit.
+
+        :param bool details: Include detailed info about resources used by each
+            unit
+
+        """
+        raise NotImplementedError()
+
+    def resolved(self, retry=False):
+        """Mark unit errors resolved.
+
+        :param bool retry: Re-execute failed hooks
+
+        """
+        raise NotImplementedError()
+
+    async def run(self, command, timeout=None):
+        """Run command on this unit.
+
+        :param str command: The command to run
+        :param int timeout: Time to wait before command is considered failed
+        :returns: A :class:`juju.action.Action` instance.
+
+        """
+        action = client.ActionFacade.from_connection(self.connection)
+
+        log.debug(
+            'Running `%s` on %s', command, self.name)
+
+        res = await action.Run(
+            [],
+            command,
+            [],
+            timeout,
+            [self.name],
+        )
+        return await self.model.wait_for_action(res.results[0].action.tag)
+
+    async def run_action(self, action_name, **params):
+        """Run an action on this unit.
+
+        :param str action_name: Name of action to run
+        :param \*\*params: Action parameters
+        :returns: A :class:`juju.action.Action` instance.
+
+        Note that this only enqueues the action.  You will need to call
+        ``action.wait()`` on the resulting `Action` instance if you wish
+        to block until the action is complete.
+
+        """
+        action_facade = client.ActionFacade.from_connection(self.connection)
+
+        log.debug('Starting action `%s` on %s', action_name, self.name)
+
+        res = await action_facade.Enqueue([client.Action(
+            name=action_name,
+            parameters=params,
+            receiver=self.tag,
+        )])
+        action = res.results[0].action
+        error = res.results[0].error
+        if error and error.code == 'not found':
+            raise ValueError('Action `%s` not found on %s' % (action_name,
+                                                              self.name))
+        elif error:
+            raise Exception('Unknown action error: %s' % error.serialize())
+        action_id = action.tag[len('action-'):]
+        log.debug('Action started as %s', action_id)
+        # we mustn't use wait_for_action because that blocks until the
+        # action is complete, rather than just being in the model
+        return await self.model._wait_for_new('action', action_id)
+
+    async def scp_to(self, source, destination, user='ubuntu', proxy=False,
+                     scp_opts=''):
+        """Transfer files to this unit.
+
+        :param str source: Local path of file(s) to transfer
+        :param str destination: Remote destination of transferred files
+        :param str user: Remote username
+        :param bool proxy: Proxy through the Juju API server
+        :param str scp_opts: Additional options to the `scp` command
+        """
+        await self.machine.scp_to(source, destination, user=user, proxy=proxy,
+                                  scp_opts=scp_opts)
+
+    async def scp_from(self, source, destination, user='ubuntu', proxy=False,
+                       scp_opts=''):
+        """Transfer files from this unit.
+
+        :param str source: Remote path of file(s) to transfer
+        :param str destination: Local destination of transferred files
+        :param str user: Remote username
+        :param bool proxy: Proxy through the Juju API server
+        :param str scp_opts: Additional options to the `scp` command
+        """
+        await self.machine.scp_from(source, destination, user=user,
+                                    proxy=proxy, scp_opts=scp_opts)
+
+    def set_meter_status(self):
+        """Set the meter status on this unit.
+
+        """
+        raise NotImplementedError()
+
+    def ssh(
+            self, command, user=None, proxy=False, ssh_opts=None):
+        """Execute a command over SSH on this unit.
+
+        :param str command: Command to execute
+        :param str user: Remote username
+        :param bool proxy: Proxy through the Juju API server
+        :param str ssh_opts: Additional options to the `ssh` command
+
+        """
+        raise NotImplementedError()
+
+    def status_history(self, num=20, utc=False):
+        """Get status history for this unit.
+
+        :param int num: Size of history backlog
+        :param bool utc: Display time as UTC in RFC3339 format
+
+        """
+        raise NotImplementedError()
+
+    async def is_leader_from_status(self):
+        """
+        Check to see if this unit is the leader. Returns True if so, and
+        False if it is not, or if leadership does not make sense
+        (e.g., there is no leader in this application.)
+
+        This method is a kluge that calls FullStatus in the
+        ClientFacade to get its information. Once
+        https://bugs.launchpad.net/juju/+bug/1643691 is resolved, we
+        should add a simple .is_leader property, and deprecate this
+        method.
+
+        """
+        app = self.name.split("/")[0]
+
+        c = client.ClientFacade.from_connection(self.connection)
+
+        status = await c.FullStatus(None)
+
+        # FullStatus may be more up to date than our model, and the
+        # unit may have gone away, or we may be doing something silly,
+        # like trying to fetch leadership for a subordinate, which
+        # will not be filed where we expect in the model. In those
+        # cases, we may simply return False, as a nonexistent or
+        # subordinate unit is not a leader.
+        if not status.applications.get(app):
+            return False
+
+        if not status.applications[app].get('units'):
+            return False
+
+        if not status.applications[app]['units'].get(self.name):
+            return False
+
+        return status.applications[app]['units'][self.name].get('leader',
+                                                                False)
+
+    async def get_metrics(self):
+        """Get metrics for the unit.
+
+        :return: Dictionary of metrics for this unit.
+
+        """
+        metrics = await self.model.get_metrics(self.tag)
+        return metrics[self.name]
diff --git a/juju/utils.py b/juju/utils.py
new file mode 100644 (file)
index 0000000..1d1b24e
--- /dev/null
@@ -0,0 +1,98 @@
+import asyncio
+import os
+from collections import defaultdict
+from functools import partial
+from pathlib import Path
+
+
+async def execute_process(*cmd, log=None, loop=None):
+    '''
+    Wrapper around asyncio.create_subprocess_exec.
+
+    '''
+    p = await asyncio.create_subprocess_exec(
+            *cmd,
+            stdin=asyncio.subprocess.PIPE,
+            stdout=asyncio.subprocess.PIPE,
+            stderr=asyncio.subprocess.PIPE,
+            loop=loop)
+    stdout, stderr = await p.communicate()
+    if log:
+        log.debug("Exec %s -> %d", cmd, p.returncode)
+        if stdout:
+            log.debug(stdout.decode('utf-8'))
+        if stderr:
+            log.debug(stderr.decode('utf-8'))
+    return p.returncode == 0
+
+
+def _read_ssh_key():
+    '''
+    Inner function for read_ssh_key, suitable for passing to our
+    Executor.
+
+    '''
+    default_data_dir = Path(Path.home(), ".local", "share", "juju")
+    juju_data = os.environ.get("JUJU_DATA", default_data_dir)
+    ssh_key_path = Path(juju_data, 'ssh', 'juju_id_rsa.pub')
+    with ssh_key_path.open('r') as ssh_key_file:
+        ssh_key = ssh_key_file.readlines()[0].strip()
+    return ssh_key
+
+
+async def read_ssh_key(loop):
+    '''
+    Attempt to read the local juju admin's public ssh key, so that it
+    can be passed on to a model.
+
+    '''
+    return await loop.run_in_executor(None, _read_ssh_key)
+
+
+class IdQueue:
+    """
+    Wrapper around asyncio.Queue that maintains a separate queue for each ID.
+    """
+    def __init__(self, maxsize=0, *, loop=None):
+        self._queues = defaultdict(partial(asyncio.Queue, maxsize, loop=loop))
+
+    async def get(self, id):
+        value = await self._queues[id].get()
+        del self._queues[id]
+        if isinstance(value, Exception):
+            raise value
+        return value
+
+    async def put(self, id, value):
+        await self._queues[id].put(value)
+
+    async def put_all(self, value):
+        for queue in self._queues.values():
+            await queue.put(value)
+
+
+async def run_with_interrupt(task, event, loop=None):
+    """
+    Awaits a task while allowing it to be interrupted by an `asyncio.Event`.
+
+    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.
+
+    :param task: Task to run
+    :param event: An `asyncio.Event` 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],
+                                       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]
+    else:
+        return None
diff --git a/scripts/gendoc b/scripts/gendoc
new file mode 100755 (executable)
index 0000000..3ef628e
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+packages=(
+    juju.action
+    juju.annotation
+    juju.application
+    juju.cloud
+    juju.constraints
+    juju.controller
+    juju.delta
+    juju.errors
+    juju.exceptions
+    juju.juju
+    juju.loop
+    juju.machine
+    juju.model
+    juju.placement
+    juju.relation
+    juju.tag
+    juju.unit
+    juju.utils
+)
+
+for pkg in ${packages[@]}; do
+    cat <<EOD > docs/api/$pkg.rst
+$pkg
+$(echo $pkg | sed -e 's/./=/g')
+
+.. rubric:: Summary
+
+.. automembersummary:: $pkg
+
+.. rubric:: Reference
+
+.. automodule:: $pkg
+    :members:
+    :undoc-members:
+    :show-inheritance:
+EOD
+done
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..df12cfe
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,56 @@
+# Copyright 2016 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#     Unless required by applicable law or agreed to in writing, software
+#     distributed under the License is distributed on an "AS IS" BASIS,
+#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#     See the License for the specific language governing permissions and
+#     limitations under the License.
+
+from pathlib import Path
+from setuptools import setup, find_packages
+
+here = Path(__file__).absolute().parent
+readme = here / 'docs' / 'readme.rst'
+changelog = here / 'docs' / 'changelog.rst'
+long_description = '{}\n\n{}'.format(
+    readme.read_text(),
+    changelog.read_text()
+)
+version = here / 'VERSION'
+
+setup(
+    name='juju',
+    version=version.read_text().strip(),
+    packages=find_packages(
+        exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
+    install_requires=[
+        'websockets',
+        'pyyaml',
+        'theblues',
+        'python-dateutil'
+    ],
+    include_package_data=True,
+    maintainer='Juju Ecosystem Engineering',
+    maintainer_email='juju@lists.ubuntu.com',
+    description=('Python library for Juju'),
+    long_description=long_description,
+    url='https://github.com/juju/python-libjuju',
+    license='Apache 2',
+    classifiers=[
+        "Development Status :: 3 - Alpha",
+        "Intended Audience :: Developers",
+        "Programming Language :: Python",
+        "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.5",
+    ],
+    entry_points={
+        'console_scripts': [
+        ],
+    },
+)
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/base.py b/tests/base.py
new file mode 100644 (file)
index 0000000..e1ec452
--- /dev/null
@@ -0,0 +1,67 @@
+import mock
+import subprocess
+import uuid
+
+import pytest
+
+from juju.controller import Controller
+from juju.client.connection import JujuData
+
+
+def is_bootstrapped():
+    result = subprocess.run(['juju', 'switch'], stdout=subprocess.PIPE)
+    return (
+        result.returncode == 0 and
+        len(result.stdout.decode().strip()) > 0)
+
+bootstrapped = pytest.mark.skipif(
+    not is_bootstrapped(),
+    reason='bootstrapped Juju environment required')
+
+
+class CleanController():
+    def __init__(self):
+        self.controller = None
+
+    async def __aenter__(self):
+        self.controller = Controller()
+        await self.controller.connect_current()
+        return self.controller
+
+    async def __aexit__(self, exc_type, exc, tb):
+        await self.controller.disconnect()
+
+
+class CleanModel():
+    def __init__(self):
+        self.controller = None
+        self.model = None
+
+    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)
+
+        # save the model UUID in case test closes model
+        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
+
+    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()
+
+
+class AsyncMock(mock.MagicMock):
+    async def __call__(self, *args, **kwargs):
+        return super().__call__(*args, **kwargs)
diff --git a/tests/bundle/bundle.yaml b/tests/bundle/bundle.yaml
new file mode 100644 (file)
index 0000000..19a45ec
--- /dev/null
@@ -0,0 +1,28 @@
+series: xenial
+services:
+  wordpress:
+    charm: "cs:trusty/wordpress-2"
+    num_units: 1
+    annotations:
+      "gui-x": "339.5"
+      "gui-y": "-171"
+    to:
+      - "0"
+  mysql:
+    charm: "cs:trusty/mysql-26"
+    num_units: 1
+    annotations:
+      "gui-x": "79.5"
+      "gui-y": "-142"
+    to:
+      - "1"
+relations:
+  - - "wordpress:db"
+    - "mysql:db"
+machines:
+  "0":
+    series: trusty
+    constraints: "arch=amd64 cores=1 cpu-power=100 mem=1740 root-disk=8192"
+  "1":
+    series: trusty
+    constraints: "arch=amd64 cores=1 cpu-power=100 mem=1740 root-disk=8192"
diff --git a/tests/charm/metadata.yaml b/tests/charm/metadata.yaml
new file mode 100644 (file)
index 0000000..74eab3d
--- /dev/null
@@ -0,0 +1,5 @@
+name: charm
+series: ["xenial"]
+summary: "test"
+description: "test"
+maintainers: ["test"]
diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/integration/bundle/bundle.yaml b/tests/integration/bundle/bundle.yaml
new file mode 100644 (file)
index 0000000..d0245c5
--- /dev/null
@@ -0,0 +1,12 @@
+series: xenial
+services:
+  ghost:
+    charm: "cs:ghost-19"
+    num_units: 1
+  mysql:
+    charm: "cs:trusty/mysql-57"
+    num_units: 1
+  test:
+    charm: "./tests/integration/charm"
+relations:
+  - ["ghost", "mysql"]
diff --git a/tests/integration/charm/metadata.yaml b/tests/integration/charm/metadata.yaml
new file mode 100644 (file)
index 0000000..74eab3d
--- /dev/null
@@ -0,0 +1,5 @@
+name: charm
+series: ["xenial"]
+summary: "test"
+description: "test"
+maintainers: ["test"]
diff --git a/tests/integration/test_application.py b/tests/integration/test_application.py
new file mode 100644 (file)
index 0000000..1a4fcaa
--- /dev/null
@@ -0,0 +1,94 @@
+import pytest
+
+from .. import base
+
+MB = 1
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_action(event_loop):
+    async with base.CleanModel() as model:
+        ubuntu_app = await model.deploy(
+            'mysql',
+            application_name='mysql',
+            series='trusty',
+            channel='stable',
+            config={
+                'tuning-level': 'safest',
+            },
+            constraints={
+                'mem': 256 * MB,
+            },
+        )
+
+        # update and check app config
+        await ubuntu_app.set_config({'tuning-level': 'fast'})
+        config = await ubuntu_app.get_config()
+        assert config['tuning-level']['value'] == 'fast'
+
+        # update and check app constraints
+        await ubuntu_app.set_constraints({'mem': 512 * MB})
+        constraints = await ubuntu_app.get_constraints()
+        assert constraints['mem'] == 512 * MB
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_add_units(event_loop):
+    from juju.unit import Unit
+
+    async with base.CleanModel() as model:
+        app = await model.deploy(
+            'ubuntu-0',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+        units = await app.add_units(count=2)
+
+        assert len(units) == 2
+        for unit in units:
+            assert isinstance(unit, Unit)
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_upgrade_charm(event_loop):
+    async with base.CleanModel() as model:
+        app = await model.deploy('ubuntu-0')
+        assert app.data['charm-url'] == 'cs:ubuntu-0'
+        await app.upgrade_charm()
+        assert app.data['charm-url'].startswith('cs:ubuntu-')
+        assert app.data['charm-url'] != 'cs:ubuntu-0'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_upgrade_charm_channel(event_loop):
+    async with base.CleanModel() as model:
+        app = await model.deploy('ubuntu-0')
+        assert app.data['charm-url'] == 'cs:ubuntu-0'
+        await app.upgrade_charm(channel='stable')
+        assert app.data['charm-url'].startswith('cs:ubuntu-')
+        assert app.data['charm-url'] != 'cs:ubuntu-0'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_upgrade_charm_revision(event_loop):
+    async with base.CleanModel() as model:
+        app = await model.deploy('ubuntu-0')
+        assert app.data['charm-url'] == 'cs:ubuntu-0'
+        await app.upgrade_charm(revision=8)
+        assert app.data['charm-url'] == 'cs:ubuntu-8'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_upgrade_charm_switch(event_loop):
+    async with base.CleanModel() as model:
+        app = await model.deploy('ubuntu-0')
+        assert app.data['charm-url'] == 'cs:ubuntu-0'
+        await app.upgrade_charm(switch='ubuntu-8')
+        assert app.data['charm-url'] == 'cs:ubuntu-8'
diff --git a/tests/integration/test_client.py b/tests/integration/test_client.py
new file mode 100644 (file)
index 0000000..e4c9c92
--- /dev/null
@@ -0,0 +1,21 @@
+import pytest
+
+from juju.client import client
+
+from .. import base
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_user_info(event_loop):
+    async with base.CleanModel() as model:
+        controller_conn = await model.connection.controller()
+
+        um = client.UserManagerFacade.from_connection(controller_conn)
+        result = await um.UserInfo(
+            [client.Entity('user-admin')], True)
+        await controller_conn.close()
+
+        assert isinstance(result, client.UserInfoResults)
+        for r in result.results:
+            assert isinstance(r, client.UserInfoResult)
diff --git a/tests/integration/test_connection.py b/tests/integration/test_connection.py
new file mode 100644 (file)
index 0000000..290203d
--- /dev/null
@@ -0,0 +1,83 @@
+import asyncio
+import pytest
+
+from juju.client.connection import Connection
+from juju.client import client
+from .. import base
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_connect_current(event_loop):
+    async with base.CleanModel():
+        conn = await Connection.connect_current()
+
+        assert isinstance(conn, Connection)
+        await conn.close()
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_monitor(event_loop):
+
+    async with base.CleanModel():
+        conn = await Connection.connect_current()
+
+        assert conn.monitor.status == 'connected'
+        await conn.close()
+
+        assert conn.monitor.status == 'disconnected'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_monitor_catches_error(event_loop):
+
+    async with base.CleanModel():
+        conn = await Connection.connect_current()
+
+        assert conn.monitor.status == 'connected'
+        await conn.ws.close()
+
+        assert conn.monitor.status == 'error'
+
+        await conn.close()
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_full_status(event_loop):
+    async with base.CleanModel() as model:
+        await model.deploy(
+            'ubuntu-0',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+
+        c = client.ClientFacade.from_connection(model.connection)
+
+        await c.FullStatus(None)
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_reconnect(event_loop):
+    async with base.CleanModel() as model:
+        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)
+        try:
+            await asyncio.sleep(0.1)
+            assert conn.is_open
+            await conn.ws.close()
+            assert not conn.is_open
+            await model.block_until(lambda: conn.is_open, timeout=3)
+        finally:
+            await conn.close()
diff --git a/tests/integration/test_controller.py b/tests/integration/test_controller.py
new file mode 100644 (file)
index 0000000..f3840cc
--- /dev/null
@@ -0,0 +1,77 @@
+import pytest
+import uuid
+
+from .. import base
+from juju.controller import Controller
+from juju.errors import JujuAPIError
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_add_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
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_disable_enable_user(event_loop):
+    async with base.CleanController() as controller:
+        username = 'test-disable{}'.format(uuid.uuid4())
+        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
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_change_user_password(event_loop):
+    async with base.CleanController() as controller:
+        username = 'test-password{}'.format(uuid.uuid4())
+        await controller.add_user(username)
+        await controller.change_user_password(username, 'password')
+        try:
+            new_controller = Controller()
+            await new_controller.connect(
+                controller.connection.endpoint, username, 'password')
+            result = True
+            await new_controller.disconnect()
+        except JujuAPIError:
+            result = False
+        assert result is True
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_grant(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'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_get_models(event_loop):
+    async with base.CleanController() as controller:
+        result = await controller.get_models()
+        assert isinstance(result.serialize()['user-models'], list)
diff --git a/tests/integration/test_errors.py b/tests/integration/test_errors.py
new file mode 100644 (file)
index 0000000..06b3826
--- /dev/null
@@ -0,0 +1,68 @@
+import pytest
+
+from .. import base
+
+MB = 1
+GB = 1024
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_juju_api_error(event_loop):
+    '''
+    Verify that we raise a JujuAPIError for responses with an error in
+    a top level key (for completely invalid requests).
+
+    '''
+    from juju.errors import JujuAPIError
+
+    async with base.CleanModel() as model:
+        with pytest.raises(JujuAPIError):
+            await model.add_machine(constraints={'mem': 'foo'})
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_juju_error_in_results_list(event_loop):
+    '''
+    Replicate the code that caused
+    https://github.com/juju/python-libjuju/issues/67, and verify that
+    we get a JujuError instead of passing silently by the failure.
+
+    (We don't raise a JujuAPIError, because the request isn't
+    completely invalid -- it's just passing a tag that doesn't exist.)
+
+    This also verifies that we will raise a JujuError any time there
+    is an error in one of a list of results.
+
+    '''
+    from juju.errors import JujuError
+    from juju.client import client
+
+    async with base.CleanModel() as model:
+        ann_facade = client.AnnotationsFacade.from_connection(model.connection)
+
+        ann = client.EntityAnnotations(
+            entity='badtag',
+            annotations={'gui-x': '1', 'gui-y': '1'},
+        )
+        with pytest.raises(JujuError):
+            return await ann_facade.Set([ann])
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_juju_error_in_result(event_loop):
+    '''
+    Verify that we raise a JujuError when appropraite when we are
+    looking at a single result coming back.
+
+    '''
+    from juju.errors import JujuError    
+    from juju.client import client
+
+    async with base.CleanModel() as model:
+        app_facade = client.ApplicationFacade.from_connection(model.connection)
+
+        with pytest.raises(JujuError):
+            return await app_facade.GetCharmURL('foo')
diff --git a/tests/integration/test_machine.py b/tests/integration/test_machine.py
new file mode 100644 (file)
index 0000000..60de035
--- /dev/null
@@ -0,0 +1,62 @@
+import asyncio
+import pytest
+
+from tempfile import NamedTemporaryFile
+
+from .. import base
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_status(event_loop):
+    async with base.CleanModel() as model:
+        await model.deploy(
+            'ubuntu-0',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+
+        await asyncio.wait_for(
+            model.block_until(lambda: len(model.machines)),
+            timeout=240)
+        machine = model.machines['0']
+
+        assert machine.status in ('allocating', 'pending')
+        assert machine.agent_status == 'pending'
+        assert not machine.agent_version
+
+        await asyncio.wait_for(
+            model.block_until(lambda: (machine.status == '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):
+    async with base.CleanModel() as model:
+        await model.add_machine()
+        await asyncio.wait_for(
+            model.block_until(lambda: model.machines),
+            timeout=240)
+        machine = model.machines['0']
+        await asyncio.wait_for(
+            model.block_until(lambda: (machine.status == 'running' and
+                                       machine.agent_status == 'started')),
+            timeout=480)
+
+        with NamedTemporaryFile() as f:
+            f.write(b'testcontents')
+            f.flush()
+            await machine.scp_to(f.name, 'testfile')
+
+        with NamedTemporaryFile() as f:
+            await machine.scp_from('testfile', f.name)
+            assert f.read() == b'testcontents'
diff --git a/tests/integration/test_model.py b/tests/integration/test_model.py
new file mode 100644 (file)
index 0000000..8506786
--- /dev/null
@@ -0,0 +1,249 @@
+import asyncio
+from concurrent.futures import ThreadPoolExecutor
+from pathlib import Path
+import pytest
+
+from .. import base
+from juju.model import Model
+from juju.client.client import ConfigValue
+
+MB = 1
+GB = 1024
+SSH_KEY = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsYMJGNGG74HAJha3n2CFmWYsOOaORnJK6VqNy86pj0MIpvRXBzFzVy09uPQ66GOQhTEoJHEqE77VMui7+62AcMXT+GG7cFHcnU8XVQsGM6UirCcNyWNysfiEMoAdZScJf/GvoY87tMEszhZIUV37z8PUBx6twIqMdr31W1J0IaPa+sV6FEDadeLaNTvancDcHK1zuKsL39jzAg7+LYjKJfEfrsQP+lj/EQcjtKqlhVS5kzsJVfx8ZEd0xhW5G7N6bCdKNalS8mKCMaBXJpijNQ82AiyqCIDCRrre2To0/i7pTjRiL0U9f9mV3S4NJaQaokR050w/ZLySFf6F7joJT mathijs@Qrama-Mathijs'  # noqa
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_deploy_local_bundle(event_loop):
+    from pathlib import Path
+    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
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_deploy_bundle(event_loop):
+    async with base.CleanModel() as model:
+        await model.deploy('bundle/wiki-simple')
+
+        for app in ('wiki', 'mysql'):
+            assert app in model.applications
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_deploy_channels_revs(event_loop):
+    async with base.CleanModel() as model:
+        charm = 'cs:~johnsca/libjuju-test'
+        stable = await model.deploy(charm, 'a1')
+        edge = await model.deploy(charm, 'a2', channel='edge')
+        rev = await model.deploy(charm+'-2', 'a3')
+
+        assert [a.charm_url for a in (stable, edge, rev)] == [
+            'cs:~johnsca/libjuju-test-1',
+            'cs:~johnsca/libjuju-test-2',
+            'cs:~johnsca/libjuju-test-2',
+        ]
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_add_machine(event_loop):
+    from juju.machine import Machine
+
+    async with base.CleanModel() as model:
+        # add a new default machine
+        machine1 = await model.add_machine()
+
+        # add a machine with constraints, disks, and series
+        machine2 = await model.add_machine(
+            constraints={
+                'mem': 256 * MB,
+            },
+            disks=[{
+                'pool': 'rootfs',
+                'size': 10 * GB,
+                'count': 1,
+            }],
+            series='xenial',
+        )
+
+        # add a lxd container to machine2
+        machine3 = await model.add_machine(
+            'lxd:{}'.format(machine2.id))
+
+        for m in (machine1, machine2, machine3):
+            assert isinstance(m, Machine)
+
+        assert len(model.machines) == 3
+
+        await machine3.destroy(force=True)
+        await machine2.destroy(force=True)
+        res = await machine1.destroy(force=True)
+
+        assert res is None
+        assert len(model.machines) == 0
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_relate(event_loop):
+    from juju.relation import Relation
+
+    async with base.CleanModel() as model:
+        await model.deploy(
+            'ubuntu',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+        await model.deploy(
+            'nrpe',
+            application_name='nrpe',
+            series='trusty',
+            channel='stable',
+            # subordinates must be deployed without units
+            num_units=0,
+        )
+        my_relation = await model.add_relation(
+            'ubuntu',
+            'nrpe',
+        )
+
+        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)
+    try:
+        await new_model.deploy('cs:xenial/ubuntu')
+        assert 'ubuntu' in new_model.applications
+    finally:
+        await new_model.disconnect()
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_explicit_loop(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):
+    async with base.CleanModel() as model:
+        model_name = model.info.name
+        new_loop = asyncio.new_event_loop()
+        with ThreadPoolExecutor(1) as executor:
+            f = executor.submit(
+                new_loop.run_until_complete,
+                _deploy_in_loop(new_loop, model_name))
+            f.result()
+        await model._wait_for_new('application', 'ubuntu')
+        assert 'ubuntu' in model.applications
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_store_resources_charm(event_loop):
+    async with base.CleanModel() as model:
+        ghost = await model.deploy('cs:ghost-19')
+        assert 'ghost' in model.applications
+        terminal_statuses = ('active', 'error', 'blocked')
+        await model.block_until(
+            lambda: (
+                len(ghost.units) > 0 and
+                ghost.units[0].workload_status in terminal_statuses)
+            )
+        # ghost will go in to blocked (or error, for older
+        # charm revs) if the resource is missing
+        assert ghost.units[0].workload_status == 'active'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_store_resources_bundle(event_loop):
+    async with base.CleanModel() as model:
+        bundle = str(Path(__file__).parent / 'bundle')
+        await model.deploy(bundle)
+        assert 'ghost' in model.applications
+        ghost = model.applications['ghost']
+        terminal_statuses = ('active', 'error', 'blocked')
+        await model.block_until(
+            lambda: (
+                len(ghost.units) > 0 and
+                ghost.units[0].workload_status in terminal_statuses)
+            )
+        # ghost will go in to blocked (or error, for older
+        # charm revs) if the resource is missing
+        assert ghost.units[0].workload_status == 'active'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_ssh_key(event_loop):
+    async with base.CleanModel() as model:
+        await model.add_ssh_key('admin', SSH_KEY)
+        result = await model.get_ssh_key(True)
+        result = result.serialize()['results'][0].serialize()['result']
+        assert SSH_KEY in result
+        await model.remove_ssh_key('admin', SSH_KEY)
+        result = await model.get_ssh_key(True)
+        result = result.serialize()['results'][0].serialize()['result']
+        assert result is None
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_get_machines(event_loop):
+    async with base.CleanModel() as model:
+        result = await model.get_machines()
+        assert isinstance(result, list)
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_watcher_reconnect(event_loop):
+    async with base.CleanModel() as model:
+        await model.connection.ws.close()
+        await asyncio.sleep(0.1)
+        assert model.connection.is_open
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_config(event_loop):
+    async with base.CleanModel() as model:
+        await model.set_config({
+            'extra-info': 'booyah',
+            'test-mode': ConfigValue(value=True),
+        })
+        result = await model.get_config()
+        assert 'extra-info' in result
+        assert result['extra-info'].source == 'model'
+        assert result['extra-info'].value == 'booyah'
+
+# @base.bootstrapped
+# @pytest.mark.asyncio
+# async def test_grant(event_loop)
+#    async with base.CleanController() as controller:
+#        await controller.add_user('test-model-grant')
+#        await controller.grant('test-model-grant', 'superuser')
+#    async with base.CleanModel() as model:
+#        await model.grant('test-model-grant', 'admin')
+#        assert model.get_user('test-model-grant')['access'] == 'admin'
+#        await model.grant('test-model-grant', 'login')
+#        assert model.get_user('test-model-grant')['access'] == 'login'
diff --git a/tests/integration/test_unit.py b/tests/integration/test_unit.py
new file mode 100644 (file)
index 0000000..1604c31
--- /dev/null
@@ -0,0 +1,78 @@
+import asyncio
+import pytest
+
+from tempfile import NamedTemporaryFile
+
+from .. import base
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_run(event_loop):
+    from juju.action import Action
+
+    async with base.CleanModel() as model:
+        app = await model.deploy(
+            'ubuntu-0',
+            application_name='ubuntu',
+            series='trusty',
+            channel='stable',
+        )
+
+        for unit in app.units:
+            action = await unit.run('unit-get public-address')
+            assert isinstance(action, Action)
+            assert 'Stdout' in action.results
+            break
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_run_action(event_loop):
+    async def run_action(unit):
+        # unit.run() returns a juju.action.Action instance
+        action = await unit.run_action('add-repo', repo='myrepo')
+        # wait for the action to complete
+        return await action.wait()
+
+    async with base.CleanModel() as model:
+        app = await model.deploy(
+            'git',
+            application_name='git',
+            series='trusty',
+            channel='stable',
+        )
+
+        for unit in app.units:
+            action = await run_action(unit)
+            assert action.results == {'dir': '/var/git/myrepo.git'}
+            break
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_scp(event_loop):
+    async with base.CleanModel() as model:
+        app = await model.deploy('ubuntu')
+
+        await asyncio.wait_for(
+            model.block_until(lambda: app.units),
+            timeout=60)
+        unit = app.units[0]
+        await asyncio.wait_for(
+            model.block_until(lambda: unit.machine),
+            timeout=60)
+        machine = unit.machine
+        await asyncio.wait_for(
+            model.block_until(lambda: (machine.status == 'running' and
+                                       machine.agent_status == 'started')),
+            timeout=480)
+
+        with NamedTemporaryFile() as f:
+            f.write(b'testcontents')
+            f.flush()
+            await unit.scp_to(f.name, 'testfile')
+
+        with NamedTemporaryFile() as f:
+            await unit.scp_from('testfile', f.name)
+            assert f.read() == b'testcontents'
diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/unit/test_client.py b/tests/unit/test_client.py
new file mode 100644 (file)
index 0000000..7828cf3
--- /dev/null
@@ -0,0 +1,25 @@
+"""
+Tests for generated client code
+
+"""
+
+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
+        assert str(i) in client.CLIENTS
+
+
+def test_from_connection():
+    connection = mock.Mock()
+    connection.facades = {"Action": 2}
+    action_facade = client.ActionFacade.from_connection(connection)
+
+    
diff --git a/tests/unit/test_connection.py b/tests/unit/test_connection.py
new file mode 100644 (file)
index 0000000..f69b8d6
--- /dev/null
@@ -0,0 +1,54 @@
+import asyncio
+import json
+import mock
+import pytest
+from collections import deque
+
+from websockets.exceptions import ConnectionClosed
+
+from .. import base
+from juju.client.connection import Connection
+
+
+class WebsocketMock:
+    def __init__(self, responses):
+        super().__init__()
+        self.responses = deque(responses)
+        self.open = True
+
+    async def send(self, message):
+        pass
+
+    async def recv(self):
+        if not self.responses:
+            await asyncio.sleep(1)  # delay to give test time to finish
+            raise ConnectionClosed(0, 'ran out of responses')
+        return json.dumps(self.responses.popleft())
+
+    async def close(self):
+        self.open = False
+
+
+@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},
+    ])
+    expected_responses = [
+        {'request-id': 1},
+        {'request-id': 2},
+        {'request-id': 3},
+    ]
+    con._get_sll = mock.MagicMock()
+    try:
+        with mock.patch('websockets.connect', base.AsyncMock(return_value=ws)):
+            await con.open()
+        actual_responses = []
+        for i in range(3):
+            actual_responses.append(await con.rpc({'version': 1}))
+        assert actual_responses == expected_responses
+    finally:
+        await con.close()
diff --git a/tests/unit/test_constraints.py b/tests/unit/test_constraints.py
new file mode 100644 (file)
index 0000000..cb9d773
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Test our constraints parser
+#
+
+import unittest
+
+from juju import constraints
+
+class TestConstraints(unittest.TestCase):
+
+    def test_mem_regex(self):
+        m = constraints.MEM
+        self.assertTrue(m.match("10G"))
+        self.assertTrue(m.match("1G"))
+        self.assertFalse(m.match("1Gb"))
+        self.assertFalse(m.match("a1G"))
+        self.assertFalse(m.match("1000"))
+
+    def test_normalize_key(self):
+        _ = constraints.normalize_key
+
+        self.assertEqual(_("test-key"), "test_key")
+        self.assertEqual(_("test-key  "), "test_key")
+        self.assertEqual(_("  test-key"), "test_key")
+        self.assertEqual(_("TestKey"), "test_key")
+        self.assertEqual(_("testKey"), "test_key")
+
+    def test_normalize_val(self):
+        _ = constraints.normalize_value
+
+        self.assertEqual(_("10G"), 10 * 1024)
+        self.assertEqual(_("10M"), 10)
+        self.assertEqual(_("10"), 10)
+        self.assertEqual(_("foo,bar"), ["foo", "bar"])
+
+    def test_parse_constraints(self):
+        _ = constraints.parse
+
+        self.assertEqual(
+            _("mem=10G"),
+            {"mem": 10 * 1024}
+        )
+
+        self.assertEqual(
+            _("mem=10G foo=bar,baz"),
+            {"mem": 10 * 1024, "foo": ["bar", "baz"]}
+        )
diff --git a/tests/unit/test_loop.py b/tests/unit/test_loop.py
new file mode 100644 (file)
index 0000000..f12368e
--- /dev/null
@@ -0,0 +1,30 @@
+import asyncio
+import unittest
+import juju.loop
+
+
+class TestLoop(unittest.TestCase):
+    def setUp(self):
+        # new event loop for each test
+        policy = asyncio.get_event_loop_policy()
+        self.loop = policy.new_event_loop()
+        policy.set_event_loop(self.loop)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_run(self):
+        assert asyncio.get_event_loop() == self.loop
+        async def _test():
+            return 'success'
+        self.assertEqual(juju.loop.run(_test()), 'success')
+
+    def test_run_interrupt(self):
+        async def _test():
+            juju.loop.run._sigint = True
+        self.assertRaises(KeyboardInterrupt, juju.loop.run, _test())
+
+    def test_run_exception(self):
+        async def _test():
+            raise ValueError()
+        self.assertRaises(ValueError, juju.loop.run, _test())
diff --git a/tests/unit/test_model.py b/tests/unit/test_model.py
new file mode 100644 (file)
index 0000000..222d881
--- /dev/null
@@ -0,0 +1,155 @@
+import unittest
+
+import mock
+import asynctest
+
+
+def _make_delta(entity, type_, data=None):
+    from juju.client.client import Delta
+    from juju.delta import get_entity_delta
+
+    delta = Delta([entity, type_, data])
+    return get_entity_delta(delta)
+
+
+class TestObserver(unittest.TestCase):
+    def _make_observer(self, *args):
+        from juju.model import _Observer
+        return _Observer(*args)
+
+    def test_cares_about_id(self):
+        id_ = 'foo'
+
+        o = self._make_observer(
+            None, None, None, id_, None)
+
+        delta = _make_delta(
+            'application', 'change', dict(name=id_))
+
+        self.assertTrue(o.cares_about(delta))
+
+    def test_cares_about_type(self):
+        type_ = 'application'
+
+        o = self._make_observer(
+            None, type_, None, None, None)
+
+        delta = _make_delta(
+            type_, 'change', dict(name='foo'))
+
+        self.assertTrue(o.cares_about(delta))
+
+    def test_cares_about_action(self):
+        action = 'change'
+
+        o = self._make_observer(
+            None, None, action, None, None)
+
+        delta = _make_delta(
+            'application', action, dict(name='foo'))
+
+        self.assertTrue(o.cares_about(delta))
+
+    def test_cares_about_predicate(self):
+        def predicate(delta):
+            return delta.data.get('fizz') == 'bang'
+
+        o = self._make_observer(
+            None, None, None, None, predicate)
+
+        delta = _make_delta(
+            'application', 'change', dict(fizz='bang'))
+
+        self.assertTrue(o.cares_about(delta))
+
+
+class TestModelState(unittest.TestCase):
+    def test_apply_delta(self):
+        from juju.model import Model
+        from juju.application import Application
+
+        loop = mock.MagicMock()
+        model = Model(loop=loop)
+        delta = _make_delta('application', 'add', dict(name='foo'))
+
+        # test add
+        prev, new = model.state.apply_delta(delta)
+        self.assertEqual(
+            len(model.state.state[delta.entity][delta.get_id()]), 1)
+        self.assertIsNone(prev)
+        self.assertIsInstance(new, Application)
+
+        # test remove
+        delta.type = 'remove'
+        prev, new = model.state.apply_delta(delta)
+        # length of the entity history deque is now 3:
+        # - 1 for the first delta
+        # - 1 for the second delta
+        # - 1 for the None sentinel appended after the 'remove'
+        self.assertEqual(
+            len(model.state.state[delta.entity][delta.get_id()]), 3)
+        self.assertIsInstance(new, Application)
+        # new object is falsy because its data is None
+        self.assertFalse(new)
+        self.assertIsInstance(prev, Application)
+        self.assertTrue(prev)
+
+
+def test_get_series():
+    from juju.model import Model
+    model = Model()
+    entity = {
+        'Meta': {
+            'supported-series': {
+                'SupportedSeries': [
+                    'xenial',
+                    'trusty',
+                ],
+            },
+        },
+    }
+    assert model._get_series('cs:trusty/ubuntu', entity) == 'trusty'
+    assert model._get_series('xenial/ubuntu', entity) == 'xenial'
+    assert model._get_series('~foo/xenial/ubuntu', entity) == 'xenial'
+    assert model._get_series('~foo/ubuntu', entity) == 'xenial'
+    assert model._get_series('ubuntu', entity) == 'xenial'
+    assert model._get_series('cs:ubuntu', entity) == 'xenial'
+
+
+class TestContextManager(asynctest.TestCase):
+    @asynctest.patch('juju.model.Model.disconnect')
+    @asynctest.patch('juju.model.Model.connect_current')
+    async def test_normal_use(self, mock_connect, mock_disconnect):
+        from juju.model import Model
+
+        async with Model() as model:
+            self.assertTrue(isinstance(model, Model))
+
+        self.assertTrue(mock_connect.called)
+        self.assertTrue(mock_disconnect.called)
+
+    @asynctest.patch('juju.model.Model.disconnect')
+    @asynctest.patch('juju.model.Model.connect_current')
+    async def test_exception(self, mock_connect, mock_disconnect):
+        from juju.model import Model
+
+        class SomeException(Exception):
+            pass
+
+        with self.assertRaises(SomeException):
+            async with Model():
+                raise SomeException()
+
+        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):
+        from juju.model import Model
+        from juju.errors import JujuConnectionError
+
+        mock_current_controller.return_value = ""
+
+        with self.assertRaises(JujuConnectionError):
+            async with Model():
+                pass
diff --git a/tests/unit/test_overrides.py b/tests/unit/test_overrides.py
new file mode 100644 (file)
index 0000000..6485408
--- /dev/null
@@ -0,0 +1,76 @@
+import pytest
+
+from juju.client.overrides import Number, Binary  # noqa
+
+
+# test cases ported from:
+# https://github.com/juju/version/blob/master/version_test.go
+@pytest.mark.parametrize("input,expected", (
+    (None, Number(major=0, minor=0, patch=0, tag='', build=0)),
+    (Number(major=1, minor=0, patch=0), Number(major=1, minor=0, patch=0)),
+    ({'major': 1, 'minor': 0, 'patch': 0}, Number(major=1, minor=0, patch=0)),
+    ("0.0.1", Number(major=0, minor=0, patch=1)),
+    ("0.0.2", Number(major=0, minor=0, patch=2)),
+    ("0.1.0", Number(major=0, minor=1, patch=0)),
+    ("0.2.3", Number(major=0, minor=2, patch=3)),
+    ("1.0.0", Number(major=1, minor=0, patch=0)),
+    ("10.234.3456", Number(major=10, minor=234, patch=3456)),
+    ("10.234.3456.1", Number(major=10, minor=234, patch=3456, build=1)),
+    ("10.234.3456.64", Number(major=10, minor=234, patch=3456, build=64)),
+    ("10.235.3456", Number(major=10, minor=235, patch=3456)),
+    ("1.21-alpha1", Number(major=1, minor=21, patch=1, tag="alpha")),
+    ("1.21-alpha1.1", Number(major=1, minor=21, patch=1, tag="alpha",
+                             build=1)),
+    ("1.21-alpha10", Number(major=1, minor=21, patch=10, tag="alpha")),
+    ("1.21.0", Number(major=1, minor=21)),
+    ("1234567890.2.1", TypeError),
+    ("0.2..1", TypeError),
+    ("1.21.alpha1", TypeError),
+    ("1.21-alpha", TypeError),
+    ("1.21-alpha1beta", TypeError),
+    ("1.21-alpha-dev", TypeError),
+    ("1.21-alpha_dev3", TypeError),
+    ("1.21-alpha123dev3", TypeError),
+))
+def test_number(input, expected):
+    if expected is TypeError:
+        with pytest.raises(expected):
+            Number.from_json(input)
+    else:
+        result = Number.from_json(input)
+        assert result == expected
+        if isinstance(input, str):
+            assert result.to_json() == input
+
+
+# test cases ported from:
+# https://github.com/juju/version/blob/master/version_test.go
+@pytest.mark.parametrize("input,expected", (
+    (None, Binary(Number(), None, None)),
+    (Binary(Number(1), 'trusty', 'amd64'), Binary(Number(1),
+                                                  'trusty', 'amd64')),
+    ({'number': {'major': 1},
+      'series': 'trusty',
+      'arch': 'amd64'}, Binary(Number(1), 'trusty', 'amd64')),
+    ("1.2.3-trusty-amd64", Binary(Number(1, 2, 3, "", 0),
+                                  "trusty", "amd64")),
+    ("1.2.3.4-trusty-amd64", Binary(Number(1, 2, 3, "", 4),
+                                    "trusty", "amd64")),
+    ("1.2-alpha3-trusty-amd64", Binary(Number(1, 2, 3, "alpha", 0),
+                                       "trusty", "amd64")),
+    ("1.2-alpha3.4-trusty-amd64", Binary(Number(1, 2, 3, "alpha", 4),
+                                         "trusty", "amd64")),
+    ("1.2.3", TypeError),
+    ("1.2-beta1", TypeError),
+    ("1.2.3--amd64", TypeError),
+    ("1.2.3-trusty-", TypeError),
+))
+def test_binary(input, expected):
+    if expected is TypeError:
+        with pytest.raises(expected):
+            Binary.from_json(input)
+    else:
+        result = Binary.from_json(input)
+        assert result == expected
+        if isinstance(input, str):
+            assert result.to_json() == input
diff --git a/tests/unit/test_placement.py b/tests/unit/test_placement.py
new file mode 100644 (file)
index 0000000..a78a28d
--- /dev/null
@@ -0,0 +1,20 @@
+#
+# Test our placement helper
+#
+
+import unittest
+
+from juju import placement
+from juju.client import client
+
+class TestPlacement(unittest.TestCase):
+
+    def test_parse_both_specified(self):
+        res = placement.parse("foo:bar")
+        self.assertEqual(res[0].scope, "foo")
+        self.assertEqual(res[0].directive, "bar")
+
+    def test_parse_machine(self):
+        res = placement.parse("22")
+        self.assertEqual(res[0].scope, "#")
+        self.assertEqual(res[0].directive, "22")
diff --git a/tox.ini b/tox.ini
new file mode 100644 (file)
index 0000000..789bbeb
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,28 @@
+# Tox (http://tox.testrun.org/) is a tool for running tests
+# in multiple virtualenvs. This configuration file will run the
+# test suite on all supported python versions. To use it, "pip install tox"
+# and then run "tox" from this directory.
+
+[tox]
+envlist = py35
+skipsdist=True
+
+[testenv]
+usedevelop=True
+passenv =
+    HOME
+deps =
+    pytest
+    pytest-asyncio
+    pytest-xdist
+    mock
+    asynctest
+    ipdb
+
+[testenv:py35]
+# default tox env excludes integration tests
+commands = py.test -ra -v -s -x -n auto -k 'not integration' {posargs}
+
+[testenv:integration]
+basepython=python3
+commands = py.test -ra -v -s -x -n auto {posargs}