Hook up Unit.run() to api
authorTim Van Steenburgh <tvansteenburgh@gmail.com>
Sat, 25 Jun 2016 01:03:26 +0000 (21:03 -0400)
committerTim Van Steenburgh <tvansteenburgh@gmail.com>
Sat, 25 Jun 2016 01:03:26 +0000 (21:03 -0400)
Makefile
examples/unitrun.py [new file with mode: 0644]
juju/client/_client.py
juju/client/connection.py
juju/client/facade.py
juju/client/schemas-20160608.json [new file with mode: 0644]
juju/client/watcher.py
juju/model.py
juju/unit.py
tests/client/test_client.py

index 64e6ba5..4d10060 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,16 @@
 PY := .tox/py35/bin/python3.5
 
+clean:
+       find . -name __pycache__ -type d -exec rm -r {} +
+       find . -name *.pyc -delete
+
 .tox:
        tox -r --notest
 
-.phony: client
 client:
-       $(PY) -m juju.client.facade -s juju/client/schemas.json -o juju/client/_client.py
+       $(PY) -m juju.client.facade -s juju/client/schemas-20160608.json -o juju/client/_client.py
 
-.phony: test
 test:
        tox
+
+.phony: clean client test
diff --git a/examples/unitrun.py b/examples/unitrun.py
new file mode 100644 (file)
index 0000000..7e3c490
--- /dev/null
@@ -0,0 +1,47 @@
+"""
+Run this one against a model that has at least one unit deployed.
+
+"""
+import asyncio
+import functools
+
+from juju.model import Model
+from juju.unit import Unit
+from juju.client.connection import Connection
+
+
+loop = asyncio.get_event_loop()
+conn = loop.run_until_complete(Connection.connect_current())
+
+_seen_units = set()
+
+
+async def run_stuff_on_unit(unit):
+    if unit.Name in _seen_units:
+        return
+
+    print('Running command on unit', unit.Name)
+    # unit.run() returns a client.ActionResults instance
+    action_results = await unit.run('unit-get public-address')
+    _seen_units.add(unit.Name)
+    action_result = action_results.results[0]
+
+    print('Results from unit', unit.Name)
+    print(action_result.__dict__)
+
+
+def on_model_change(delta, old, new, model):
+    if isinstance(new, Unit):
+        task = loop.create_task(run_stuff_on_unit(new))
+
+    if delta.entity == 'action':
+        print(delta.data)
+        print(new)
+
+
+async def watch_model():
+    model = Model(conn)
+    model.add_observer(on_model_change)
+    await model.watch()
+
+loop.run_until_complete(watch_model())
index 68dd8bf..a792fd9 100644 (file)
@@ -5,8 +5,8 @@ from juju.client.facade import Type, ReturnMapping
 
 
 class Action(Type):
-    _toSchema = {'receiver': 'receiver', 'tag': 'tag', 'parameters': 'parameters', 'name': 'name'}
-    _toPy = {'receiver': 'receiver', 'tag': 'tag', 'parameters': 'parameters', 'name': 'name'}
+    _toSchema = {'parameters': 'parameters', 'receiver': 'receiver', 'tag': 'tag', 'name': 'name'}
+    _toPy = {'parameters': 'parameters', 'receiver': 'receiver', 'tag': 'tag', 'name': 'name'}
     def __init__(self, name=None, parameters=None, receiver=None, tag=None):
         '''
         name : str
@@ -21,8 +21,8 @@ class Action(Type):
 
 
 class ActionResult(Type):
-    _toSchema = {'action': 'action', 'completed': 'completed', 'output': 'output', 'status': 'status', 'started': 'started', 'message': 'message', 'enqueued': 'enqueued', 'error': 'error'}
-    _toPy = {'action': 'action', 'completed': 'completed', 'output': 'output', 'status': 'status', 'started': 'started', 'message': 'message', 'enqueued': 'enqueued', 'error': 'error'}
+    _toSchema = {'action': 'action', 'completed': 'completed', 'output': 'output', 'started': 'started', 'enqueued': 'enqueued', 'message': 'message', 'error': 'error', 'status': 'status'}
+    _toPy = {'action': 'action', 'completed': 'completed', 'output': 'output', 'started': 'started', 'enqueued': 'enqueued', 'message': 'message', 'error': 'error', 'status': 'status'}
     def __init__(self, action=None, completed=None, enqueued=None, error=None, message=None, output=None, started=None, status=None):
         '''
         action : Action
@@ -54,19 +54,31 @@ class ActionResults(Type):
         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):
+        '''
+        description : str
+        params : typing.Mapping[str, typing.Any]
+        '''
+        self.description = description
+        self.params = params
+
+
 class Actions(Type):
-    _toSchema = {'actions': 'actions'}
-    _toPy = {'actions': 'actions'}
-    def __init__(self, actions=None):
+    _toSchema = {'actionspecs': 'ActionSpecs'}
+    _toPy = {'ActionSpecs': 'actionspecs'}
+    def __init__(self, actionspecs=None):
         '''
-        actions : typing.Sequence[~Action]
+        actionspecs : typing.Mapping[str, ~ActionSpec]
         '''
-        self.actions = [Action.from_json(o) for o in actions or []]
+        self.actionspecs = {k: ActionSpec.from_json(v) for k, v in (actionspecs or dict()).items()}
 
 
 class ActionsByName(Type):
-    _toSchema = {'actions': 'actions', 'error': 'error', 'name': 'name'}
-    _toPy = {'actions': 'actions', 'error': 'error', 'name': 'name'}
+    _toSchema = {'name': 'name', 'actions': 'actions', 'error': 'error'}
+    _toPy = {'name': 'name', 'actions': 'actions', 'error': 'error'}
     def __init__(self, actions=None, error=None, name=None):
         '''
         actions : typing.Sequence[~ActionResult]
@@ -89,8 +101,8 @@ class ActionsByNames(Type):
 
 
 class ActionsByReceiver(Type):
-    _toSchema = {'actions': 'actions', 'receiver': 'receiver', 'error': 'error'}
-    _toPy = {'actions': 'actions', 'receiver': 'receiver', 'error': 'error'}
+    _toSchema = {'receiver': 'receiver', 'actions': 'actions', 'error': 'error'}
+    _toPy = {'receiver': 'receiver', 'actions': 'actions', 'error': 'error'}
     def __init__(self, actions=None, error=None, receiver=None):
         '''
         actions : typing.Sequence[~ActionResult]
@@ -112,6 +124,30 @@ class ActionsByReceivers(Type):
         self.actions = [ActionsByReceiver.from_json(o) for o in actions or []]
 
 
+class ApplicationCharmActionsResult(Type):
+    _toSchema = {'applicationtag': 'ApplicationTag', 'actions': 'actions', 'error': 'error'}
+    _toPy = {'actions': 'actions', 'ApplicationTag': 'applicationtag', 'error': 'error'}
+    def __init__(self, applicationtag=None, actions=None, error=None):
+        '''
+        applicationtag : str
+        actions : Actions
+        error : Error
+        '''
+        self.applicationtag = applicationtag
+        self.actions = Actions.from_json(actions) if actions else None
+        self.error = Error.from_json(error) if error else None
+
+
+class ApplicationsCharmActionsResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
+        '''
+        results : typing.Sequence[~ApplicationCharmActionsResult]
+        '''
+        self.results = [ApplicationCharmActionsResult.from_json(o) for o in results or []]
+
+
 class Entities(Type):
     _toSchema = {'entities': 'Entities'}
     _toPy = {'Entities': 'entities'}
@@ -133,8 +169,8 @@ class Entity(Type):
 
 
 class Error(Type):
-    _toSchema = {'info': 'Info', 'message': 'Message', 'code': 'Code'}
-    _toPy = {'Info': 'info', 'Code': 'code', 'Message': 'message'}
+    _toSchema = {'code': 'Code', 'message': 'Message', 'info': 'Info'}
+    _toPy = {'Code': 'code', 'Message': 'message', 'Info': 'info'}
     def __init__(self, code=None, info=None, message=None):
         '''
         code : str
@@ -148,7 +184,7 @@ class Error(Type):
 
 class ErrorInfo(Type):
     _toSchema = {'macaroonpath': 'MacaroonPath', 'macaroon': 'Macaroon'}
-    _toPy = {'MacaroonPath': 'macaroonpath', 'Macaroon': 'macaroon'}
+    _toPy = {'Macaroon': 'macaroon', 'MacaroonPath': 'macaroonpath'}
     def __init__(self, macaroon=None, macaroonpath=None):
         '''
         macaroon : Macaroon
@@ -189,8 +225,8 @@ class FindTagsResults(Type):
 
 
 class Macaroon(Type):
-    _toSchema = {'location': 'location', 'caveats': 'caveats', 'sig': 'sig', 'id_': 'id', 'data': 'data'}
-    _toPy = {'location': 'location', 'caveats': 'caveats', 'sig': 'sig', 'id': 'id_', 'data': 'data'}
+    _toSchema = {'caveats': 'caveats', 'location': 'location', 'data': 'data', 'id_': 'id', 'sig': 'sig'}
+    _toPy = {'caveats': 'caveats', 'location': 'location', 'data': 'data', 'sig': 'sig', 'id': 'id_'}
     def __init__(self, caveats=None, data=None, id_=None, location=None, sig=None):
         '''
         caveats : typing.Sequence[~caveat]
@@ -207,50 +243,26 @@ class Macaroon(Type):
 
 
 class RunParams(Type):
-    _toSchema = {'timeout': 'Timeout', 'machines': 'Machines', 'units': 'Units', 'services': 'Services', 'commands': 'Commands'}
-    _toPy = {'Services': 'services', 'Units': 'units', 'Machines': 'machines', 'Commands': 'commands', 'Timeout': 'timeout'}
-    def __init__(self, commands=None, machines=None, services=None, timeout=None, units=None):
+    _toSchema = {'units': 'Units', 'applications': 'Applications', 'commands': 'Commands', 'machines': 'Machines', 'timeout': 'Timeout'}
+    _toPy = {'Applications': 'applications', 'Commands': 'commands', 'Timeout': 'timeout', 'Units': 'units', 'Machines': 'machines'}
+    def __init__(self, applications=None, commands=None, machines=None, timeout=None, units=None):
         '''
+        applications : typing.Sequence[str]
         commands : str
         machines : typing.Sequence[str]
-        services : typing.Sequence[str]
         timeout : int
         units : typing.Sequence[str]
         '''
+        self.applications = applications
         self.commands = commands
         self.machines = machines
-        self.services = services
         self.timeout = timeout
         self.units = units
 
 
-class ServiceCharmActionsResult(Type):
-    _toSchema = {'actions': 'actions', 'error': 'error', 'servicetag': 'servicetag'}
-    _toPy = {'actions': 'actions', 'error': 'error', 'servicetag': 'servicetag'}
-    def __init__(self, actions=None, error=None, servicetag=None):
-        '''
-        actions : Actions
-        error : Error
-        servicetag : str
-        '''
-        self.actions = Actions.from_json(actions) if actions else None
-        self.error = Error.from_json(error) if error else None
-        self.servicetag = servicetag
-
-
-class ServicesCharmActionsResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
-        '''
-        results : typing.Sequence[~ServiceCharmActionsResult]
-        '''
-        self.results = [ServiceCharmActionsResult.from_json(o) for o in results or []]
-
-
 class caveat(Type):
-    _toSchema = {'location': 'location', 'caveatid': 'caveatId', 'verificationid': 'verificationId'}
-    _toPy = {'location': 'location', 'caveatId': 'caveatid', 'verificationId': 'verificationid'}
+    _toSchema = {'caveatid': 'caveatId', 'location': 'location', 'verificationid': 'verificationId'}
+    _toPy = {'verificationId': 'verificationid', 'location': 'location', 'caveatId': 'caveatid'}
     def __init__(self, caveatid=None, location=None, verificationid=None):
         '''
         caveatid : packet
@@ -263,8 +275,8 @@ class caveat(Type):
 
 
 class packet(Type):
-    _toSchema = {'headerlen': 'headerLen', 'start': 'start', 'totallen': 'totalLen'}
-    _toPy = {'totalLen': 'totallen', 'headerLen': 'headerlen', 'start': 'start'}
+    _toSchema = {'start': 'start', 'totallen': 'totalLen', 'headerlen': 'headerLen'}
+    _toPy = {'start': 'start', 'totalLen': 'totallen', 'headerLen': 'headerlen'}
     def __init__(self, headerlen=None, start=None, totallen=None):
         '''
         headerlen : int
@@ -277,8 +289,8 @@ class packet(Type):
 
 
 class BoolResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -303,8 +315,8 @@ class EntitiesWatchResult(Type):
 
 
 class ErrorResult(Type):
-    _toSchema = {'info': 'Info', 'message': 'Message', 'code': 'Code'}
-    _toPy = {'Info': 'info', 'Code': 'code', 'Message': 'message'}
+    _toSchema = {'code': 'Code', 'message': 'Message', 'info': 'Info'}
+    _toPy = {'Code': 'code', 'Message': 'message', 'Info': 'info'}
     def __init__(self, code=None, info=None, message=None):
         '''
         code : str
@@ -317,8 +329,8 @@ class ErrorResult(Type):
 
 
 class AgentGetEntitiesResult(Type):
-    _toSchema = {'containertype': 'ContainerType', 'error': 'Error', 'life': 'Life', 'jobs': 'Jobs'}
-    _toPy = {'Error': 'error', 'Jobs': 'jobs', 'ContainerType': 'containertype', 'Life': 'life'}
+    _toSchema = {'jobs': 'Jobs', 'life': 'Life', 'error': 'Error', 'containertype': 'ContainerType'}
+    _toPy = {'Life': 'life', 'ContainerType': 'containertype', 'Error': 'error', 'Jobs': 'jobs'}
     def __init__(self, containertype=None, error=None, jobs=None, life=None):
         '''
         containertype : str
@@ -344,7 +356,7 @@ class AgentGetEntitiesResults(Type):
 
 class EntityPassword(Type):
     _toSchema = {'password': 'Password', 'tag': 'Tag'}
-    _toPy = {'Password': 'password', 'Tag': 'tag'}
+    _toPy = {'Tag': 'tag', 'Password': 'password'}
     def __init__(self, password=None, tag=None):
         '''
         password : str
@@ -395,8 +407,8 @@ class ModelConfigResult(Type):
 
 
 class NotifyWatchResult(Type):
-    _toSchema = {'error': 'Error', 'notifywatcherid': 'NotifyWatcherId'}
-    _toPy = {'Error': 'error', 'NotifyWatcherId': 'notifywatcherid'}
+    _toSchema = {'notifywatcherid': 'NotifyWatcherId', 'error': 'Error'}
+    _toPy = {'NotifyWatcherId': 'notifywatcherid', 'Error': 'error'}
     def __init__(self, error=None, notifywatcherid=None):
         '''
         error : Error
@@ -407,8 +419,8 @@ class NotifyWatchResult(Type):
 
 
 class StateServingInfo(Type):
-    _toSchema = {'sharedsecret': 'SharedSecret', 'caprivatekey': 'CAPrivateKey', 'stateport': 'StatePort', 'cert': 'Cert', 'apiport': 'APIPort', 'privatekey': 'PrivateKey', 'systemidentity': 'SystemIdentity'}
-    _toPy = {'StatePort': 'stateport', 'APIPort': 'apiport', 'CAPrivateKey': 'caprivatekey', 'PrivateKey': 'privatekey', 'SystemIdentity': 'systemidentity', 'Cert': 'cert', 'SharedSecret': 'sharedsecret'}
+    _toSchema = {'apiport': 'APIPort', 'stateport': 'StatePort', 'cert': 'Cert', 'caprivatekey': 'CAPrivateKey', 'systemidentity': 'SystemIdentity', 'sharedsecret': 'SharedSecret', 'privatekey': 'PrivateKey'}
+    _toPy = {'SharedSecret': 'sharedsecret', 'CAPrivateKey': 'caprivatekey', 'Cert': 'cert', 'PrivateKey': 'privatekey', 'StatePort': 'stateport', 'SystemIdentity': 'systemidentity', 'APIPort': 'apiport'}
     def __init__(self, apiport=None, caprivatekey=None, cert=None, privatekey=None, sharedsecret=None, stateport=None, systemidentity=None):
         '''
         apiport : int
@@ -439,7 +451,7 @@ class AllWatcherNextResults(Type):
 
 
 class Delta(Type):
-    _toSchema = {'removed': 'Removed', 'entity': 'Entity'}
+    _toSchema = {'entity': 'Entity', 'removed': 'Removed'}
     _toPy = {'Removed': 'removed', 'Entity': 'entity'}
     def __init__(self, entity=None, removed=None):
         '''
@@ -451,8 +463,8 @@ class Delta(Type):
 
 
 class AnnotationsGetResult(Type):
-    _toSchema = {'error': 'Error', 'entitytag': 'EntityTag', 'annotations': 'Annotations'}
-    _toPy = {'EntityTag': 'entitytag', 'Annotations': 'annotations', 'Error': 'error'}
+    _toSchema = {'entitytag': 'EntityTag', 'annotations': 'Annotations', 'error': 'Error'}
+    _toPy = {'Error': 'error', 'Annotations': 'annotations', 'EntityTag': 'entitytag'}
     def __init__(self, annotations=None, entitytag=None, error=None):
         '''
         annotations : typing.Mapping[str, str]
@@ -486,7 +498,7 @@ class AnnotationsSet(Type):
 
 class EntityAnnotations(Type):
     _toSchema = {'entitytag': 'EntityTag', 'annotations': 'Annotations'}
-    _toPy = {'EntityTag': 'entitytag', 'Annotations': 'annotations'}
+    _toPy = {'Annotations': 'annotations', 'EntityTag': 'entitytag'}
     def __init__(self, annotations=None, entitytag=None):
         '''
         annotations : typing.Mapping[str, str]
@@ -496,3474 +508,3528 @@ class EntityAnnotations(Type):
         self.entitytag = entitytag
 
 
-class BackupsCreateArgs(Type):
-    _toSchema = {'notes': 'Notes'}
-    _toPy = {'Notes': 'notes'}
-    def __init__(self, notes=None):
+class AddApplicationUnits(Type):
+    _toSchema = {'numunits': 'NumUnits', 'applicationname': 'ApplicationName', 'placement': 'Placement'}
+    _toPy = {'NumUnits': 'numunits', 'Placement': 'placement', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, numunits=None, placement=None):
         '''
-        notes : str
+        applicationname : str
+        numunits : int
+        placement : typing.Sequence[~Placement]
         '''
-        self.notes = notes
+        self.applicationname = applicationname
+        self.numunits = numunits
+        self.placement = [Placement.from_json(o) for o in placement or []]
 
 
-class BackupsInfoArgs(Type):
-    _toSchema = {'id_': 'ID'}
-    _toPy = {'ID': 'id_'}
-    def __init__(self, id_=None):
+class AddApplicationUnitsResults(Type):
+    _toSchema = {'units': 'Units'}
+    _toPy = {'Units': 'units'}
+    def __init__(self, units=None):
         '''
-        id_ : str
+        units : typing.Sequence[str]
         '''
-        self.id_ = id_
+        self.units = units
 
 
-class BackupsListArgs(Type):
-    _toSchema = {}
-    _toPy = {}
-    def __init__(self):
+class AddRelation(Type):
+    _toSchema = {'endpoints': 'Endpoints'}
+    _toPy = {'Endpoints': 'endpoints'}
+    def __init__(self, endpoints=None):
         '''
-
+        endpoints : typing.Sequence[str]
         '''
-        pass
+        self.endpoints = endpoints
 
 
-class BackupsListResult(Type):
-    _toSchema = {'list_': 'List'}
-    _toPy = {'List': 'list_'}
-    def __init__(self, list_=None):
+class AddRelationResults(Type):
+    _toSchema = {'endpoints': 'Endpoints'}
+    _toPy = {'Endpoints': 'endpoints'}
+    def __init__(self, endpoints=None):
         '''
-        list_ : typing.Sequence[~BackupsMetadataResult]
+        endpoints : typing.Mapping[str, ~Relation]
         '''
-        self.list_ = [BackupsMetadataResult.from_json(o) for o in list_ or []]
+        self.endpoints = {k: Relation.from_json(v) for k, v in (endpoints or dict()).items()}
 
 
-class BackupsMetadataResult(Type):
-    _toSchema = {'caprivatekey': 'CAPrivateKey', 'started': 'Started', 'finished': 'Finished', 'size': 'Size', 'stored': 'Stored', 'checksum': 'Checksum', 'model': 'Model', 'version': 'Version', 'cacert': 'CACert', 'machine': 'Machine', 'hostname': 'Hostname', 'notes': 'Notes', 'checksumformat': 'ChecksumFormat', 'id_': 'ID'}
-    _toPy = {'Hostname': 'hostname', 'Stored': 'stored', 'CACert': 'cacert', 'Checksum': 'checksum', 'Started': 'started', 'Model': 'model', 'ChecksumFormat': 'checksumformat', 'Machine': 'machine', 'Version': 'version', 'CAPrivateKey': 'caprivatekey', 'Size': 'size', 'ID': 'id_', 'Finished': 'finished', 'Notes': 'notes'}
-    def __init__(self, cacert=None, caprivatekey=None, checksum=None, checksumformat=None, finished=None, hostname=None, id_=None, machine=None, model=None, notes=None, size=None, started=None, stored=None, version=None):
+class ApplicationCharmRelations(Type):
+    _toSchema = {'applicationname': 'ApplicationName'}
+    _toPy = {'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None):
         '''
-        cacert : str
-        caprivatekey : str
-        checksum : str
-        checksumformat : str
-        finished : str
-        hostname : str
-        id_ : str
-        machine : str
-        model : str
-        notes : str
-        size : int
-        started : str
-        stored : str
-        version : Number
+        applicationname : str
         '''
-        self.cacert = cacert
-        self.caprivatekey = caprivatekey
-        self.checksum = checksum
-        self.checksumformat = checksumformat
-        self.finished = finished
-        self.hostname = hostname
-        self.id_ = id_
-        self.machine = machine
-        self.model = model
-        self.notes = notes
-        self.size = size
-        self.started = started
-        self.stored = stored
-        self.version = Number.from_json(version) if version else None
+        self.applicationname = applicationname
 
 
-class BackupsRemoveArgs(Type):
-    _toSchema = {'id_': 'ID'}
-    _toPy = {'ID': 'id_'}
-    def __init__(self, id_=None):
+class ApplicationCharmRelationsResults(Type):
+    _toSchema = {'charmrelations': 'CharmRelations'}
+    _toPy = {'CharmRelations': 'charmrelations'}
+    def __init__(self, charmrelations=None):
         '''
-        id_ : str
+        charmrelations : typing.Sequence[str]
         '''
-        self.id_ = id_
+        self.charmrelations = charmrelations
 
 
-class Number(Type):
-    _toSchema = {'minor': 'Minor', 'major': 'Major', 'tag': 'Tag', 'patch': 'Patch', 'build': 'Build'}
-    _toPy = {'Tag': 'tag', 'Build': 'build', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch'}
-    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None):
+class ApplicationDeploy(Type):
+    _toSchema = {'resources': 'Resources', 'channel': 'Channel', 'numunits': 'NumUnits', 'charmurl': 'CharmUrl', 'endpointbindings': 'EndpointBindings', 'configyaml': 'ConfigYAML', 'series': 'Series', 'storage': 'Storage', 'placement': 'Placement', 'config': 'Config', 'constraints': 'Constraints', 'applicationname': 'ApplicationName'}
+    _toPy = {'Storage': 'storage', 'ApplicationName': 'applicationname', 'Channel': 'channel', 'CharmUrl': 'charmurl', 'Constraints': 'constraints', 'Config': 'config', 'ConfigYAML': 'configyaml', 'Resources': 'resources', 'EndpointBindings': 'endpointbindings', 'NumUnits': 'numunits', 'Placement': 'placement', 'Series': 'series'}
+    def __init__(self, applicationname=None, channel=None, charmurl=None, config=None, configyaml=None, constraints=None, endpointbindings=None, numunits=None, placement=None, resources=None, series=None, storage=None):
         '''
-        build : int
-        major : int
-        minor : int
-        patch : int
-        tag : str
+        applicationname : str
+        channel : str
+        charmurl : str
+        config : typing.Mapping[str, str]
+        configyaml : str
+        constraints : Value
+        endpointbindings : typing.Mapping[str, str]
+        numunits : int
+        placement : typing.Sequence[~Placement]
+        resources : typing.Mapping[str, str]
+        series : str
+        storage : typing.Mapping[str, ~Constraints]
         '''
-        self.build = build
-        self.major = major
-        self.minor = minor
-        self.patch = patch
-        self.tag = tag
+        self.applicationname = applicationname
+        self.channel = channel
+        self.charmurl = charmurl
+        self.config = config
+        self.configyaml = configyaml
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.endpointbindings = endpointbindings
+        self.numunits = numunits
+        self.placement = [Placement.from_json(o) for o in placement or []]
+        self.resources = resources
+        self.series = series
+        self.storage = {k: Constraints.from_json(v) for k, v in (storage or dict()).items()}
 
 
-class RestoreArgs(Type):
-    _toSchema = {'backupid': 'BackupId'}
-    _toPy = {'BackupId': 'backupid'}
-    def __init__(self, backupid=None):
+class ApplicationDestroy(Type):
+    _toSchema = {'applicationname': 'ApplicationName'}
+    _toPy = {'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None):
         '''
-        backupid : str
+        applicationname : str
         '''
-        self.backupid = backupid
+        self.applicationname = applicationname
 
 
-class Block(Type):
-    _toSchema = {'message': 'message', 'type_': 'type', 'id_': 'id', 'tag': 'tag'}
-    _toPy = {'message': 'message', 'id': 'id_', 'tag': 'tag', 'type': 'type_'}
-    def __init__(self, id_=None, message=None, tag=None, type_=None):
+class ApplicationExpose(Type):
+    _toSchema = {'applicationname': 'ApplicationName'}
+    _toPy = {'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None):
         '''
-        id_ : str
-        message : str
-        tag : str
-        type_ : str
+        applicationname : str
         '''
-        self.id_ = id_
-        self.message = message
-        self.tag = tag
-        self.type_ = type_
+        self.applicationname = applicationname
 
 
-class BlockResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
-    def __init__(self, error=None, result=None):
+class ApplicationGet(Type):
+    _toSchema = {'applicationname': 'ApplicationName'}
+    _toPy = {'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None):
         '''
-        error : Error
-        result : Block
+        applicationname : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.result = Block.from_json(result) if result else None
+        self.applicationname = applicationname
 
 
-class BlockResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class ApplicationGetResults(Type):
+    _toSchema = {'charm': 'Charm', 'config': 'Config', 'application': 'Application', 'constraints': 'Constraints'}
+    _toPy = {'Constraints': 'constraints', 'Charm': 'charm', 'Application': 'application', 'Config': 'config'}
+    def __init__(self, application=None, charm=None, config=None, constraints=None):
         '''
-        results : typing.Sequence[~BlockResult]
+        application : str
+        charm : str
+        config : typing.Mapping[str, typing.Any]
+        constraints : Value
         '''
-        self.results = [BlockResult.from_json(o) for o in results or []]
+        self.application = application
+        self.charm = charm
+        self.config = config
+        self.constraints = Value.from_json(constraints) if constraints else None
 
 
-class BlockSwitchParams(Type):
-    _toSchema = {'message': 'message', 'type_': 'type'}
-    _toPy = {'message': 'message', 'type': 'type_'}
-    def __init__(self, message=None, type_=None):
+class ApplicationMetricCredential(Type):
+    _toSchema = {'metriccredentials': 'MetricCredentials', 'applicationname': 'ApplicationName'}
+    _toPy = {'MetricCredentials': 'metriccredentials', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, metriccredentials=None):
         '''
-        message : str
-        type_ : str
+        applicationname : str
+        metriccredentials : typing.Sequence[int]
         '''
-        self.message = message
-        self.type_ = type_
+        self.applicationname = applicationname
+        self.metriccredentials = metriccredentials
 
 
-class CharmInfo(Type):
-    _toSchema = {'charmurl': 'CharmURL'}
-    _toPy = {'CharmURL': 'charmurl'}
-    def __init__(self, charmurl=None):
+class ApplicationMetricCredentials(Type):
+    _toSchema = {'creds': 'Creds'}
+    _toPy = {'Creds': 'creds'}
+    def __init__(self, creds=None):
         '''
-        charmurl : str
+        creds : typing.Sequence[~ApplicationMetricCredential]
         '''
-        self.charmurl = charmurl
+        self.creds = [ApplicationMetricCredential.from_json(o) for o in creds or []]
 
 
-class CharmsList(Type):
-    _toSchema = {'names': 'Names'}
-    _toPy = {'Names': 'names'}
-    def __init__(self, names=None):
+class ApplicationSet(Type):
+    _toSchema = {'options': 'Options', 'applicationname': 'ApplicationName'}
+    _toPy = {'Options': 'options', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, options=None):
         '''
-        names : typing.Sequence[str]
+        applicationname : str
+        options : typing.Mapping[str, str]
         '''
-        self.names = names
+        self.applicationname = applicationname
+        self.options = options
 
 
-class CharmsListResult(Type):
-    _toSchema = {'charmurls': 'CharmURLs'}
-    _toPy = {'CharmURLs': 'charmurls'}
-    def __init__(self, charmurls=None):
+class ApplicationSetCharm(Type):
+    _toSchema = {'forceseries': 'forceseries', 'charmurl': 'charmurl', 'resourceids': 'resourceids', 'forceunits': 'forceunits', 'cs_channel': 'cs-channel', 'applicationname': 'applicationname'}
+    _toPy = {'forceseries': 'forceseries', 'charmurl': 'charmurl', 'forceunits': 'forceunits', 'cs-channel': 'cs_channel', 'applicationname': 'applicationname', 'resourceids': 'resourceids'}
+    def __init__(self, applicationname=None, charmurl=None, cs_channel=None, forceseries=None, forceunits=None, resourceids=None):
         '''
-        charmurls : typing.Sequence[str]
+        applicationname : str
+        charmurl : str
+        cs_channel : str
+        forceseries : bool
+        forceunits : bool
+        resourceids : typing.Mapping[str, str]
         '''
-        self.charmurls = charmurls
+        self.applicationname = applicationname
+        self.charmurl = charmurl
+        self.cs_channel = cs_channel
+        self.forceseries = forceseries
+        self.forceunits = forceunits
+        self.resourceids = resourceids
 
 
-class IsMeteredResult(Type):
-    _toSchema = {'metered': 'Metered'}
-    _toPy = {'Metered': 'metered'}
-    def __init__(self, metered=None):
+class ApplicationUnexpose(Type):
+    _toSchema = {'applicationname': 'ApplicationName'}
+    _toPy = {'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None):
         '''
-        metered : bool
+        applicationname : str
         '''
-        self.metered = metered
+        self.applicationname = applicationname
 
 
-class APIHostPortsResult(Type):
-    _toSchema = {'servers': 'Servers'}
-    _toPy = {'Servers': 'servers'}
-    def __init__(self, servers=None):
+class ApplicationUnset(Type):
+    _toSchema = {'options': 'Options', 'applicationname': 'ApplicationName'}
+    _toPy = {'Options': 'options', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, options=None):
         '''
-        servers : typing.Sequence[~HostPort]
+        applicationname : str
+        options : typing.Sequence[str]
         '''
-        self.servers = [HostPort.from_json(o) for o in servers or []]
+        self.applicationname = applicationname
+        self.options = options
 
 
-class AddCharm(Type):
-    _toSchema = {'channel': 'Channel', 'url': 'URL'}
-    _toPy = {'Channel': 'channel', 'URL': 'url'}
-    def __init__(self, channel=None, url=None):
+class ApplicationUpdate(Type):
+    _toSchema = {'forceseries': 'ForceSeries', 'charmurl': 'CharmUrl', 'settingsyaml': 'SettingsYAML', 'constraints': 'Constraints', 'forcecharmurl': 'ForceCharmUrl', 'settingsstrings': 'SettingsStrings', 'applicationname': 'ApplicationName', 'minunits': 'MinUnits'}
+    _toPy = {'Constraints': 'constraints', 'SettingsYAML': 'settingsyaml', 'SettingsStrings': 'settingsstrings', 'ApplicationName': 'applicationname', 'MinUnits': 'minunits', 'ForceCharmUrl': 'forcecharmurl', 'CharmUrl': 'charmurl', 'ForceSeries': 'forceseries'}
+    def __init__(self, applicationname=None, charmurl=None, constraints=None, forcecharmurl=None, forceseries=None, minunits=None, settingsstrings=None, settingsyaml=None):
         '''
-        channel : str
-        url : str
+        applicationname : str
+        charmurl : str
+        constraints : Value
+        forcecharmurl : bool
+        forceseries : bool
+        minunits : int
+        settingsstrings : typing.Mapping[str, str]
+        settingsyaml : str
         '''
-        self.channel = channel
-        self.url = url
+        self.applicationname = applicationname
+        self.charmurl = charmurl
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.forcecharmurl = forcecharmurl
+        self.forceseries = forceseries
+        self.minunits = minunits
+        self.settingsstrings = settingsstrings
+        self.settingsyaml = settingsyaml
 
 
-class AddCharmWithAuthorization(Type):
-    _toSchema = {'channel': 'Channel', 'charmstoremacaroon': 'CharmStoreMacaroon', 'url': 'URL'}
-    _toPy = {'Channel': 'channel', 'CharmStoreMacaroon': 'charmstoremacaroon', 'URL': 'url'}
-    def __init__(self, channel=None, charmstoremacaroon=None, url=None):
+class ApplicationsDeploy(Type):
+    _toSchema = {'applications': 'Applications'}
+    _toPy = {'Applications': 'applications'}
+    def __init__(self, applications=None):
         '''
-        channel : str
-        charmstoremacaroon : Macaroon
-        url : str
+        applications : typing.Sequence[~ApplicationDeploy]
         '''
-        self.channel = channel
-        self.charmstoremacaroon = Macaroon.from_json(charmstoremacaroon) if charmstoremacaroon else None
-        self.url = url
+        self.applications = [ApplicationDeploy.from_json(o) for o in applications or []]
 
 
-class AddMachineParams(Type):
-    _toSchema = {'parentid': 'ParentId', 'containertype': 'ContainerType', 'instanceid': 'InstanceId', 'disks': 'Disks', 'jobs': 'Jobs', 'placement': 'Placement', 'addrs': 'Addrs', 'nonce': 'Nonce', 'constraints': 'Constraints', 'series': 'Series', 'hardwarecharacteristics': 'HardwareCharacteristics'}
-    _toPy = {'HardwareCharacteristics': 'hardwarecharacteristics', 'Constraints': 'constraints', 'InstanceId': 'instanceid', 'ContainerType': 'containertype', 'ParentId': 'parentid', 'Addrs': 'addrs', 'Placement': 'placement', 'Disks': 'disks', 'Nonce': 'nonce', 'Jobs': 'jobs', 'Series': 'series'}
-    def __init__(self, addrs=None, constraints=None, containertype=None, disks=None, hardwarecharacteristics=None, instanceid=None, jobs=None, nonce=None, parentid=None, placement=None, series=None):
+class Constraints(Type):
+    _toSchema = {'pool': 'Pool', 'size': 'Size', 'count': 'Count'}
+    _toPy = {'Count': 'count', 'Pool': 'pool', 'Size': 'size'}
+    def __init__(self, count=None, pool=None, size=None):
         '''
-        addrs : typing.Sequence[~Address]
-        constraints : Value
-        containertype : str
-        disks : typing.Sequence[~Constraints]
-        hardwarecharacteristics : HardwareCharacteristics
-        instanceid : str
-        jobs : typing.Sequence[str]
-        nonce : str
-        parentid : str
-        placement : Placement
-        series : str
+        count : int
+        pool : str
+        size : int
         '''
-        self.addrs = [Address.from_json(o) for o in addrs or []]
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.containertype = containertype
-        self.disks = [Constraints.from_json(o) for o in disks or []]
-        self.hardwarecharacteristics = HardwareCharacteristics.from_json(hardwarecharacteristics) if hardwarecharacteristics else None
-        self.instanceid = instanceid
-        self.jobs = jobs
-        self.nonce = nonce
-        self.parentid = parentid
-        self.placement = Placement.from_json(placement) if placement else None
-        self.series = series
+        self.count = count
+        self.pool = pool
+        self.size = size
 
 
-class AddMachines(Type):
-    _toSchema = {'machineparams': 'MachineParams'}
-    _toPy = {'MachineParams': 'machineparams'}
-    def __init__(self, machineparams=None):
+class DestroyApplicationUnits(Type):
+    _toSchema = {'unitnames': 'UnitNames'}
+    _toPy = {'UnitNames': 'unitnames'}
+    def __init__(self, unitnames=None):
         '''
-        machineparams : typing.Sequence[~AddMachineParams]
+        unitnames : typing.Sequence[str]
         '''
-        self.machineparams = [AddMachineParams.from_json(o) for o in machineparams or []]
+        self.unitnames = unitnames
 
 
-class AddMachinesResult(Type):
-    _toSchema = {'error': 'Error', 'machine': 'Machine'}
-    _toPy = {'Error': 'error', 'Machine': 'machine'}
-    def __init__(self, error=None, machine=None):
+class DestroyRelation(Type):
+    _toSchema = {'endpoints': 'Endpoints'}
+    _toPy = {'Endpoints': 'endpoints'}
+    def __init__(self, endpoints=None):
         '''
-        error : Error
-        machine : str
+        endpoints : typing.Sequence[str]
         '''
-        self.error = Error.from_json(error) if error else None
-        self.machine = machine
+        self.endpoints = endpoints
 
 
-class AddMachinesResults(Type):
-    _toSchema = {'machines': 'Machines'}
-    _toPy = {'Machines': 'machines'}
-    def __init__(self, machines=None):
+class GetApplicationConstraints(Type):
+    _toSchema = {'applicationname': 'ApplicationName'}
+    _toPy = {'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None):
         '''
-        machines : typing.Sequence[~AddMachinesResult]
+        applicationname : str
         '''
-        self.machines = [AddMachinesResult.from_json(o) for o in machines or []]
+        self.applicationname = applicationname
 
 
-class Address(Type):
-    _toSchema = {'spacename': 'SpaceName', 'value': 'Value', 'scope': 'Scope', 'type_': 'Type'}
-    _toPy = {'SpaceName': 'spacename', 'Type': 'type_', 'Scope': 'scope', 'Value': 'value'}
-    def __init__(self, scope=None, spacename=None, type_=None, value=None):
+class GetConstraintsResults(Type):
+    _toSchema = {'root_disk': 'root-disk', 'mem': 'mem', 'container': 'container', 'virt_type': 'virt-type', 'cpu_power': 'cpu-power', 'cpu_cores': 'cpu-cores', 'tags': 'tags', 'arch': 'arch', 'spaces': 'spaces', 'instance_type': 'instance-type'}
+    _toPy = {'spaces': 'spaces', 'container': 'container', 'cpu-cores': 'cpu_cores', 'instance-type': 'instance_type', 'mem': 'mem', 'cpu-power': 'cpu_power', 'tags': 'tags', 'arch': 'arch', 'root-disk': 'root_disk', 'virt-type': 'virt_type'}
+    def __init__(self, arch=None, container=None, cpu_cores=None, cpu_power=None, instance_type=None, mem=None, root_disk=None, spaces=None, tags=None, virt_type=None):
+        '''
+        arch : str
+        container : str
+        cpu_cores : int
+        cpu_power : int
+        instance_type : str
+        mem : int
+        root_disk : int
+        spaces : typing.Sequence[str]
+        tags : typing.Sequence[str]
+        virt_type : str
+        '''
+        self.arch = arch
+        self.container = container
+        self.cpu_cores = cpu_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 Placement(Type):
+    _toSchema = {'directive': 'Directive', 'scope': 'Scope'}
+    _toPy = {'Directive': 'directive', 'Scope': 'scope'}
+    def __init__(self, directive=None, scope=None):
         '''
+        directive : str
         scope : str
-        spacename : str
-        type_ : str
-        value : str
         '''
+        self.directive = directive
         self.scope = scope
-        self.spacename = spacename
-        self.type_ = type_
-        self.value = value
 
 
-class AgentVersionResult(Type):
-    _toSchema = {'minor': 'Minor', 'major': 'Major', 'tag': 'Tag', 'patch': 'Patch', 'build': 'Build'}
-    _toPy = {'Tag': 'tag', 'Build': 'build', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch'}
-    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None):
+class Relation(Type):
+    _toSchema = {'role': 'Role', 'limit': 'Limit', 'optional': 'Optional', 'name': 'Name', 'scope': 'Scope', 'interface': 'Interface'}
+    _toPy = {'Name': 'name', 'Role': 'role', 'Scope': 'scope', 'Limit': 'limit', 'Interface': 'interface', 'Optional': 'optional'}
+    def __init__(self, interface=None, limit=None, name=None, optional=None, role=None, scope=None):
         '''
-        build : int
-        major : int
-        minor : int
-        patch : int
-        tag : str
+        interface : str
+        limit : int
+        name : str
+        optional : bool
+        role : str
+        scope : str
         '''
-        self.build = build
-        self.major = major
-        self.minor = minor
-        self.patch = patch
-        self.tag = tag
+        self.interface = interface
+        self.limit = limit
+        self.name = name
+        self.optional = optional
+        self.role = role
+        self.scope = scope
 
 
-class AllWatcherId(Type):
-    _toSchema = {'allwatcherid': 'AllWatcherId'}
-    _toPy = {'AllWatcherId': 'allwatcherid'}
-    def __init__(self, allwatcherid=None):
+class SetConstraints(Type):
+    _toSchema = {'constraints': 'Constraints', 'applicationname': 'ApplicationName'}
+    _toPy = {'Constraints': 'constraints', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, constraints=None):
         '''
-        allwatcherid : str
+        applicationname : str
+        constraints : Value
         '''
-        self.allwatcherid = allwatcherid
+        self.applicationname = applicationname
+        self.constraints = Value.from_json(constraints) if constraints else None
 
 
-class Binary(Type):
-    _toSchema = {'series': 'Series', 'arch': 'Arch', 'number': 'Number'}
-    _toPy = {'Arch': 'arch', 'Number': 'number', 'Series': 'series'}
-    def __init__(self, arch=None, number=None, series=None):
+class StringResult(Type):
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
+    def __init__(self, error=None, result=None):
+        '''
+        error : Error
+        result : str
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.result = result
+
+
+class Value(Type):
+    _toSchema = {'root_disk': 'root-disk', 'mem': 'mem', 'container': 'container', 'virt_type': 'virt-type', 'cpu_power': 'cpu-power', 'cpu_cores': 'cpu-cores', 'tags': 'tags', 'arch': 'arch', 'spaces': 'spaces', 'instance_type': 'instance-type'}
+    _toPy = {'spaces': 'spaces', 'container': 'container', 'cpu-cores': 'cpu_cores', 'instance-type': 'instance_type', 'mem': 'mem', 'cpu-power': 'cpu_power', 'tags': 'tags', 'arch': 'arch', 'root-disk': 'root_disk', 'virt-type': 'virt_type'}
+    def __init__(self, arch=None, container=None, cpu_cores=None, cpu_power=None, instance_type=None, mem=None, root_disk=None, spaces=None, tags=None, virt_type=None):
         '''
         arch : str
-        number : Number
-        series : str
+        container : str
+        cpu_cores : int
+        cpu_power : int
+        instance_type : str
+        mem : int
+        root_disk : int
+        spaces : typing.Sequence[str]
+        tags : typing.Sequence[str]
+        virt_type : str
         '''
         self.arch = arch
-        self.number = Number.from_json(number) if number else None
-        self.series = series
+        self.container = container
+        self.cpu_cores = cpu_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 BundleChangesChange(Type):
-    _toSchema = {'requires': 'requires', 'args': 'args', 'id_': 'id', 'method': 'method'}
-    _toPy = {'args': 'args', 'id': 'id_', 'method': 'method', 'requires': 'requires'}
-    def __init__(self, args=None, id_=None, method=None, requires=None):
+class StringsWatchResult(Type):
+    _toSchema = {'changes': 'Changes', 'stringswatcherid': 'StringsWatcherId', 'error': 'Error'}
+    _toPy = {'Changes': 'changes', 'Error': 'error', 'StringsWatcherId': 'stringswatcherid'}
+    def __init__(self, changes=None, error=None, stringswatcherid=None):
+        '''
+        changes : typing.Sequence[str]
+        error : Error
+        stringswatcherid : str
+        '''
+        self.changes = changes
+        self.error = Error.from_json(error) if error else None
+        self.stringswatcherid = stringswatcherid
+
+
+class BackupsCreateArgs(Type):
+    _toSchema = {'notes': 'Notes'}
+    _toPy = {'Notes': 'notes'}
+    def __init__(self, notes=None):
+        '''
+        notes : str
+        '''
+        self.notes = notes
+
+
+class BackupsInfoArgs(Type):
+    _toSchema = {'id_': 'ID'}
+    _toPy = {'ID': 'id_'}
+    def __init__(self, id_=None):
         '''
-        args : typing.Sequence[typing.Any]
         id_ : str
-        method : str
-        requires : typing.Sequence[str]
         '''
-        self.args = args
         self.id_ = id_
-        self.method = method
-        self.requires = requires
 
 
-class Constraints(Type):
-    _toSchema = {'pool': 'Pool', 'count': 'Count', 'size': 'Size'}
-    _toPy = {'Pool': 'pool', 'Count': 'count', 'Size': 'size'}
-    def __init__(self, count=None, pool=None, size=None):
+class BackupsListArgs(Type):
+    _toSchema = {}
+    _toPy = {}
+    def __init__(self):
         '''
-        count : int
-        pool : str
-        size : int
+
         '''
-        self.count = count
-        self.pool = pool
-        self.size = size
+        pass
 
 
-class DestroyMachines(Type):
-    _toSchema = {'force': 'Force', 'machinenames': 'MachineNames'}
-    _toPy = {'MachineNames': 'machinenames', 'Force': 'force'}
-    def __init__(self, force=None, machinenames=None):
+class BackupsListResult(Type):
+    _toSchema = {'list_': 'List'}
+    _toPy = {'List': 'list_'}
+    def __init__(self, list_=None):
         '''
-        force : bool
-        machinenames : typing.Sequence[str]
+        list_ : typing.Sequence[~BackupsMetadataResult]
         '''
-        self.force = force
-        self.machinenames = machinenames
+        self.list_ = [BackupsMetadataResult.from_json(o) for o in list_ or []]
 
 
-class DetailedStatus(Type):
-    _toSchema = {'info': 'Info', 'status': 'Status', 'version': 'Version', 'data': 'Data', 'kind': 'Kind', 'since': 'Since', 'err': 'Err', 'life': 'Life'}
-    _toPy = {'Status': 'status', 'Since': 'since', 'Version': 'version', 'Err': 'err', 'Info': 'info', 'Data': 'data', 'Life': 'life', 'Kind': 'kind'}
-    def __init__(self, data=None, err=None, info=None, kind=None, life=None, since=None, status=None, version=None):
+class BackupsMetadataResult(Type):
+    _toSchema = {'checksumformat': 'ChecksumFormat', 'started': 'Started', 'stored': 'Stored', 'cacert': 'CACert', 'version': 'Version', 'machine': 'Machine', 'checksum': 'Checksum', 'series': 'Series', 'id_': 'ID', 'hostname': 'Hostname', 'size': 'Size', 'finished': 'Finished', 'caprivatekey': 'CAPrivateKey', 'model': 'Model', 'notes': 'Notes'}
+    _toPy = {'Finished': 'finished', 'ChecksumFormat': 'checksumformat', 'CAPrivateKey': 'caprivatekey', 'Started': 'started', 'ID': 'id_', 'Notes': 'notes', 'Stored': 'stored', 'Hostname': 'hostname', 'Model': 'model', 'Size': 'size', 'Checksum': 'checksum', 'Machine': 'machine', 'Version': 'version', 'CACert': 'cacert', 'Series': 'series'}
+    def __init__(self, cacert=None, caprivatekey=None, checksum=None, checksumformat=None, finished=None, hostname=None, id_=None, machine=None, model=None, notes=None, series=None, size=None, started=None, stored=None, version=None):
         '''
-        data : typing.Mapping[str, typing.Any]
-        err : typing.Mapping[str, typing.Any]
-        info : str
-        kind : str
-        life : str
-        since : str
-        status : str
-        version : str
+        cacert : str
+        caprivatekey : str
+        checksum : str
+        checksumformat : str
+        finished : str
+        hostname : str
+        id_ : str
+        machine : str
+        model : str
+        notes : str
+        series : str
+        size : int
+        started : str
+        stored : str
+        version : Number
         '''
-        self.data = data
-        self.err = err
-        self.info = info
-        self.kind = kind
-        self.life = life
-        self.since = since
-        self.status = status
-        self.version = version
+        self.cacert = cacert
+        self.caprivatekey = caprivatekey
+        self.checksum = checksum
+        self.checksumformat = checksumformat
+        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 EndpointStatus(Type):
-    _toSchema = {'role': 'Role', 'subordinate': 'Subordinate', 'servicename': 'ServiceName', 'name': 'Name'}
-    _toPy = {'ServiceName': 'servicename', 'Subordinate': 'subordinate', 'Role': 'role', 'Name': 'name'}
-    def __init__(self, name=None, role=None, servicename=None, subordinate=None):
+class BackupsRemoveArgs(Type):
+    _toSchema = {'id_': 'ID'}
+    _toPy = {'ID': 'id_'}
+    def __init__(self, id_=None):
         '''
-        name : str
-        role : str
-        servicename : str
-        subordinate : bool
+        id_ : str
         '''
-        self.name = name
-        self.role = role
-        self.servicename = servicename
-        self.subordinate = subordinate
+        self.id_ = id_
 
 
-class EntityStatus(Type):
-    _toSchema = {'info': 'Info', 'status': 'Status', 'since': 'Since', 'data': 'Data'}
-    _toPy = {'Info': 'info', 'Since': 'since', 'Status': 'status', 'Data': 'data'}
-    def __init__(self, data=None, info=None, since=None, status=None):
+class Number(Type):
+    _toSchema = {'minor': 'Minor', 'major': 'Major', 'patch': 'Patch', 'tag': 'Tag', 'build': 'Build'}
+    _toPy = {'Patch': 'patch', 'Major': 'major', 'Minor': 'minor', 'Tag': 'tag', 'Build': 'build'}
+    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None):
         '''
-        data : typing.Mapping[str, typing.Any]
-        info : str
-        since : str
-        status : str
+        build : int
+        major : int
+        minor : int
+        patch : int
+        tag : str
         '''
-        self.data = data
-        self.info = info
-        self.since = since
-        self.status = status
+        self.build = build
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+        self.tag = tag
 
 
-class FindToolsParams(Type):
-    _toSchema = {'minorversion': 'MinorVersion', 'arch': 'Arch', 'number': 'Number', 'majorversion': 'MajorVersion', 'series': 'Series'}
-    _toPy = {'Arch': 'arch', 'MinorVersion': 'minorversion', 'MajorVersion': 'majorversion', 'Number': 'number', 'Series': 'series'}
-    def __init__(self, arch=None, majorversion=None, minorversion=None, number=None, series=None):
+class RestoreArgs(Type):
+    _toSchema = {'backupid': 'BackupId'}
+    _toPy = {'BackupId': 'backupid'}
+    def __init__(self, backupid=None):
         '''
-        arch : str
-        majorversion : int
-        minorversion : int
-        number : Number
-        series : str
+        backupid : str
         '''
-        self.arch = arch
-        self.majorversion = majorversion
-        self.minorversion = minorversion
-        self.number = Number.from_json(number) if number else None
-        self.series = series
+        self.backupid = backupid
 
 
-class FindToolsResult(Type):
-    _toSchema = {'error': 'Error', 'list_': 'List'}
-    _toPy = {'Error': 'error', 'List': 'list_'}
-    def __init__(self, error=None, list_=None):
+class Block(Type):
+    _toSchema = {'type_': 'type', 'id_': 'id', 'message': 'message', 'tag': 'tag'}
+    _toPy = {'type': 'type_', 'id': 'id_', 'message': 'message', 'tag': 'tag'}
+    def __init__(self, id_=None, message=None, tag=None, type_=None):
+        '''
+        id_ : str
+        message : str
+        tag : str
+        type_ : str
+        '''
+        self.id_ = id_
+        self.message = message
+        self.tag = tag
+        self.type_ = type_
+
+
+class BlockResult(Type):
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
         error : Error
-        list_ : typing.Sequence[~Tools]
+        result : Block
         '''
         self.error = Error.from_json(error) if error else None
-        self.list_ = [Tools.from_json(o) for o in list_ or []]
+        self.result = Block.from_json(result) if result else None
 
 
-class FullStatus(Type):
-    _toSchema = {'machines': 'Machines', 'modelname': 'ModelName', 'availableversion': 'AvailableVersion', 'relations': 'Relations', 'services': 'Services'}
-    _toPy = {'Services': 'services', 'Relations': 'relations', 'AvailableVersion': 'availableversion', 'ModelName': 'modelname', 'Machines': 'machines'}
-    def __init__(self, availableversion=None, machines=None, modelname=None, relations=None, services=None):
+class BlockResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
         '''
-        availableversion : str
-        machines : typing.Mapping[str, ~MachineStatus]
-        modelname : str
-        relations : typing.Sequence[~RelationStatus]
-        services : typing.Mapping[str, ~ServiceStatus]
+        results : typing.Sequence[~BlockResult]
         '''
-        self.availableversion = availableversion
-        self.machines = {k: MachineStatus.from_json(v) for k, v in (machines or dict()).items()}
-        self.modelname = modelname
-        self.relations = [RelationStatus.from_json(o) for o in relations or []]
-        self.services = {k: ServiceStatus.from_json(v) for k, v in (services or dict()).items()}
+        self.results = [BlockResult.from_json(o) for o in results or []]
 
 
-class GetBundleChangesParams(Type):
-    _toSchema = {'yaml': 'yaml'}
-    _toPy = {'yaml': 'yaml'}
-    def __init__(self, yaml=None):
+class BlockSwitchParams(Type):
+    _toSchema = {'type_': 'type', 'message': 'message'}
+    _toPy = {'type': 'type_', 'message': 'message'}
+    def __init__(self, message=None, type_=None):
         '''
-        yaml : str
+        message : str
+        type_ : str
         '''
-        self.yaml = yaml
+        self.message = message
+        self.type_ = type_
 
 
-class GetBundleChangesResults(Type):
-    _toSchema = {'errors': 'errors', 'changes': 'changes'}
-    _toPy = {'errors': 'errors', 'changes': 'changes'}
-    def __init__(self, changes=None, errors=None):
+class CharmInfo(Type):
+    _toSchema = {'charmurl': 'CharmURL'}
+    _toPy = {'CharmURL': 'charmurl'}
+    def __init__(self, charmurl=None):
         '''
-        changes : typing.Sequence[~BundleChangesChange]
-        errors : typing.Sequence[str]
+        charmurl : str
         '''
-        self.changes = [BundleChangesChange.from_json(o) for o in changes or []]
-        self.errors = errors
+        self.charmurl = charmurl
 
 
-class GetConstraintsResults(Type):
-    _toSchema = {'virt_type': 'virt-type', 'mem': 'mem', 'container': 'container', 'instance_type': 'instance-type', 'root_disk': 'root-disk', 'tags': 'tags', 'arch': 'arch', 'cpu_power': 'cpu-power', 'cpu_cores': 'cpu-cores', 'spaces': 'spaces'}
-    _toPy = {'instance-type': 'instance_type', 'root-disk': 'root_disk', 'cpu-power': 'cpu_power', 'mem': 'mem', 'tags': 'tags', 'arch': 'arch', 'spaces': 'spaces', 'virt-type': 'virt_type', 'container': 'container', 'cpu-cores': 'cpu_cores'}
-    def __init__(self, arch=None, container=None, cpu_cores=None, cpu_power=None, instance_type=None, mem=None, root_disk=None, spaces=None, tags=None, virt_type=None):
+class CharmsList(Type):
+    _toSchema = {'names': 'Names'}
+    _toPy = {'Names': 'names'}
+    def __init__(self, names=None):
         '''
-        arch : str
-        container : str
-        cpu_cores : int
-        cpu_power : int
-        instance_type : str
-        mem : int
-        root_disk : int
-        spaces : typing.Sequence[str]
-        tags : typing.Sequence[str]
-        virt_type : str
+        names : typing.Sequence[str]
         '''
-        self.arch = arch
-        self.container = container
-        self.cpu_cores = cpu_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
+        self.names = names
 
 
-class HardwareCharacteristics(Type):
-    _toSchema = {'tags': 'Tags', 'rootdisk': 'RootDisk', 'arch': 'Arch', 'cpupower': 'CpuPower', 'availabilityzone': 'AvailabilityZone', 'cpucores': 'CpuCores', 'mem': 'Mem'}
-    _toPy = {'RootDisk': 'rootdisk', 'Arch': 'arch', 'CpuCores': 'cpucores', 'Tags': 'tags', 'AvailabilityZone': 'availabilityzone', 'CpuPower': 'cpupower', 'Mem': 'mem'}
-    def __init__(self, arch=None, availabilityzone=None, cpucores=None, cpupower=None, mem=None, rootdisk=None, tags=None):
+class CharmsListResult(Type):
+    _toSchema = {'charmurls': 'CharmURLs'}
+    _toPy = {'CharmURLs': 'charmurls'}
+    def __init__(self, charmurls=None):
         '''
-        arch : str
-        availabilityzone : str
-        cpucores : int
-        cpupower : int
-        mem : int
-        rootdisk : int
-        tags : typing.Sequence[str]
+        charmurls : typing.Sequence[str]
         '''
-        self.arch = arch
-        self.availabilityzone = availabilityzone
-        self.cpucores = cpucores
-        self.cpupower = cpupower
-        self.mem = mem
-        self.rootdisk = rootdisk
-        self.tags = tags
+        self.charmurls = charmurls
 
 
-class HostPort(Type):
-    _toSchema = {'address': 'Address', 'port': 'Port'}
-    _toPy = {'Port': 'port', 'Address': 'address'}
-    def __init__(self, address=None, port=None):
+class IsMeteredResult(Type):
+    _toSchema = {'metered': 'Metered'}
+    _toPy = {'Metered': 'metered'}
+    def __init__(self, metered=None):
         '''
-        address : Address
-        port : int
+        metered : bool
         '''
-        self.address = Address.from_json(address) if address else None
-        self.port = port
+        self.metered = metered
 
 
-class MachineStatus(Type):
-    _toSchema = {'series': 'Series', 'jobs': 'Jobs', 'instanceid': 'InstanceId', 'instancestatus': 'InstanceStatus', 'hasvote': 'HasVote', 'wantsvote': 'WantsVote', 'containers': 'Containers', 'agentstatus': 'AgentStatus', 'dnsname': 'DNSName', 'hardware': 'Hardware', 'id_': 'Id'}
-    _toPy = {'AgentStatus': 'agentstatus', 'InstanceId': 'instanceid', 'HasVote': 'hasvote', 'Series': 'series', 'Hardware': 'hardware', 'DNSName': 'dnsname', 'WantsVote': 'wantsvote', 'Id': 'id_', 'Jobs': 'jobs', 'InstanceStatus': 'instancestatus', 'Containers': 'containers'}
-    def __init__(self, agentstatus=None, containers=None, dnsname=None, hardware=None, hasvote=None, id_=None, instanceid=None, instancestatus=None, jobs=None, series=None, wantsvote=None):
+class APIHostPortsResult(Type):
+    _toSchema = {'servers': 'Servers'}
+    _toPy = {'Servers': 'servers'}
+    def __init__(self, servers=None):
         '''
-        agentstatus : DetailedStatus
-        containers : typing.Mapping[str, ~MachineStatus]
-        dnsname : str
-        hardware : str
-        hasvote : bool
-        id_ : str
-        instanceid : str
-        instancestatus : DetailedStatus
-        jobs : typing.Sequence[str]
-        series : str
-        wantsvote : bool
+        servers : typing.Sequence[~HostPort]
         '''
-        self.agentstatus = DetailedStatus.from_json(agentstatus) if agentstatus else None
-        self.containers = {k: MachineStatus.from_json(v) for k, v in (containers or dict()).items()}
-        self.dnsname = dnsname
-        self.hardware = hardware
-        self.hasvote = hasvote
-        self.id_ = id_
-        self.instanceid = instanceid
-        self.instancestatus = DetailedStatus.from_json(instancestatus) if instancestatus else None
-        self.jobs = jobs
-        self.series = series
-        self.wantsvote = wantsvote
+        self.servers = [HostPort.from_json(o) for o in servers or []]
 
 
-class MeterStatus(Type):
-    _toSchema = {'message': 'Message', 'color': 'Color'}
-    _toPy = {'Message': 'message', 'Color': 'color'}
-    def __init__(self, color=None, message=None):
-        '''
-        color : str
-        message : str
-        '''
-        self.color = color
-        self.message = message
-
-
-class ModelConfigResults(Type):
-    _toSchema = {'config': 'Config'}
-    _toPy = {'Config': 'config'}
-    def __init__(self, config=None):
-        '''
-        config : typing.Mapping[str, typing.Any]
-        '''
-        self.config = config
-
-
-class ModelInfo(Type):
-    _toSchema = {'users': 'Users', 'status': 'Status', 'serveruuid': 'ServerUUID', 'uuid': 'UUID', 'name': 'Name', 'providertype': 'ProviderType', 'defaultseries': 'DefaultSeries', 'ownertag': 'OwnerTag', 'life': 'Life'}
-    _toPy = {'Status': 'status', 'UUID': 'uuid', 'OwnerTag': 'ownertag', 'Name': 'name', 'ServerUUID': 'serveruuid', 'DefaultSeries': 'defaultseries', 'Life': 'life', 'Users': 'users', 'ProviderType': 'providertype'}
-    def __init__(self, defaultseries=None, life=None, name=None, ownertag=None, providertype=None, serveruuid=None, status=None, uuid=None, users=None):
+class AddCharm(Type):
+    _toSchema = {'url': 'URL', 'channel': 'Channel'}
+    _toPy = {'URL': 'url', 'Channel': 'channel'}
+    def __init__(self, channel=None, url=None):
         '''
-        defaultseries : str
-        life : str
-        name : str
-        ownertag : str
-        providertype : str
-        serveruuid : str
-        status : EntityStatus
-        uuid : str
-        users : typing.Sequence[~ModelUserInfo]
+        channel : str
+        url : str
         '''
-        self.defaultseries = defaultseries
-        self.life = life
-        self.name = name
-        self.ownertag = ownertag
-        self.providertype = providertype
-        self.serveruuid = serveruuid
-        self.status = EntityStatus.from_json(status) if status else None
-        self.uuid = uuid
-        self.users = [ModelUserInfo.from_json(o) for o in users or []]
+        self.channel = channel
+        self.url = url
 
 
-class ModelSet(Type):
-    _toSchema = {'config': 'Config'}
-    _toPy = {'Config': 'config'}
-    def __init__(self, config=None):
+class AddCharmWithAuthorization(Type):
+    _toSchema = {'url': 'URL', 'channel': 'Channel', 'charmstoremacaroon': 'CharmStoreMacaroon'}
+    _toPy = {'URL': 'url', 'CharmStoreMacaroon': 'charmstoremacaroon', 'Channel': 'channel'}
+    def __init__(self, channel=None, charmstoremacaroon=None, url=None):
         '''
-        config : typing.Mapping[str, typing.Any]
+        channel : str
+        charmstoremacaroon : Macaroon
+        url : str
         '''
-        self.config = config
+        self.channel = channel
+        self.charmstoremacaroon = Macaroon.from_json(charmstoremacaroon) if charmstoremacaroon else None
+        self.url = url
 
 
-class ModelUnset(Type):
-    _toSchema = {'keys': 'Keys'}
-    _toPy = {'Keys': 'keys'}
-    def __init__(self, keys=None):
+class AddMachineParams(Type):
+    _toSchema = {'jobs': 'Jobs', 'series': 'Series', 'hardwarecharacteristics': 'HardwareCharacteristics', 'nonce': 'Nonce', 'containertype': 'ContainerType', 'constraints': 'Constraints', 'disks': 'Disks', 'placement': 'Placement', 'instanceid': 'InstanceId', 'parentid': 'ParentId', 'addrs': 'Addrs'}
+    _toPy = {'Constraints': 'constraints', 'InstanceId': 'instanceid', 'ContainerType': 'containertype', 'Nonce': 'nonce', 'Disks': 'disks', 'Addrs': 'addrs', 'HardwareCharacteristics': 'hardwarecharacteristics', 'Series': 'series', 'ParentId': 'parentid', 'Placement': 'placement', 'Jobs': 'jobs'}
+    def __init__(self, addrs=None, constraints=None, containertype=None, disks=None, hardwarecharacteristics=None, instanceid=None, jobs=None, nonce=None, parentid=None, placement=None, series=None):
         '''
-        keys : typing.Sequence[str]
+        addrs : typing.Sequence[~Address]
+        constraints : Value
+        containertype : str
+        disks : typing.Sequence[~Constraints]
+        hardwarecharacteristics : HardwareCharacteristics
+        instanceid : str
+        jobs : typing.Sequence[str]
+        nonce : str
+        parentid : str
+        placement : Placement
+        series : str
         '''
-        self.keys = keys
+        self.addrs = [Address.from_json(o) for o in addrs or []]
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.containertype = containertype
+        self.disks = [Constraints.from_json(o) for o in disks or []]
+        self.hardwarecharacteristics = HardwareCharacteristics.from_json(hardwarecharacteristics) if hardwarecharacteristics else None
+        self.instanceid = instanceid
+        self.jobs = jobs
+        self.nonce = nonce
+        self.parentid = parentid
+        self.placement = Placement.from_json(placement) if placement else None
+        self.series = series
 
 
-class ModelUserInfo(Type):
-    _toSchema = {'displayname': 'displayname', 'access': 'access', 'user': 'user', 'lastconnection': 'lastconnection'}
-    _toPy = {'displayname': 'displayname', 'access': 'access', 'user': 'user', 'lastconnection': 'lastconnection'}
-    def __init__(self, access=None, displayname=None, lastconnection=None, user=None):
+class AddMachines(Type):
+    _toSchema = {'machineparams': 'MachineParams'}
+    _toPy = {'MachineParams': 'machineparams'}
+    def __init__(self, machineparams=None):
         '''
-        access : str
-        displayname : str
-        lastconnection : str
-        user : str
+        machineparams : typing.Sequence[~AddMachineParams]
         '''
-        self.access = access
-        self.displayname = displayname
-        self.lastconnection = lastconnection
-        self.user = user
+        self.machineparams = [AddMachineParams.from_json(o) for o in machineparams or []]
 
 
-class ModelUserInfoResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
-    def __init__(self, error=None, result=None):
+class AddMachinesResult(Type):
+    _toSchema = {'error': 'Error', 'machine': 'Machine'}
+    _toPy = {'Error': 'error', 'Machine': 'machine'}
+    def __init__(self, error=None, machine=None):
         '''
         error : Error
-        result : ModelUserInfo
+        machine : str
         '''
         self.error = Error.from_json(error) if error else None
-        self.result = ModelUserInfo.from_json(result) if result else None
+        self.machine = machine
 
 
-class ModelUserInfoResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class AddMachinesResults(Type):
+    _toSchema = {'machines': 'Machines'}
+    _toPy = {'Machines': 'machines'}
+    def __init__(self, machines=None):
         '''
-        results : typing.Sequence[~ModelUserInfoResult]
+        machines : typing.Sequence[~AddMachinesResult]
         '''
-        self.results = [ModelUserInfoResult.from_json(o) for o in results or []]
+        self.machines = [AddMachinesResult.from_json(o) for o in machines or []]
 
 
-class Placement(Type):
-    _toSchema = {'scope': 'Scope', 'directive': 'Directive'}
-    _toPy = {'Directive': 'directive', 'Scope': 'scope'}
-    def __init__(self, directive=None, scope=None):
+class Address(Type):
+    _toSchema = {'value': 'Value', 'type_': 'Type', 'spacename': 'SpaceName', 'scope': 'Scope'}
+    _toPy = {'Value': 'value', 'Type': 'type_', 'SpaceName': 'spacename', 'Scope': 'scope'}
+    def __init__(self, scope=None, spacename=None, type_=None, value=None):
         '''
-        directive : str
         scope : str
+        spacename : str
+        type_ : str
+        value : str
         '''
-        self.directive = directive
         self.scope = scope
+        self.spacename = spacename
+        self.type_ = type_
+        self.value = value
 
 
-class PrivateAddress(Type):
-    _toSchema = {'target': 'Target'}
-    _toPy = {'Target': 'target'}
-    def __init__(self, target=None):
+class AgentVersionResult(Type):
+    _toSchema = {'minor': 'Minor', 'major': 'Major', 'patch': 'Patch', 'tag': 'Tag', 'build': 'Build'}
+    _toPy = {'Patch': 'patch', 'Major': 'major', 'Minor': 'minor', 'Tag': 'tag', 'Build': 'build'}
+    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None):
         '''
-        target : str
+        build : int
+        major : int
+        minor : int
+        patch : int
+        tag : str
         '''
-        self.target = target
+        self.build = build
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+        self.tag = tag
 
 
-class PrivateAddressResults(Type):
-    _toSchema = {'privateaddress': 'PrivateAddress'}
-    _toPy = {'PrivateAddress': 'privateaddress'}
-    def __init__(self, privateaddress=None):
+class AllWatcherId(Type):
+    _toSchema = {'allwatcherid': 'AllWatcherId'}
+    _toPy = {'AllWatcherId': 'allwatcherid'}
+    def __init__(self, allwatcherid=None):
         '''
-        privateaddress : str
+        allwatcherid : str
         '''
-        self.privateaddress = privateaddress
+        self.allwatcherid = allwatcherid
 
 
-class ProvisioningScriptParams(Type):
-    _toSchema = {'machineid': 'MachineId', 'disablepackagecommands': 'DisablePackageCommands', 'nonce': 'Nonce', 'datadir': 'DataDir'}
-    _toPy = {'Nonce': 'nonce', 'DisablePackageCommands': 'disablepackagecommands', 'MachineId': 'machineid', 'DataDir': 'datadir'}
-    def __init__(self, datadir=None, disablepackagecommands=None, machineid=None, nonce=None):
+class ApplicationStatus(Type):
+    _toSchema = {'charm': 'Charm', 'exposed': 'Exposed', 'err': 'Err', 'meterstatuses': 'MeterStatuses', 'relations': 'Relations', 'units': 'Units', 'life': 'Life', 'canupgradeto': 'CanUpgradeTo', 'subordinateto': 'SubordinateTo', 'status': 'Status'}
+    _toPy = {'Charm': 'charm', 'Err': 'err', 'Units': 'units', 'MeterStatuses': 'meterstatuses', 'CanUpgradeTo': 'canupgradeto', 'Status': 'status', 'SubordinateTo': 'subordinateto', 'Life': 'life', 'Relations': 'relations', 'Exposed': 'exposed'}
+    def __init__(self, canupgradeto=None, charm=None, err=None, exposed=None, life=None, meterstatuses=None, relations=None, status=None, subordinateto=None, units=None):
         '''
-        datadir : str
-        disablepackagecommands : bool
-        machineid : str
-        nonce : str
+        canupgradeto : str
+        charm : str
+        err : typing.Mapping[str, typing.Any]
+        exposed : bool
+        life : str
+        meterstatuses : typing.Mapping[str, ~MeterStatus]
+        relations : typing.Sequence[str]
+        status : DetailedStatus
+        subordinateto : typing.Sequence[str]
+        units : typing.Mapping[str, ~UnitStatus]
         '''
-        self.datadir = datadir
-        self.disablepackagecommands = disablepackagecommands
-        self.machineid = machineid
-        self.nonce = nonce
+        self.canupgradeto = canupgradeto
+        self.charm = charm
+        self.err = err
+        self.exposed = exposed
+        self.life = life
+        self.meterstatuses = {k: MeterStatus.from_json(v) for k, v in (meterstatuses or dict()).items()}
+        self.relations = relations
+        self.status = DetailedStatus.from_json(status) if status else None
+        self.subordinateto = subordinateto
+        self.units = {k: UnitStatus.from_json(v) for k, v in (units or dict()).items()}
 
 
-class ProvisioningScriptResult(Type):
-    _toSchema = {'script': 'Script'}
-    _toPy = {'Script': 'script'}
-    def __init__(self, script=None):
+class Binary(Type):
+    _toSchema = {'number': 'Number', 'series': 'Series', 'arch': 'Arch'}
+    _toPy = {'Number': 'number', 'Arch': 'arch', 'Series': 'series'}
+    def __init__(self, arch=None, number=None, series=None):
         '''
-        script : str
+        arch : str
+        number : Number
+        series : str
         '''
-        self.script = script
+        self.arch = arch
+        self.number = Number.from_json(number) if number else None
+        self.series = series
 
 
-class PublicAddress(Type):
-    _toSchema = {'target': 'Target'}
-    _toPy = {'Target': 'target'}
-    def __init__(self, target=None):
+class BundleChangesChange(Type):
+    _toSchema = {'method': 'method', 'args': 'args', 'requires': 'requires', 'id_': 'id'}
+    _toPy = {'method': 'method', 'id': 'id_', 'args': 'args', 'requires': 'requires'}
+    def __init__(self, args=None, id_=None, method=None, requires=None):
         '''
-        target : str
+        args : typing.Sequence[typing.Any]
+        id_ : str
+        method : str
+        requires : typing.Sequence[str]
         '''
-        self.target = target
+        self.args = args
+        self.id_ = id_
+        self.method = method
+        self.requires = requires
 
 
-class PublicAddressResults(Type):
-    _toSchema = {'publicaddress': 'PublicAddress'}
-    _toPy = {'PublicAddress': 'publicaddress'}
-    def __init__(self, publicaddress=None):
+class DestroyMachines(Type):
+    _toSchema = {'force': 'Force', 'machinenames': 'MachineNames'}
+    _toPy = {'Force': 'force', 'MachineNames': 'machinenames'}
+    def __init__(self, force=None, machinenames=None):
         '''
-        publicaddress : str
+        force : bool
+        machinenames : typing.Sequence[str]
         '''
-        self.publicaddress = publicaddress
+        self.force = force
+        self.machinenames = machinenames
 
 
-class RelationStatus(Type):
-    _toSchema = {'key': 'Key', 'interface': 'Interface', 'scope': 'Scope', 'endpoints': 'Endpoints', 'id_': 'Id'}
-    _toPy = {'Key': 'key', 'Id': 'id_', 'Scope': 'scope', 'Interface': 'interface', 'Endpoints': 'endpoints'}
-    def __init__(self, endpoints=None, id_=None, interface=None, key=None, scope=None):
-        '''
-        endpoints : typing.Sequence[~EndpointStatus]
-        id_ : int
-        interface : str
-        key : str
-        scope : str
+class DetailedStatus(Type):
+    _toSchema = {'since': 'Since', 'data': 'Data', 'life': 'Life', 'version': 'Version', 'err': 'Err', 'kind': 'Kind', 'info': 'Info', 'status': 'Status'}
+    _toPy = {'Err': 'err', 'Data': 'data', 'Since': 'since', 'Status': 'status', 'Info': 'info', 'Life': 'life', 'Version': 'version', 'Kind': 'kind'}
+    def __init__(self, data=None, err=None, info=None, kind=None, life=None, since=None, status=None, version=None):
         '''
-        self.endpoints = [EndpointStatus.from_json(o) for o in endpoints or []]
-        self.id_ = id_
-        self.interface = interface
-        self.key = key
-        self.scope = scope
+        data : typing.Mapping[str, typing.Any]
+        err : typing.Mapping[str, typing.Any]
+        info : str
+        kind : str
+        life : str
+        since : str
+        status : str
+        version : str
+        '''
+        self.data = data
+        self.err = err
+        self.info = info
+        self.kind = kind
+        self.life = life
+        self.since = since
+        self.status = status
+        self.version = version
 
 
-class ResolveCharmResult(Type):
-    _toSchema = {'error': 'Error', 'url': 'URL'}
-    _toPy = {'Error': 'error', 'URL': 'url'}
-    def __init__(self, error=None, url=None):
+class EndpointStatus(Type):
+    _toSchema = {'role': 'Role', 'subordinate': 'Subordinate', 'applicationname': 'ApplicationName', 'name': 'Name'}
+    _toPy = {'Subordinate': 'subordinate', 'Name': 'name', 'Role': 'role', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, name=None, role=None, subordinate=None):
         '''
-        error : str
-        url : URL
+        applicationname : str
+        name : str
+        role : str
+        subordinate : bool
         '''
-        self.error = error
-        self.url = URL.from_json(url) if url else None
+        self.applicationname = applicationname
+        self.name = name
+        self.role = role
+        self.subordinate = subordinate
 
 
-class ResolveCharmResults(Type):
-    _toSchema = {'urls': 'URLs'}
-    _toPy = {'URLs': 'urls'}
-    def __init__(self, urls=None):
+class EntityStatus(Type):
+    _toSchema = {'since': 'Since', 'data': 'Data', 'info': 'Info', 'status': 'Status'}
+    _toPy = {'Since': 'since', 'Status': 'status', 'Data': 'data', 'Info': 'info'}
+    def __init__(self, data=None, info=None, since=None, status=None):
         '''
-        urls : typing.Sequence[~ResolveCharmResult]
+        data : typing.Mapping[str, typing.Any]
+        info : str
+        since : str
+        status : str
         '''
-        self.urls = [ResolveCharmResult.from_json(o) for o in urls or []]
+        self.data = data
+        self.info = info
+        self.since = since
+        self.status = status
 
 
-class ResolveCharms(Type):
-    _toSchema = {'references': 'References'}
-    _toPy = {'References': 'references'}
-    def __init__(self, references=None):
+class FindToolsParams(Type):
+    _toSchema = {'minorversion': 'MinorVersion', 'number': 'Number', 'series': 'Series', 'arch': 'Arch', 'majorversion': 'MajorVersion'}
+    _toPy = {'Number': 'number', 'Series': 'series', 'Arch': 'arch', 'MinorVersion': 'minorversion', 'MajorVersion': 'majorversion'}
+    def __init__(self, arch=None, majorversion=None, minorversion=None, number=None, series=None):
         '''
-        references : typing.Sequence[~URL]
+        arch : str
+        majorversion : int
+        minorversion : int
+        number : Number
+        series : str
         '''
-        self.references = [URL.from_json(o) for o in references or []]
+        self.arch = arch
+        self.majorversion = majorversion
+        self.minorversion = minorversion
+        self.number = Number.from_json(number) if number else None
+        self.series = series
 
 
-class Resolved(Type):
-    _toSchema = {'retry': 'Retry', 'unitname': 'UnitName'}
-    _toPy = {'UnitName': 'unitname', 'Retry': 'retry'}
-    def __init__(self, retry=None, unitname=None):
+class FindToolsResult(Type):
+    _toSchema = {'error': 'Error', 'list_': 'List'}
+    _toPy = {'List': 'list_', 'Error': 'error'}
+    def __init__(self, error=None, list_=None):
         '''
-        retry : bool
-        unitname : str
+        error : Error
+        list_ : typing.Sequence[~Tools]
         '''
-        self.retry = retry
-        self.unitname = unitname
+        self.error = Error.from_json(error) if error else None
+        self.list_ = [Tools.from_json(o) for o in list_ or []]
 
 
-class ServiceStatus(Type):
-    _toSchema = {'units': 'Units', 'charm': 'Charm', 'relations': 'Relations', 'status': 'Status', 'exposed': 'Exposed', 'canupgradeto': 'CanUpgradeTo', 'meterstatuses': 'MeterStatuses', 'subordinateto': 'SubordinateTo', 'life': 'Life', 'err': 'Err'}
-    _toPy = {'Status': 'status', 'Relations': 'relations', 'Exposed': 'exposed', 'Err': 'err', 'SubordinateTo': 'subordinateto', 'Charm': 'charm', 'CanUpgradeTo': 'canupgradeto', 'Units': 'units', 'Life': 'life', 'MeterStatuses': 'meterstatuses'}
-    def __init__(self, canupgradeto=None, charm=None, err=None, exposed=None, life=None, meterstatuses=None, relations=None, status=None, subordinateto=None, units=None):
+class FullStatus(Type):
+    _toSchema = {'modelname': 'ModelName', 'availableversion': 'AvailableVersion', 'applications': 'Applications', 'relations': 'Relations', 'machines': 'Machines'}
+    _toPy = {'Applications': 'applications', 'Machines': 'machines', 'AvailableVersion': 'availableversion', 'ModelName': 'modelname', 'Relations': 'relations'}
+    def __init__(self, applications=None, availableversion=None, machines=None, modelname=None, relations=None):
         '''
-        canupgradeto : str
-        charm : str
-        err : typing.Mapping[str, typing.Any]
-        exposed : bool
-        life : str
-        meterstatuses : typing.Mapping[str, ~MeterStatus]
-        relations : typing.Sequence[str]
-        status : DetailedStatus
-        subordinateto : typing.Sequence[str]
-        units : typing.Mapping[str, ~UnitStatus]
+        applications : typing.Mapping[str, ~ApplicationStatus]
+        availableversion : str
+        machines : typing.Mapping[str, ~MachineStatus]
+        modelname : str
+        relations : typing.Sequence[~RelationStatus]
         '''
-        self.canupgradeto = canupgradeto
-        self.charm = charm
-        self.err = err
-        self.exposed = exposed
-        self.life = life
-        self.meterstatuses = {k: MeterStatus.from_json(v) for k, v in (meterstatuses or dict()).items()}
-        self.relations = relations
-        self.status = DetailedStatus.from_json(status) if status else None
-        self.subordinateto = subordinateto
-        self.units = {k: UnitStatus.from_json(v) for k, v in (units or dict()).items()}
+        self.applications = {k: ApplicationStatus.from_json(v) for k, v in (applications or dict()).items()}
+        self.availableversion = availableversion
+        self.machines = {k: MachineStatus.from_json(v) for k, v in (machines or dict()).items()}
+        self.modelname = modelname
+        self.relations = [RelationStatus.from_json(o) for o in relations or []]
 
 
-class SetConstraints(Type):
-    _toSchema = {'constraints': 'Constraints', 'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename', 'Constraints': 'constraints'}
-    def __init__(self, constraints=None, servicename=None):
+class GetBundleChangesParams(Type):
+    _toSchema = {'yaml': 'yaml'}
+    _toPy = {'yaml': 'yaml'}
+    def __init__(self, yaml=None):
         '''
-        constraints : Value
-        servicename : str
+        yaml : str
         '''
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.servicename = servicename
+        self.yaml = yaml
 
 
-class SetModelAgentVersion(Type):
-    _toSchema = {'minor': 'Minor', 'major': 'Major', 'tag': 'Tag', 'patch': 'Patch', 'build': 'Build'}
-    _toPy = {'Tag': 'tag', 'Build': 'build', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch'}
-    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None):
+class GetBundleChangesResults(Type):
+    _toSchema = {'changes': 'changes', 'errors': 'errors'}
+    _toPy = {'changes': 'changes', 'errors': 'errors'}
+    def __init__(self, changes=None, errors=None):
         '''
-        build : int
-        major : int
-        minor : int
-        patch : int
-        tag : str
+        changes : typing.Sequence[~BundleChangesChange]
+        errors : typing.Sequence[str]
         '''
-        self.build = build
-        self.major = major
-        self.minor = minor
-        self.patch = patch
-        self.tag = tag
+        self.changes = [BundleChangesChange.from_json(o) for o in changes or []]
+        self.errors = errors
 
 
-class StatusHistoryArgs(Type):
-    _toSchema = {'kind': 'Kind', 'size': 'Size', 'name': 'Name'}
-    _toPy = {'Size': 'size', 'Kind': 'kind', 'Name': 'name'}
-    def __init__(self, kind=None, name=None, size=None):
+class HardwareCharacteristics(Type):
+    _toSchema = {'rootdisk': 'RootDisk', 'cpucores': 'CpuCores', 'mem': 'Mem', 'tags': 'Tags', 'arch': 'Arch', 'availabilityzone': 'AvailabilityZone', 'cpupower': 'CpuPower'}
+    _toPy = {'CpuPower': 'cpupower', 'RootDisk': 'rootdisk', 'AvailabilityZone': 'availabilityzone', 'Mem': 'mem', 'CpuCores': 'cpucores', 'Tags': 'tags', 'Arch': 'arch'}
+    def __init__(self, arch=None, availabilityzone=None, cpucores=None, cpupower=None, mem=None, rootdisk=None, tags=None):
         '''
-        kind : str
-        name : str
-        size : int
+        arch : str
+        availabilityzone : str
+        cpucores : int
+        cpupower : int
+        mem : int
+        rootdisk : int
+        tags : typing.Sequence[str]
         '''
-        self.kind = kind
-        self.name = name
-        self.size = size
+        self.arch = arch
+        self.availabilityzone = availabilityzone
+        self.cpucores = cpucores
+        self.cpupower = cpupower
+        self.mem = mem
+        self.rootdisk = rootdisk
+        self.tags = tags
 
 
-class StatusHistoryResults(Type):
-    _toSchema = {'statuses': 'Statuses'}
-    _toPy = {'Statuses': 'statuses'}
-    def __init__(self, statuses=None):
+class History(Type):
+    _toSchema = {'error': 'Error', 'statuses': 'Statuses'}
+    _toPy = {'Error': 'error', 'Statuses': 'statuses'}
+    def __init__(self, error=None, statuses=None):
         '''
+        error : Error
         statuses : typing.Sequence[~DetailedStatus]
         '''
+        self.error = Error.from_json(error) if error else None
         self.statuses = [DetailedStatus.from_json(o) for o in statuses or []]
 
 
-class StatusParams(Type):
-    _toSchema = {'patterns': 'Patterns'}
-    _toPy = {'Patterns': 'patterns'}
-    def __init__(self, patterns=None):
+class HostPort(Type):
+    _toSchema = {'address': 'Address', 'port': 'Port'}
+    _toPy = {'Port': 'port', 'Address': 'address'}
+    def __init__(self, address=None, port=None):
         '''
-        patterns : typing.Sequence[str]
+        address : Address
+        port : int
         '''
-        self.patterns = patterns
+        self.address = Address.from_json(address) if address else None
+        self.port = port
 
 
-class Tools(Type):
-    _toSchema = {'url': 'url', 'version': 'version', 'size': 'size', 'sha256': 'sha256'}
-    _toPy = {'url': 'url', 'version': 'version', 'size': 'size', 'sha256': 'sha256'}
-    def __init__(self, sha256=None, size=None, url=None, version=None):
+class MachineStatus(Type):
+    _toSchema = {'dnsname': 'DNSName', 'hardware': 'Hardware', 'series': 'Series', 'id_': 'Id', 'hasvote': 'HasVote', 'jobs': 'Jobs', 'containers': 'Containers', 'agentstatus': 'AgentStatus', 'instanceid': 'InstanceId', 'wantsvote': 'WantsVote', 'instancestatus': 'InstanceStatus'}
+    _toPy = {'AgentStatus': 'agentstatus', 'InstanceId': 'instanceid', 'Hardware': 'hardware', 'HasVote': 'hasvote', 'Containers': 'containers', 'Id': 'id_', 'WantsVote': 'wantsvote', 'Series': 'series', 'DNSName': 'dnsname', 'InstanceStatus': 'instancestatus', 'Jobs': 'jobs'}
+    def __init__(self, agentstatus=None, containers=None, dnsname=None, hardware=None, hasvote=None, id_=None, instanceid=None, instancestatus=None, jobs=None, series=None, wantsvote=None):
         '''
-        sha256 : str
-        size : int
-        url : str
-        version : Binary
+        agentstatus : DetailedStatus
+        containers : typing.Mapping[str, ~MachineStatus]
+        dnsname : str
+        hardware : str
+        hasvote : bool
+        id_ : str
+        instanceid : str
+        instancestatus : DetailedStatus
+        jobs : typing.Sequence[str]
+        series : str
+        wantsvote : bool
         '''
-        self.sha256 = sha256
-        self.size = size
-        self.url = url
-        self.version = Binary.from_json(version) if version else None
+        self.agentstatus = DetailedStatus.from_json(agentstatus) if agentstatus else None
+        self.containers = {k: MachineStatus.from_json(v) for k, v in (containers or dict()).items()}
+        self.dnsname = dnsname
+        self.hardware = hardware
+        self.hasvote = hasvote
+        self.id_ = id_
+        self.instanceid = instanceid
+        self.instancestatus = DetailedStatus.from_json(instancestatus) if instancestatus else None
+        self.jobs = jobs
+        self.series = series
+        self.wantsvote = wantsvote
 
 
-class URL(Type):
-    _toSchema = {'series': 'Series', 'channel': 'Channel', 'schema': 'Schema', 'revision': 'Revision', 'name': 'Name', 'user': 'User'}
-    _toPy = {'Schema': 'schema', 'Name': 'name', 'Channel': 'channel', 'User': 'user', 'Revision': 'revision', 'Series': 'series'}
-    def __init__(self, channel=None, name=None, revision=None, schema=None, series=None, user=None):
+class MeterStatus(Type):
+    _toSchema = {'color': 'Color', 'message': 'Message'}
+    _toPy = {'Message': 'message', 'Color': 'color'}
+    def __init__(self, color=None, message=None):
         '''
-        channel : str
-        name : str
-        revision : int
-        schema : str
-        series : str
-        user : str
+        color : str
+        message : str
         '''
-        self.channel = channel
-        self.name = name
-        self.revision = revision
-        self.schema = schema
-        self.series = series
-        self.user = user
+        self.color = color
+        self.message = message
 
 
-class UnitStatus(Type):
-    _toSchema = {'charm': 'Charm', 'subordinates': 'Subordinates', 'workloadstatus': 'WorkloadStatus', 'machine': 'Machine', 'openedports': 'OpenedPorts', 'agentstatus': 'AgentStatus', 'publicaddress': 'PublicAddress'}
-    _toPy = {'AgentStatus': 'agentstatus', 'Machine': 'machine', 'Charm': 'charm', 'Subordinates': 'subordinates', 'PublicAddress': 'publicaddress', 'WorkloadStatus': 'workloadstatus', 'OpenedPorts': 'openedports'}
-    def __init__(self, agentstatus=None, charm=None, machine=None, openedports=None, publicaddress=None, subordinates=None, workloadstatus=None):
+class ModelConfigResults(Type):
+    _toSchema = {'config': 'Config'}
+    _toPy = {'Config': 'config'}
+    def __init__(self, config=None):
         '''
-        agentstatus : DetailedStatus
-        charm : str
-        machine : str
-        openedports : typing.Sequence[str]
-        publicaddress : str
-        subordinates : typing.Mapping[str, ~UnitStatus]
-        workloadstatus : DetailedStatus
+        config : typing.Mapping[str, typing.Any]
         '''
-        self.agentstatus = DetailedStatus.from_json(agentstatus) if agentstatus else None
-        self.charm = charm
-        self.machine = machine
-        self.openedports = openedports
-        self.publicaddress = publicaddress
-        self.subordinates = {k: UnitStatus.from_json(v) for k, v in (subordinates or dict()).items()}
-        self.workloadstatus = DetailedStatus.from_json(workloadstatus) if workloadstatus else None
+        self.config = config
 
 
-class Value(Type):
-    _toSchema = {'virt_type': 'virt-type', 'mem': 'mem', 'container': 'container', 'instance_type': 'instance-type', 'root_disk': 'root-disk', 'tags': 'tags', 'arch': 'arch', 'cpu_power': 'cpu-power', 'cpu_cores': 'cpu-cores', 'spaces': 'spaces'}
-    _toPy = {'instance-type': 'instance_type', 'root-disk': 'root_disk', 'cpu-power': 'cpu_power', 'mem': 'mem', 'tags': 'tags', 'arch': 'arch', 'spaces': 'spaces', 'virt-type': 'virt_type', 'container': 'container', 'cpu-cores': 'cpu_cores'}
-    def __init__(self, arch=None, container=None, cpu_cores=None, cpu_power=None, instance_type=None, mem=None, root_disk=None, spaces=None, tags=None, virt_type=None):
+class ModelInfo(Type):
+    _toSchema = {'uuid': 'UUID', 'cloud': 'Cloud', 'life': 'Life', 'users': 'Users', 'name': 'Name', 'serveruuid': 'ServerUUID', 'defaultseries': 'DefaultSeries', 'ownertag': 'OwnerTag', 'providertype': 'ProviderType', 'status': 'Status'}
+    _toPy = {'OwnerTag': 'ownertag', 'Cloud': 'cloud', 'DefaultSeries': 'defaultseries', 'Name': 'name', 'UUID': 'uuid', 'Status': 'status', 'ServerUUID': 'serveruuid', 'Users': 'users', 'Life': 'life', 'ProviderType': 'providertype'}
+    def __init__(self, cloud=None, defaultseries=None, life=None, name=None, ownertag=None, providertype=None, serveruuid=None, status=None, uuid=None, users=None):
         '''
-        arch : str
-        container : str
-        cpu_cores : int
-        cpu_power : int
-        instance_type : str
-        mem : int
-        root_disk : int
-        spaces : typing.Sequence[str]
-        tags : typing.Sequence[str]
-        virt_type : str
+        cloud : str
+        defaultseries : str
+        life : str
+        name : str
+        ownertag : str
+        providertype : str
+        serveruuid : str
+        status : EntityStatus
+        uuid : str
+        users : typing.Sequence[~ModelUserInfo]
         '''
-        self.arch = arch
-        self.container = container
-        self.cpu_cores = cpu_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
+        self.cloud = cloud
+        self.defaultseries = defaultseries
+        self.life = life
+        self.name = name
+        self.ownertag = ownertag
+        self.providertype = providertype
+        self.serveruuid = serveruuid
+        self.status = EntityStatus.from_json(status) if status else None
+        self.uuid = uuid
+        self.users = [ModelUserInfo.from_json(o) for o in users or []]
 
 
-class DestroyControllerArgs(Type):
-    _toSchema = {'destroy_models': 'destroy-models'}
-    _toPy = {'destroy-models': 'destroy_models'}
-    def __init__(self, destroy_models=None):
+class ModelSet(Type):
+    _toSchema = {'config': 'Config'}
+    _toPy = {'Config': 'config'}
+    def __init__(self, config=None):
         '''
-        destroy_models : bool
+        config : typing.Mapping[str, typing.Any]
         '''
-        self.destroy_models = destroy_models
+        self.config = config
 
 
-class InitiateModelMigrationArgs(Type):
-    _toSchema = {'specs': 'specs'}
-    _toPy = {'specs': 'specs'}
-    def __init__(self, specs=None):
+class ModelUnset(Type):
+    _toSchema = {'keys': 'Keys'}
+    _toPy = {'Keys': 'keys'}
+    def __init__(self, keys=None):
         '''
-        specs : typing.Sequence[~ModelMigrationSpec]
+        keys : typing.Sequence[str]
         '''
-        self.specs = [ModelMigrationSpec.from_json(o) for o in specs or []]
+        self.keys = keys
 
 
-class InitiateModelMigrationResult(Type):
-    _toSchema = {'error': 'error', 'id_': 'id', 'model_tag': 'model-tag'}
-    _toPy = {'model-tag': 'model_tag', 'error': 'error', 'id': 'id_'}
-    def __init__(self, error=None, id_=None, model_tag=None):
+class ModelUserInfo(Type):
+    _toSchema = {'displayname': 'displayname', 'user': 'user', 'lastconnection': 'lastconnection', 'access': 'access'}
+    _toPy = {'displayname': 'displayname', 'user': 'user', 'lastconnection': 'lastconnection', 'access': 'access'}
+    def __init__(self, access=None, displayname=None, lastconnection=None, user=None):
+        '''
+        access : str
+        displayname : str
+        lastconnection : str
+        user : str
+        '''
+        self.access = access
+        self.displayname = displayname
+        self.lastconnection = lastconnection
+        self.user = user
+
+
+class ModelUserInfoResult(Type):
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
         error : Error
-        id_ : str
-        model_tag : str
+        result : ModelUserInfo
         '''
         self.error = Error.from_json(error) if error else None
-        self.id_ = id_
-        self.model_tag = model_tag
+        self.result = ModelUserInfo.from_json(result) if result else None
 
 
-class InitiateModelMigrationResults(Type):
+class ModelUserInfoResults(Type):
     _toSchema = {'results': 'results'}
     _toPy = {'results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~InitiateModelMigrationResult]
+        results : typing.Sequence[~ModelUserInfoResult]
         '''
-        self.results = [InitiateModelMigrationResult.from_json(o) for o in results or []]
+        self.results = [ModelUserInfoResult.from_json(o) for o in results or []]
 
 
-class Model(Type):
-    _toSchema = {'ownertag': 'OwnerTag', 'uuid': 'UUID', 'name': 'Name'}
-    _toPy = {'UUID': 'uuid', 'OwnerTag': 'ownertag', 'Name': 'name'}
-    def __init__(self, name=None, ownertag=None, uuid=None):
+class PrivateAddress(Type):
+    _toSchema = {'target': 'Target'}
+    _toPy = {'Target': 'target'}
+    def __init__(self, target=None):
         '''
-        name : str
-        ownertag : str
-        uuid : str
+        target : str
         '''
-        self.name = name
-        self.ownertag = ownertag
-        self.uuid = uuid
+        self.target = target
 
 
-class ModelBlockInfo(Type):
-    _toSchema = {'model_uuid': 'model-uuid', 'owner_tag': 'owner-tag', 'blocks': 'blocks', 'name': 'name'}
-    _toPy = {'model-uuid': 'model_uuid', 'blocks': 'blocks', 'owner-tag': 'owner_tag', 'name': 'name'}
-    def __init__(self, blocks=None, model_uuid=None, name=None, owner_tag=None):
+class PrivateAddressResults(Type):
+    _toSchema = {'privateaddress': 'PrivateAddress'}
+    _toPy = {'PrivateAddress': 'privateaddress'}
+    def __init__(self, privateaddress=None):
         '''
-        blocks : typing.Sequence[str]
-        model_uuid : str
-        name : str
-        owner_tag : str
+        privateaddress : str
         '''
-        self.blocks = blocks
-        self.model_uuid = model_uuid
-        self.name = name
-        self.owner_tag = owner_tag
+        self.privateaddress = privateaddress
 
 
-class ModelBlockInfoList(Type):
-    _toSchema = {'models': 'models'}
-    _toPy = {'models': 'models'}
-    def __init__(self, models=None):
+class ProvisioningScriptParams(Type):
+    _toSchema = {'disablepackagecommands': 'DisablePackageCommands', 'machineid': 'MachineId', 'datadir': 'DataDir', 'nonce': 'Nonce'}
+    _toPy = {'MachineId': 'machineid', 'DisablePackageCommands': 'disablepackagecommands', 'DataDir': 'datadir', 'Nonce': 'nonce'}
+    def __init__(self, datadir=None, disablepackagecommands=None, machineid=None, nonce=None):
         '''
-        models : typing.Sequence[~ModelBlockInfo]
+        datadir : str
+        disablepackagecommands : bool
+        machineid : str
+        nonce : str
         '''
-        self.models = [ModelBlockInfo.from_json(o) for o in models or []]
+        self.datadir = datadir
+        self.disablepackagecommands = disablepackagecommands
+        self.machineid = machineid
+        self.nonce = nonce
 
 
-class ModelMigrationSpec(Type):
-    _toSchema = {'model_tag': 'model-tag', 'target_info': 'target-info'}
-    _toPy = {'model-tag': 'model_tag', 'target-info': 'target_info'}
-    def __init__(self, model_tag=None, target_info=None):
+class ProvisioningScriptResult(Type):
+    _toSchema = {'script': 'Script'}
+    _toPy = {'Script': 'script'}
+    def __init__(self, script=None):
         '''
-        model_tag : str
-        target_info : ModelMigrationTargetInfo
+        script : str
         '''
-        self.model_tag = model_tag
-        self.target_info = ModelMigrationTargetInfo.from_json(target_info) if target_info else None
+        self.script = script
 
 
-class ModelMigrationTargetInfo(Type):
-    _toSchema = {'auth_tag': 'auth-tag', 'password': 'password', 'controller_tag': 'controller-tag', 'ca_cert': 'ca-cert', 'addrs': 'addrs'}
-    _toPy = {'password': 'password', 'auth-tag': 'auth_tag', 'ca-cert': 'ca_cert', 'controller-tag': 'controller_tag', 'addrs': 'addrs'}
-    def __init__(self, addrs=None, auth_tag=None, ca_cert=None, controller_tag=None, password=None):
+class PublicAddress(Type):
+    _toSchema = {'target': 'Target'}
+    _toPy = {'Target': 'target'}
+    def __init__(self, target=None):
         '''
-        addrs : typing.Sequence[str]
-        auth_tag : str
-        ca_cert : str
-        controller_tag : str
-        password : str
+        target : str
         '''
-        self.addrs = addrs
-        self.auth_tag = auth_tag
-        self.ca_cert = ca_cert
-        self.controller_tag = controller_tag
-        self.password = password
+        self.target = target
 
 
-class ModelStatus(Type):
-    _toSchema = {'hosted_machine_count': 'hosted-machine-count', 'service_count': 'service-count', 'life': 'life', 'model_tag': 'model-tag', 'owner_tag': 'owner-tag'}
-    _toPy = {'model-tag': 'model_tag', 'service-count': 'service_count', 'life': 'life', 'hosted-machine-count': 'hosted_machine_count', 'owner-tag': 'owner_tag'}
-    def __init__(self, hosted_machine_count=None, life=None, model_tag=None, owner_tag=None, service_count=None):
+class PublicAddressResults(Type):
+    _toSchema = {'publicaddress': 'PublicAddress'}
+    _toPy = {'PublicAddress': 'publicaddress'}
+    def __init__(self, publicaddress=None):
         '''
-        hosted_machine_count : int
-        life : str
-        model_tag : str
-        owner_tag : str
-        service_count : int
+        publicaddress : str
         '''
-        self.hosted_machine_count = hosted_machine_count
-        self.life = life
-        self.model_tag = model_tag
-        self.owner_tag = owner_tag
-        self.service_count = service_count
+        self.publicaddress = publicaddress
 
 
-class ModelStatusResults(Type):
-    _toSchema = {'models': 'models'}
-    _toPy = {'models': 'models'}
-    def __init__(self, models=None):
+class RelationStatus(Type):
+    _toSchema = {'key': 'Key', 'endpoints': 'Endpoints', 'scope': 'Scope', 'id_': 'Id', 'interface': 'Interface'}
+    _toPy = {'Key': 'key', 'Interface': 'interface', 'Id': 'id_', 'Endpoints': 'endpoints', 'Scope': 'scope'}
+    def __init__(self, endpoints=None, id_=None, interface=None, key=None, scope=None):
         '''
-        models : typing.Sequence[~ModelStatus]
+        endpoints : typing.Sequence[~EndpointStatus]
+        id_ : int
+        interface : str
+        key : str
+        scope : str
         '''
-        self.models = [ModelStatus.from_json(o) for o in models or []]
+        self.endpoints = [EndpointStatus.from_json(o) for o in endpoints or []]
+        self.id_ = id_
+        self.interface = interface
+        self.key = key
+        self.scope = scope
 
 
-class RemoveBlocksArgs(Type):
-    _toSchema = {'all_': 'all'}
-    _toPy = {'all': 'all_'}
-    def __init__(self, all_=None):
+class ResolveCharmResult(Type):
+    _toSchema = {'error': 'Error', 'url': 'URL'}
+    _toPy = {'URL': 'url', 'Error': 'error'}
+    def __init__(self, error=None, url=None):
         '''
-        all_ : bool
+        error : str
+        url : URL
         '''
-        self.all_ = all_
+        self.error = error
+        self.url = URL.from_json(url) if url else None
 
 
-class UserModel(Type):
-    _toSchema = {'model': 'Model', 'lastconnection': 'LastConnection'}
-    _toPy = {'LastConnection': 'lastconnection', 'Model': 'model'}
-    def __init__(self, lastconnection=None, model=None):
+class ResolveCharmResults(Type):
+    _toSchema = {'urls': 'URLs'}
+    _toPy = {'URLs': 'urls'}
+    def __init__(self, urls=None):
         '''
-        lastconnection : str
-        model : Model
+        urls : typing.Sequence[~ResolveCharmResult]
         '''
-        self.lastconnection = lastconnection
-        self.model = Model.from_json(model) if model else None
+        self.urls = [ResolveCharmResult.from_json(o) for o in urls or []]
 
 
-class UserModelList(Type):
-    _toSchema = {'usermodels': 'UserModels'}
-    _toPy = {'UserModels': 'usermodels'}
-    def __init__(self, usermodels=None):
+class ResolveCharms(Type):
+    _toSchema = {'references': 'References'}
+    _toPy = {'References': 'references'}
+    def __init__(self, references=None):
         '''
-        usermodels : typing.Sequence[~UserModel]
+        references : typing.Sequence[~URL]
         '''
-        self.usermodels = [UserModel.from_json(o) for o in usermodels or []]
+        self.references = [URL.from_json(o) for o in references or []]
 
 
-class BytesResult(Type):
-    _toSchema = {'result': 'Result'}
-    _toPy = {'Result': 'result'}
-    def __init__(self, result=None):
+class Resolved(Type):
+    _toSchema = {'unitname': 'UnitName', 'retry': 'Retry'}
+    _toPy = {'UnitName': 'unitname', 'Retry': 'retry'}
+    def __init__(self, retry=None, unitname=None):
         '''
-        result : typing.Sequence[int]
+        retry : bool
+        unitname : str
         '''
-        self.result = result
+        self.retry = retry
+        self.unitname = unitname
 
 
-class DeployerConnectionValues(Type):
-    _toSchema = {'apiaddresses': 'APIAddresses', 'stateaddresses': 'StateAddresses'}
-    _toPy = {'StateAddresses': 'stateaddresses', 'APIAddresses': 'apiaddresses'}
-    def __init__(self, apiaddresses=None, stateaddresses=None):
-        '''
-        apiaddresses : typing.Sequence[str]
-        stateaddresses : typing.Sequence[str]
-        '''
-        self.apiaddresses = apiaddresses
-        self.stateaddresses = stateaddresses
-
-
-class LifeResult(Type):
-    _toSchema = {'error': 'Error', 'life': 'Life'}
-    _toPy = {'Error': 'error', 'Life': 'life'}
-    def __init__(self, error=None, life=None):
+class SetModelAgentVersion(Type):
+    _toSchema = {'minor': 'Minor', 'major': 'Major', 'patch': 'Patch', 'tag': 'Tag', 'build': 'Build'}
+    _toPy = {'Patch': 'patch', 'Major': 'major', 'Minor': 'minor', 'Tag': 'tag', 'Build': 'build'}
+    def __init__(self, build=None, major=None, minor=None, patch=None, tag=None):
         '''
-        error : Error
-        life : str
+        build : int
+        major : int
+        minor : int
+        patch : int
+        tag : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.life = life
+        self.build = build
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+        self.tag = tag
 
 
-class LifeResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class StatusHistoryFilter(Type):
+    _toSchema = {'delta': 'Delta', 'date': 'Date', 'size': 'Size'}
+    _toPy = {'Delta': 'delta', 'Date': 'date', 'Size': 'size'}
+    def __init__(self, date=None, delta=None, size=None):
         '''
-        results : typing.Sequence[~LifeResult]
+        date : str
+        delta : int
+        size : int
         '''
-        self.results = [LifeResult.from_json(o) for o in results or []]
+        self.date = date
+        self.delta = delta
+        self.size = size
 
 
-class StringResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
-    def __init__(self, error=None, result=None):
+class StatusHistoryRequest(Type):
+    _toSchema = {'historykind': 'HistoryKind', 'filter_': 'Filter', 'tag': 'Tag', 'size': 'Size'}
+    _toPy = {'Tag': 'tag', 'Size': 'size', 'Filter': 'filter_', 'HistoryKind': 'historykind'}
+    def __init__(self, filter_=None, historykind=None, size=None, tag=None):
         '''
-        error : Error
-        result : str
+        filter_ : StatusHistoryFilter
+        historykind : str
+        size : int
+        tag : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.result = result
+        self.filter_ = StatusHistoryFilter.from_json(filter_) if filter_ else None
+        self.historykind = historykind
+        self.size = size
+        self.tag = tag
 
 
-class StringsResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
-    def __init__(self, error=None, result=None):
+class StatusHistoryRequests(Type):
+    _toSchema = {'requests': 'Requests'}
+    _toPy = {'Requests': 'requests'}
+    def __init__(self, requests=None):
         '''
-        error : Error
-        result : typing.Sequence[str]
+        requests : typing.Sequence[~StatusHistoryRequest]
         '''
-        self.error = Error.from_json(error) if error else None
-        self.result = result
+        self.requests = [StatusHistoryRequest.from_json(o) for o in requests or []]
 
 
-class StringsWatchResult(Type):
-    _toSchema = {'changes': 'Changes', 'stringswatcherid': 'StringsWatcherId', 'error': 'Error'}
-    _toPy = {'Changes': 'changes', 'Error': 'error', 'StringsWatcherId': 'stringswatcherid'}
-    def __init__(self, changes=None, error=None, stringswatcherid=None):
+class StatusHistoryResult(Type):
+    _toSchema = {'history': 'History', 'error': 'Error'}
+    _toPy = {'History': 'history', 'Error': 'error'}
+    def __init__(self, error=None, history=None):
         '''
-        changes : typing.Sequence[str]
         error : Error
-        stringswatcherid : str
+        history : History
         '''
-        self.changes = changes
         self.error = Error.from_json(error) if error else None
-        self.stringswatcherid = stringswatcherid
+        self.history = History.from_json(history) if history else None
 
 
-class StringsWatchResults(Type):
+class StatusHistoryResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~StringsWatchResult]
+        results : typing.Sequence[~StatusHistoryResult]
         '''
-        self.results = [StringsWatchResult.from_json(o) for o in results or []]
+        self.results = [StatusHistoryResult.from_json(o) for o in results or []]
 
 
-class AddSubnetParams(Type):
-    _toSchema = {'subnettag': 'SubnetTag', 'zones': 'Zones', 'subnetproviderid': 'SubnetProviderId', 'spacetag': 'SpaceTag'}
-    _toPy = {'SpaceTag': 'spacetag', 'SubnetProviderId': 'subnetproviderid', 'SubnetTag': 'subnettag', 'Zones': 'zones'}
-    def __init__(self, spacetag=None, subnetproviderid=None, subnettag=None, zones=None):
+class StatusParams(Type):
+    _toSchema = {'patterns': 'Patterns'}
+    _toPy = {'Patterns': 'patterns'}
+    def __init__(self, patterns=None):
         '''
-        spacetag : str
-        subnetproviderid : str
-        subnettag : str
-        zones : typing.Sequence[str]
+        patterns : typing.Sequence[str]
         '''
-        self.spacetag = spacetag
-        self.subnetproviderid = subnetproviderid
-        self.subnettag = subnettag
-        self.zones = zones
+        self.patterns = patterns
 
 
-class AddSubnetsParams(Type):
-    _toSchema = {'subnets': 'Subnets'}
-    _toPy = {'Subnets': 'subnets'}
-    def __init__(self, subnets=None):
+class Tools(Type):
+    _toSchema = {'sha256': 'sha256', 'url': 'url', 'size': 'size', 'version': 'version'}
+    _toPy = {'sha256': 'sha256', 'url': 'url', 'size': 'size', 'version': 'version'}
+    def __init__(self, sha256=None, size=None, url=None, version=None):
         '''
-        subnets : typing.Sequence[~AddSubnetParams]
+        sha256 : str
+        size : int
+        url : str
+        version : Binary
         '''
-        self.subnets = [AddSubnetParams.from_json(o) for o in subnets or []]
+        self.sha256 = sha256
+        self.size = size
+        self.url = url
+        self.version = Binary.from_json(version) if version else None
 
 
-class CreateSpaceParams(Type):
-    _toSchema = {'public': 'Public', 'subnettags': 'SubnetTags', 'providerid': 'ProviderId', 'spacetag': 'SpaceTag'}
-    _toPy = {'ProviderId': 'providerid', 'Public': 'public', 'SpaceTag': 'spacetag', 'SubnetTags': 'subnettags'}
-    def __init__(self, providerid=None, public=None, spacetag=None, subnettags=None):
+class URL(Type):
+    _toSchema = {'revision': 'Revision', 'series': 'Series', 'schema': 'Schema', 'channel': 'Channel', 'name': 'Name', 'user': 'User'}
+    _toPy = {'Name': 'name', 'Revision': 'revision', 'User': 'user', 'Schema': 'schema', 'Channel': 'channel', 'Series': 'series'}
+    def __init__(self, channel=None, name=None, revision=None, schema=None, series=None, user=None):
         '''
-        providerid : str
-        public : bool
-        spacetag : str
-        subnettags : typing.Sequence[str]
+        channel : str
+        name : str
+        revision : int
+        schema : str
+        series : str
+        user : str
         '''
-        self.providerid = providerid
-        self.public = public
-        self.spacetag = spacetag
-        self.subnettags = subnettags
+        self.channel = channel
+        self.name = name
+        self.revision = revision
+        self.schema = schema
+        self.series = series
+        self.user = user
 
 
-class CreateSpacesParams(Type):
-    _toSchema = {'spaces': 'Spaces'}
-    _toPy = {'Spaces': 'spaces'}
-    def __init__(self, spaces=None):
+class UnitStatus(Type):
+    _toSchema = {'charm': 'Charm', 'publicaddress': 'PublicAddress', 'openedports': 'OpenedPorts', 'agentstatus': 'AgentStatus', 'subordinates': 'Subordinates', 'workloadstatus': 'WorkloadStatus', 'machine': 'Machine'}
+    _toPy = {'AgentStatus': 'agentstatus', 'Charm': 'charm', 'OpenedPorts': 'openedports', 'WorkloadStatus': 'workloadstatus', 'PublicAddress': 'publicaddress', 'Machine': 'machine', 'Subordinates': 'subordinates'}
+    def __init__(self, agentstatus=None, charm=None, machine=None, openedports=None, publicaddress=None, subordinates=None, workloadstatus=None):
         '''
-        spaces : typing.Sequence[~CreateSpaceParams]
+        agentstatus : DetailedStatus
+        charm : str
+        machine : str
+        openedports : typing.Sequence[str]
+        publicaddress : str
+        subordinates : typing.Mapping[str, ~UnitStatus]
+        workloadstatus : DetailedStatus
         '''
-        self.spaces = [CreateSpaceParams.from_json(o) for o in spaces or []]
+        self.agentstatus = DetailedStatus.from_json(agentstatus) if agentstatus else None
+        self.charm = charm
+        self.machine = machine
+        self.openedports = openedports
+        self.publicaddress = publicaddress
+        self.subordinates = {k: UnitStatus.from_json(v) for k, v in (subordinates or dict()).items()}
+        self.workloadstatus = DetailedStatus.from_json(workloadstatus) if workloadstatus else None
 
 
-class DiscoverSpacesResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class DestroyControllerArgs(Type):
+    _toSchema = {'destroy_models': 'destroy-models'}
+    _toPy = {'destroy-models': 'destroy_models'}
+    def __init__(self, destroy_models=None):
         '''
-        results : typing.Sequence[~ProviderSpace]
+        destroy_models : bool
         '''
-        self.results = [ProviderSpace.from_json(o) for o in results or []]
+        self.destroy_models = destroy_models
 
 
-class ListSubnetsResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class InitiateModelMigrationArgs(Type):
+    _toSchema = {'specs': 'specs'}
+    _toPy = {'specs': 'specs'}
+    def __init__(self, specs=None):
         '''
-        results : typing.Sequence[~Subnet]
+        specs : typing.Sequence[~ModelMigrationSpec]
         '''
-        self.results = [Subnet.from_json(o) for o in results or []]
+        self.specs = [ModelMigrationSpec.from_json(o) for o in specs or []]
 
 
-class ProviderSpace(Type):
-    _toSchema = {'subnets': 'Subnets', 'error': 'Error', 'providerid': 'ProviderId', 'name': 'Name'}
-    _toPy = {'ProviderId': 'providerid', 'Error': 'error', 'Subnets': 'subnets', 'Name': 'name'}
-    def __init__(self, error=None, name=None, providerid=None, subnets=None):
+class InitiateModelMigrationResult(Type):
+    _toSchema = {'id_': 'id', 'model_tag': 'model-tag', 'error': 'error'}
+    _toPy = {'id': 'id_', 'error': 'error', 'model-tag': 'model_tag'}
+    def __init__(self, error=None, id_=None, model_tag=None):
         '''
         error : Error
-        name : str
-        providerid : str
-        subnets : typing.Sequence[~Subnet]
+        id_ : str
+        model_tag : str
         '''
         self.error = Error.from_json(error) if error else None
-        self.name = name
-        self.providerid = providerid
-        self.subnets = [Subnet.from_json(o) for o in subnets or []]
-
-
-class Subnet(Type):
-    _toSchema = {'zones': 'Zones', 'vlantag': 'VLANTag', 'staticrangelowip': 'StaticRangeLowIP', 'providerid': 'ProviderId', 'spacetag': 'SpaceTag', 'status': 'Status', 'staticrangehighip': 'StaticRangeHighIP', 'life': 'Life', 'cidr': 'CIDR'}
-    _toPy = {'ProviderId': 'providerid', 'SpaceTag': 'spacetag', 'StaticRangeLowIP': 'staticrangelowip', 'StaticRangeHighIP': 'staticrangehighip', 'Status': 'status', 'CIDR': 'cidr', 'Life': 'life', 'VLANTag': 'vlantag', 'Zones': 'zones'}
-    def __init__(self, cidr=None, life=None, providerid=None, spacetag=None, staticrangehighip=None, staticrangelowip=None, status=None, vlantag=None, zones=None):
-        '''
-        cidr : str
-        life : str
-        providerid : str
-        spacetag : str
-        staticrangehighip : typing.Sequence[int]
-        staticrangelowip : typing.Sequence[int]
-        status : str
-        vlantag : int
-        zones : typing.Sequence[str]
-        '''
-        self.cidr = cidr
-        self.life = life
-        self.providerid = providerid
-        self.spacetag = spacetag
-        self.staticrangehighip = staticrangehighip
-        self.staticrangelowip = staticrangelowip
-        self.status = status
-        self.vlantag = vlantag
-        self.zones = zones
+        self.id_ = id_
+        self.model_tag = model_tag
 
 
-class SubnetsFilters(Type):
-    _toSchema = {'zone': 'Zone', 'spacetag': 'SpaceTag'}
-    _toPy = {'SpaceTag': 'spacetag', 'Zone': 'zone'}
-    def __init__(self, spacetag=None, zone=None):
+class InitiateModelMigrationResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
         '''
-        spacetag : str
-        zone : str
+        results : typing.Sequence[~InitiateModelMigrationResult]
         '''
-        self.spacetag = spacetag
-        self.zone = zone
+        self.results = [InitiateModelMigrationResult.from_json(o) for o in results or []]
 
 
-class BlockDevice(Type):
-    _toSchema = {'devicename': 'DeviceName', 'hardwareid': 'HardwareId', 'inuse': 'InUse', 'uuid': 'UUID', 'mountpoint': 'MountPoint', 'filesystemtype': 'FilesystemType', 'label': 'Label', 'devicelinks': 'DeviceLinks', 'size': 'Size', 'busaddress': 'BusAddress'}
-    _toPy = {'DeviceLinks': 'devicelinks', 'BusAddress': 'busaddress', 'Size': 'size', 'Label': 'label', 'InUse': 'inuse', 'HardwareId': 'hardwareid', 'UUID': 'uuid', 'DeviceName': 'devicename', 'FilesystemType': 'filesystemtype', 'MountPoint': 'mountpoint'}
-    def __init__(self, busaddress=None, devicelinks=None, devicename=None, filesystemtype=None, hardwareid=None, inuse=None, label=None, mountpoint=None, size=None, uuid=None):
+class Model(Type):
+    _toSchema = {'uuid': 'UUID', 'ownertag': 'OwnerTag', 'name': 'Name'}
+    _toPy = {'OwnerTag': 'ownertag', 'Name': 'name', 'UUID': 'uuid'}
+    def __init__(self, name=None, ownertag=None, uuid=None):
         '''
-        busaddress : str
-        devicelinks : typing.Sequence[str]
-        devicename : str
-        filesystemtype : str
-        hardwareid : str
-        inuse : bool
-        label : str
-        mountpoint : str
-        size : int
+        name : str
+        ownertag : str
         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.name = name
+        self.ownertag = ownertag
         self.uuid = uuid
 
 
-class MachineBlockDevices(Type):
-    _toSchema = {'machine': 'machine', 'blockdevices': 'blockdevices'}
-    _toPy = {'machine': 'machine', 'blockdevices': 'blockdevices'}
-    def __init__(self, blockdevices=None, machine=None):
+class ModelBlockInfo(Type):
+    _toSchema = {'blocks': 'blocks', 'model_uuid': 'model-uuid', 'owner_tag': 'owner-tag', 'name': 'name'}
+    _toPy = {'owner-tag': 'owner_tag', 'blocks': 'blocks', 'model-uuid': 'model_uuid', 'name': 'name'}
+    def __init__(self, blocks=None, model_uuid=None, name=None, owner_tag=None):
         '''
-        blockdevices : typing.Sequence[~BlockDevice]
-        machine : str
+        blocks : typing.Sequence[str]
+        model_uuid : str
+        name : str
+        owner_tag : str
         '''
-        self.blockdevices = [BlockDevice.from_json(o) for o in blockdevices or []]
-        self.machine = machine
-
-
-class SetMachineBlockDevices(Type):
-    _toSchema = {'machineblockdevices': 'machineblockdevices'}
-    _toPy = {'machineblockdevices': 'machineblockdevices'}
-    def __init__(self, machineblockdevices=None):
-        '''
-        machineblockdevices : typing.Sequence[~MachineBlockDevices]
-        '''
-        self.machineblockdevices = [MachineBlockDevices.from_json(o) for o in machineblockdevices or []]
+        self.blocks = blocks
+        self.model_uuid = model_uuid
+        self.name = name
+        self.owner_tag = owner_tag
 
 
-class MachineStorageId(Type):
-    _toSchema = {'machinetag': 'machinetag', 'attachmenttag': 'attachmenttag'}
-    _toPy = {'machinetag': 'machinetag', 'attachmenttag': 'attachmenttag'}
-    def __init__(self, attachmenttag=None, machinetag=None):
+class ModelBlockInfoList(Type):
+    _toSchema = {'models': 'models'}
+    _toPy = {'models': 'models'}
+    def __init__(self, models=None):
         '''
-        attachmenttag : str
-        machinetag : str
+        models : typing.Sequence[~ModelBlockInfo]
         '''
-        self.attachmenttag = attachmenttag
-        self.machinetag = machinetag
+        self.models = [ModelBlockInfo.from_json(o) for o in models or []]
 
 
-class MachineStorageIdsWatchResult(Type):
-    _toSchema = {'machinestorageidswatcherid': 'MachineStorageIdsWatcherId', 'changes': 'Changes', 'error': 'Error'}
-    _toPy = {'Changes': 'changes', 'Error': 'error', 'MachineStorageIdsWatcherId': 'machinestorageidswatcherid'}
-    def __init__(self, changes=None, error=None, machinestorageidswatcherid=None):
+class ModelMigrationSpec(Type):
+    _toSchema = {'model_tag': 'model-tag', 'target_info': 'target-info'}
+    _toPy = {'model-tag': 'model_tag', 'target-info': 'target_info'}
+    def __init__(self, model_tag=None, target_info=None):
         '''
-        changes : typing.Sequence[~MachineStorageId]
-        error : Error
-        machinestorageidswatcherid : str
+        model_tag : str
+        target_info : ModelMigrationTargetInfo
         '''
-        self.changes = [MachineStorageId.from_json(o) for o in changes or []]
-        self.error = Error.from_json(error) if error else None
-        self.machinestorageidswatcherid = machinestorageidswatcherid
+        self.model_tag = model_tag
+        self.target_info = ModelMigrationTargetInfo.from_json(target_info) if target_info else None
 
 
-class BoolResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class ModelMigrationTargetInfo(Type):
+    _toSchema = {'auth_tag': 'auth-tag', 'ca_cert': 'ca-cert', 'controller_tag': 'controller-tag', 'password': 'password', 'addrs': 'addrs'}
+    _toPy = {'ca-cert': 'ca_cert', 'auth-tag': 'auth_tag', 'password': 'password', 'controller-tag': 'controller_tag', 'addrs': 'addrs'}
+    def __init__(self, addrs=None, auth_tag=None, ca_cert=None, controller_tag=None, password=None):
         '''
-        results : typing.Sequence[~BoolResult]
+        addrs : typing.Sequence[str]
+        auth_tag : str
+        ca_cert : str
+        controller_tag : str
+        password : str
         '''
-        self.results = [BoolResult.from_json(o) for o in results or []]
+        self.addrs = addrs
+        self.auth_tag = auth_tag
+        self.ca_cert = ca_cert
+        self.controller_tag = controller_tag
+        self.password = password
 
 
-class MachinePortRange(Type):
-    _toSchema = {'unittag': 'UnitTag', 'relationtag': 'RelationTag', 'portrange': 'PortRange'}
-    _toPy = {'RelationTag': 'relationtag', 'UnitTag': 'unittag', 'PortRange': 'portrange'}
-    def __init__(self, portrange=None, relationtag=None, unittag=None):
+class ModelStatus(Type):
+    _toSchema = {'model_tag': 'model-tag', 'life': 'life', 'application_count': 'application-count', 'hosted_machine_count': 'hosted-machine-count', 'owner_tag': 'owner-tag'}
+    _toPy = {'life': 'life', 'application-count': 'application_count', 'hosted-machine-count': 'hosted_machine_count', 'model-tag': 'model_tag', 'owner-tag': 'owner_tag'}
+    def __init__(self, application_count=None, hosted_machine_count=None, life=None, model_tag=None, owner_tag=None):
         '''
-        portrange : PortRange
-        relationtag : str
-        unittag : str
+        application_count : int
+        hosted_machine_count : int
+        life : str
+        model_tag : str
+        owner_tag : str
         '''
-        self.portrange = PortRange.from_json(portrange) if portrange else None
-        self.relationtag = relationtag
-        self.unittag = unittag
+        self.application_count = application_count
+        self.hosted_machine_count = hosted_machine_count
+        self.life = life
+        self.model_tag = model_tag
+        self.owner_tag = owner_tag
 
 
-class MachinePorts(Type):
-    _toSchema = {'machinetag': 'MachineTag', 'subnettag': 'SubnetTag'}
-    _toPy = {'MachineTag': 'machinetag', 'SubnetTag': 'subnettag'}
-    def __init__(self, machinetag=None, subnettag=None):
+class ModelStatusResults(Type):
+    _toSchema = {'models': 'models'}
+    _toPy = {'models': 'models'}
+    def __init__(self, models=None):
         '''
-        machinetag : str
-        subnettag : str
+        models : typing.Sequence[~ModelStatus]
         '''
-        self.machinetag = machinetag
-        self.subnettag = subnettag
+        self.models = [ModelStatus.from_json(o) for o in models or []]
 
 
-class MachinePortsParams(Type):
-    _toSchema = {'params': 'Params'}
-    _toPy = {'Params': 'params'}
-    def __init__(self, params=None):
+class RemoveBlocksArgs(Type):
+    _toSchema = {'all_': 'all'}
+    _toPy = {'all': 'all_'}
+    def __init__(self, all_=None):
         '''
-        params : typing.Sequence[~MachinePorts]
+        all_ : bool
         '''
-        self.params = [MachinePorts.from_json(o) for o in params or []]
+        self.all_ = all_
 
 
-class MachinePortsResult(Type):
-    _toSchema = {'error': 'Error', 'ports': 'Ports'}
-    _toPy = {'Error': 'error', 'Ports': 'ports'}
-    def __init__(self, error=None, ports=None):
+class UserModel(Type):
+    _toSchema = {'model': 'Model', 'lastconnection': 'LastConnection'}
+    _toPy = {'Model': 'model', 'LastConnection': 'lastconnection'}
+    def __init__(self, lastconnection=None, model=None):
         '''
-        error : Error
-        ports : typing.Sequence[~MachinePortRange]
+        lastconnection : str
+        model : Model
         '''
-        self.error = Error.from_json(error) if error else None
-        self.ports = [MachinePortRange.from_json(o) for o in ports or []]
+        self.lastconnection = lastconnection
+        self.model = Model.from_json(model) if model else None
 
 
-class MachinePortsResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class UserModelList(Type):
+    _toSchema = {'usermodels': 'UserModels'}
+    _toPy = {'UserModels': 'usermodels'}
+    def __init__(self, usermodels=None):
         '''
-        results : typing.Sequence[~MachinePortsResult]
+        usermodels : typing.Sequence[~UserModel]
         '''
-        self.results = [MachinePortsResult.from_json(o) for o in results or []]
+        self.usermodels = [UserModel.from_json(o) for o in usermodels or []]
 
 
-class NotifyWatchResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class BytesResult(Type):
+    _toSchema = {'result': 'Result'}
+    _toPy = {'Result': 'result'}
+    def __init__(self, result=None):
         '''
-        results : typing.Sequence[~NotifyWatchResult]
+        result : typing.Sequence[int]
         '''
-        self.results = [NotifyWatchResult.from_json(o) for o in results or []]
+        self.result = result
 
 
-class PortRange(Type):
-    _toSchema = {'protocol': 'Protocol', 'fromport': 'FromPort', 'toport': 'ToPort'}
-    _toPy = {'ToPort': 'toport', 'Protocol': 'protocol', 'FromPort': 'fromport'}
-    def __init__(self, fromport=None, protocol=None, toport=None):
+class DeployerConnectionValues(Type):
+    _toSchema = {'stateaddresses': 'StateAddresses', 'apiaddresses': 'APIAddresses'}
+    _toPy = {'StateAddresses': 'stateaddresses', 'APIAddresses': 'apiaddresses'}
+    def __init__(self, apiaddresses=None, stateaddresses=None):
         '''
-        fromport : int
-        protocol : str
-        toport : int
+        apiaddresses : typing.Sequence[str]
+        stateaddresses : typing.Sequence[str]
         '''
-        self.fromport = fromport
-        self.protocol = protocol
-        self.toport = toport
+        self.apiaddresses = apiaddresses
+        self.stateaddresses = stateaddresses
 
 
-class StringResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class LifeResult(Type):
+    _toSchema = {'life': 'Life', 'error': 'Error'}
+    _toPy = {'Life': 'life', 'Error': 'error'}
+    def __init__(self, error=None, life=None):
         '''
-        results : typing.Sequence[~StringResult]
+        error : Error
+        life : str
         '''
-        self.results = [StringResult.from_json(o) for o in results or []]
+        self.error = Error.from_json(error) if error else None
+        self.life = life
 
 
-class StringsResults(Type):
+class LifeResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~StringsResult]
+        results : typing.Sequence[~LifeResult]
         '''
-        self.results = [StringsResult.from_json(o) for o in results or []]
+        self.results = [LifeResult.from_json(o) for o in results or []]
 
 
-class ControllersChangeResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
+class StringsResult(Type):
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
-        result : ControllersChanges
+        result : typing.Sequence[str]
         '''
         self.error = Error.from_json(error) if error else None
-        self.result = ControllersChanges.from_json(result) if result else None
+        self.result = result
 
 
-class ControllersChangeResults(Type):
+class StringsWatchResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~ControllersChangeResult]
+        results : typing.Sequence[~StringsWatchResult]
         '''
-        self.results = [ControllersChangeResult.from_json(o) for o in results or []]
+        self.results = [StringsWatchResult.from_json(o) for o in results or []]
 
 
-class ControllersChanges(Type):
-    _toSchema = {'added': 'added', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed', 'demoted': 'demoted', 'converted': 'converted'}
-    _toPy = {'added': 'added', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed', 'demoted': 'demoted', 'converted': 'converted'}
-    def __init__(self, added=None, converted=None, demoted=None, maintained=None, promoted=None, removed=None):
+class AddSubnetParams(Type):
+    _toSchema = {'subnetproviderid': 'SubnetProviderId', 'spacetag': 'SpaceTag', 'subnettag': 'SubnetTag', 'zones': 'Zones'}
+    _toPy = {'SubnetTag': 'subnettag', 'SpaceTag': 'spacetag', 'Zones': 'zones', 'SubnetProviderId': 'subnetproviderid'}
+    def __init__(self, spacetag=None, subnetproviderid=None, subnettag=None, zones=None):
         '''
-        added : typing.Sequence[str]
-        converted : typing.Sequence[str]
-        demoted : typing.Sequence[str]
-        maintained : typing.Sequence[str]
-        promoted : typing.Sequence[str]
-        removed : typing.Sequence[str]
+        spacetag : str
+        subnetproviderid : str
+        subnettag : str
+        zones : typing.Sequence[str]
         '''
-        self.added = added
-        self.converted = converted
-        self.demoted = demoted
-        self.maintained = maintained
-        self.promoted = promoted
-        self.removed = removed
+        self.spacetag = spacetag
+        self.subnetproviderid = subnetproviderid
+        self.subnettag = subnettag
+        self.zones = zones
 
 
-class ControllersSpec(Type):
-    _toSchema = {'modeltag': 'ModelTag', 'num_controllers': 'num-controllers', 'constraints': 'constraints', 'placement': 'placement', 'series': 'series'}
-    _toPy = {'num-controllers': 'num_controllers', 'ModelTag': 'modeltag', 'constraints': 'constraints', 'placement': 'placement', 'series': 'series'}
-    def __init__(self, modeltag=None, constraints=None, num_controllers=None, placement=None, series=None):
+class AddSubnetsParams(Type):
+    _toSchema = {'subnets': 'Subnets'}
+    _toPy = {'Subnets': 'subnets'}
+    def __init__(self, subnets=None):
         '''
-        modeltag : str
-        constraints : Value
-        num_controllers : int
-        placement : typing.Sequence[str]
-        series : str
+        subnets : typing.Sequence[~AddSubnetParams]
         '''
-        self.modeltag = modeltag
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.num_controllers = num_controllers
-        self.placement = placement
-        self.series = series
+        self.subnets = [AddSubnetParams.from_json(o) for o in subnets or []]
 
 
-class ControllersSpecs(Type):
-    _toSchema = {'specs': 'Specs'}
-    _toPy = {'Specs': 'specs'}
-    def __init__(self, specs=None):
+class CreateSpaceParams(Type):
+    _toSchema = {'providerid': 'ProviderId', 'public': 'Public', 'spacetag': 'SpaceTag', 'subnettags': 'SubnetTags'}
+    _toPy = {'Public': 'public', 'SpaceTag': 'spacetag', 'SubnetTags': 'subnettags', 'ProviderId': 'providerid'}
+    def __init__(self, providerid=None, public=None, spacetag=None, subnettags=None):
         '''
-        specs : typing.Sequence[~ControllersSpec]
+        providerid : str
+        public : bool
+        spacetag : str
+        subnettags : typing.Sequence[str]
         '''
-        self.specs = [ControllersSpec.from_json(o) for o in specs or []]
+        self.providerid = providerid
+        self.public = public
+        self.spacetag = spacetag
+        self.subnettags = subnettags
 
 
-class HAMember(Type):
-    _toSchema = {'series': 'Series', 'publicaddress': 'PublicAddress', 'tag': 'Tag'}
-    _toPy = {'Tag': 'tag', 'PublicAddress': 'publicaddress', 'Series': 'series'}
-    def __init__(self, publicaddress=None, series=None, tag=None):
+class CreateSpacesParams(Type):
+    _toSchema = {'spaces': 'Spaces'}
+    _toPy = {'Spaces': 'spaces'}
+    def __init__(self, spaces=None):
         '''
-        publicaddress : Address
-        series : str
-        tag : str
+        spaces : typing.Sequence[~CreateSpaceParams]
         '''
-        self.publicaddress = Address.from_json(publicaddress) if publicaddress else None
-        self.series = series
-        self.tag = tag
+        self.spaces = [CreateSpaceParams.from_json(o) for o in spaces or []]
 
 
-class Member(Type):
-    _toSchema = {'hidden': 'Hidden', 'tags': 'Tags', 'buildindexes': 'BuildIndexes', 'address': 'Address', 'slavedelay': 'SlaveDelay', 'votes': 'Votes', 'id_': 'Id', 'arbiter': 'Arbiter', 'priority': 'Priority'}
-    _toPy = {'Tags': 'tags', 'SlaveDelay': 'slavedelay', 'Votes': 'votes', 'Arbiter': 'arbiter', 'Address': 'address', 'Hidden': 'hidden', 'Priority': 'priority', 'BuildIndexes': 'buildindexes', 'Id': 'id_'}
-    def __init__(self, address=None, arbiter=None, buildindexes=None, hidden=None, id_=None, priority=None, slavedelay=None, tags=None, votes=None):
+class DiscoverSpacesResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        address : str
-        arbiter : bool
-        buildindexes : bool
-        hidden : bool
-        id_ : int
-        priority : float
-        slavedelay : int
-        tags : typing.Mapping[str, str]
-        votes : int
+        results : typing.Sequence[~ProviderSpace]
         '''
-        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
+        self.results = [ProviderSpace.from_json(o) for o in results or []]
 
 
-class MongoUpgradeResults(Type):
-    _toSchema = {'members': 'Members', 'master': 'Master', 'rsmembers': 'RsMembers'}
-    _toPy = {'Master': 'master', 'Members': 'members', 'RsMembers': 'rsmembers'}
-    def __init__(self, master=None, members=None, rsmembers=None):
+class ListSubnetsResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        master : HAMember
-        members : typing.Sequence[~HAMember]
-        rsmembers : typing.Sequence[~Member]
+        results : typing.Sequence[~Subnet]
         '''
-        self.master = HAMember.from_json(master) if master else None
-        self.members = [HAMember.from_json(o) for o in members or []]
-        self.rsmembers = [Member.from_json(o) for o in rsmembers or []]
+        self.results = [Subnet.from_json(o) for o in results or []]
 
 
-class ResumeReplicationParams(Type):
-    _toSchema = {'members': 'Members'}
-    _toPy = {'Members': 'members'}
-    def __init__(self, members=None):
+class ProviderSpace(Type):
+    _toSchema = {'providerid': 'ProviderId', 'subnets': 'Subnets', 'error': 'Error', 'name': 'Name'}
+    _toPy = {'ProviderId': 'providerid', 'Subnets': 'subnets', 'Error': 'error', 'Name': 'name'}
+    def __init__(self, error=None, name=None, providerid=None, subnets=None):
         '''
-        members : typing.Sequence[~Member]
+        error : Error
+        name : str
+        providerid : str
+        subnets : typing.Sequence[~Subnet]
         '''
-        self.members = [Member.from_json(o) for o in members or []]
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+        self.providerid = providerid
+        self.subnets = [Subnet.from_json(o) for o in subnets or []]
 
 
-class UpgradeMongoParams(Type):
-    _toSchema = {'minor': 'Minor', 'major': 'Major', 'storageengine': 'StorageEngine', 'patch': 'Patch'}
-    _toPy = {'StorageEngine': 'storageengine', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch'}
-    def __init__(self, major=None, minor=None, patch=None, storageengine=None):
+class Subnet(Type):
+    _toSchema = {'staticrangelowip': 'StaticRangeLowIP', 'spacetag': 'SpaceTag', 'cidr': 'CIDR', 'providerid': 'ProviderId', 'life': 'Life', 'staticrangehighip': 'StaticRangeHighIP', 'zones': 'Zones', 'vlantag': 'VLANTag', 'status': 'Status'}
+    _toPy = {'StaticRangeHighIP': 'staticrangehighip', 'VLANTag': 'vlantag', 'Zones': 'zones', 'SpaceTag': 'spacetag', 'Life': 'life', 'Status': 'status', 'ProviderId': 'providerid', 'StaticRangeLowIP': 'staticrangelowip', 'CIDR': 'cidr'}
+    def __init__(self, cidr=None, life=None, providerid=None, spacetag=None, staticrangehighip=None, staticrangelowip=None, status=None, vlantag=None, zones=None):
         '''
-        major : int
-        minor : int
-        patch : str
-        storageengine : str
+        cidr : str
+        life : str
+        providerid : str
+        spacetag : str
+        staticrangehighip : typing.Sequence[int]
+        staticrangelowip : typing.Sequence[int]
+        status : str
+        vlantag : int
+        zones : typing.Sequence[str]
         '''
-        self.major = major
-        self.minor = minor
-        self.patch = patch
-        self.storageengine = storageengine
+        self.cidr = cidr
+        self.life = life
+        self.providerid = providerid
+        self.spacetag = spacetag
+        self.staticrangehighip = staticrangehighip
+        self.staticrangelowip = staticrangelowip
+        self.status = status
+        self.vlantag = vlantag
+        self.zones = zones
 
 
-class Version(Type):
-    _toSchema = {'minor': 'Minor', 'major': 'Major', 'storageengine': 'StorageEngine', 'patch': 'Patch'}
-    _toPy = {'StorageEngine': 'storageengine', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch'}
-    def __init__(self, major=None, minor=None, patch=None, storageengine=None):
+class SubnetsFilters(Type):
+    _toSchema = {'spacetag': 'SpaceTag', 'zone': 'Zone'}
+    _toPy = {'SpaceTag': 'spacetag', 'Zone': 'zone'}
+    def __init__(self, spacetag=None, zone=None):
         '''
-        major : int
-        minor : int
-        patch : str
-        storageengine : str
+        spacetag : str
+        zone : str
         '''
-        self.major = major
-        self.minor = minor
-        self.patch = patch
-        self.storageengine = storageengine
+        self.spacetag = spacetag
+        self.zone = zone
 
 
-class SSHHostKeySet(Type):
-    _toSchema = {'entity_keys': 'entity-keys'}
-    _toPy = {'entity-keys': 'entity_keys'}
-    def __init__(self, entity_keys=None):
+class BlockDevice(Type):
+    _toSchema = {'inuse': 'InUse', 'busaddress': 'BusAddress', 'devicename': 'DeviceName', 'size': 'Size', 'filesystemtype': 'FilesystemType', 'uuid': 'UUID', 'hardwareid': 'HardwareId', 'label': 'Label', 'mountpoint': 'MountPoint', 'devicelinks': 'DeviceLinks'}
+    _toPy = {'FilesystemType': 'filesystemtype', 'Label': 'label', 'Size': 'size', 'UUID': 'uuid', 'MountPoint': 'mountpoint', 'BusAddress': 'busaddress', 'InUse': 'inuse', 'DeviceName': 'devicename', 'DeviceLinks': 'devicelinks', 'HardwareId': 'hardwareid'}
+    def __init__(self, busaddress=None, devicelinks=None, devicename=None, filesystemtype=None, hardwareid=None, inuse=None, label=None, mountpoint=None, size=None, uuid=None):
         '''
-        entity_keys : typing.Sequence[~SSHHostKeys]
+        busaddress : str
+        devicelinks : typing.Sequence[str]
+        devicename : str
+        filesystemtype : str
+        hardwareid : str
+        inuse : bool
+        label : str
+        mountpoint : str
+        size : int
+        uuid : str
         '''
-        self.entity_keys = [SSHHostKeys.from_json(o) for o in entity_keys or []]
+        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 SSHHostKeys(Type):
-    _toSchema = {'tag': 'tag', 'public_keys': 'public-keys'}
-    _toPy = {'public-keys': 'public_keys', 'tag': 'tag'}
-    def __init__(self, public_keys=None, tag=None):
+class MachineBlockDevices(Type):
+    _toSchema = {'blockdevices': 'blockdevices', 'machine': 'machine'}
+    _toPy = {'blockdevices': 'blockdevices', 'machine': 'machine'}
+    def __init__(self, blockdevices=None, machine=None):
         '''
-        public_keys : typing.Sequence[str]
-        tag : str
+        blockdevices : typing.Sequence[~BlockDevice]
+        machine : str
         '''
-        self.public_keys = public_keys
-        self.tag = tag
+        self.blockdevices = [BlockDevice.from_json(o) for o in blockdevices or []]
+        self.machine = machine
 
 
-class ImageFilterParams(Type):
-    _toSchema = {'images': 'images'}
-    _toPy = {'images': 'images'}
-    def __init__(self, images=None):
+class SetMachineBlockDevices(Type):
+    _toSchema = {'machineblockdevices': 'machineblockdevices'}
+    _toPy = {'machineblockdevices': 'machineblockdevices'}
+    def __init__(self, machineblockdevices=None):
         '''
-        images : typing.Sequence[~ImageSpec]
+        machineblockdevices : typing.Sequence[~MachineBlockDevices]
         '''
-        self.images = [ImageSpec.from_json(o) for o in images or []]
+        self.machineblockdevices = [MachineBlockDevices.from_json(o) for o in machineblockdevices or []]
 
 
-class ImageMetadata(Type):
-    _toSchema = {'series': 'series', 'arch': 'arch', 'kind': 'kind', 'created': 'created', 'url': 'url'}
-    _toPy = {'series': 'series', 'arch': 'arch', 'kind': 'kind', 'created': 'created', 'url': 'url'}
-    def __init__(self, arch=None, created=None, kind=None, series=None, url=None):
+class MachineStorageId(Type):
+    _toSchema = {'attachmenttag': 'attachmenttag', 'machinetag': 'machinetag'}
+    _toPy = {'attachmenttag': 'attachmenttag', 'machinetag': 'machinetag'}
+    def __init__(self, attachmenttag=None, machinetag=None):
         '''
-        arch : str
-        created : str
-        kind : str
-        series : str
-        url : str
+        attachmenttag : str
+        machinetag : str
         '''
-        self.arch = arch
-        self.created = created
-        self.kind = kind
-        self.series = series
-        self.url = url
+        self.attachmenttag = attachmenttag
+        self.machinetag = machinetag
 
 
-class ImageSpec(Type):
-    _toSchema = {'series': 'series', 'arch': 'arch', 'kind': 'kind'}
-    _toPy = {'series': 'series', 'arch': 'arch', 'kind': 'kind'}
-    def __init__(self, arch=None, kind=None, series=None):
+class MachineStorageIdsWatchResult(Type):
+    _toSchema = {'changes': 'Changes', 'machinestorageidswatcherid': 'MachineStorageIdsWatcherId', 'error': 'Error'}
+    _toPy = {'Changes': 'changes', 'Error': 'error', 'MachineStorageIdsWatcherId': 'machinestorageidswatcherid'}
+    def __init__(self, changes=None, error=None, machinestorageidswatcherid=None):
         '''
-        arch : str
-        kind : str
-        series : str
+        changes : typing.Sequence[~MachineStorageId]
+        error : Error
+        machinestorageidswatcherid : str
         '''
-        self.arch = arch
-        self.kind = kind
-        self.series = series
+        self.changes = [MachineStorageId.from_json(o) for o in changes or []]
+        self.error = Error.from_json(error) if error else None
+        self.machinestorageidswatcherid = machinestorageidswatcherid
 
 
-class ListImageResult(Type):
-    _toSchema = {'result': 'result'}
-    _toPy = {'result': 'result'}
-    def __init__(self, result=None):
+class BoolResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        result : typing.Sequence[~ImageMetadata]
+        results : typing.Sequence[~BoolResult]
         '''
-        self.result = [ImageMetadata.from_json(o) for o in result or []]
+        self.results = [BoolResult.from_json(o) for o in results or []]
 
 
-class CloudImageMetadata(Type):
-    _toSchema = {'root_storage_type': 'root_storage_type', 'virt_type': 'virt_type', 'version': 'version', 'image_id': 'image_id', 'series': 'series', 'source': 'source', 'root_storage_size': 'root_storage_size', 'arch': 'arch', 'stream': 'stream', 'region': 'region', 'priority': 'priority'}
-    _toPy = {'root_storage_type': 'root_storage_type', 'virt_type': 'virt_type', 'version': 'version', 'image_id': 'image_id', 'series': 'series', 'source': 'source', 'root_storage_size': 'root_storage_size', 'arch': 'arch', 'stream': 'stream', 'region': 'region', 'priority': 'priority'}
-    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):
+class MachinePortRange(Type):
+    _toSchema = {'unittag': 'UnitTag', 'portrange': 'PortRange', 'relationtag': 'RelationTag'}
+    _toPy = {'RelationTag': 'relationtag', 'UnitTag': 'unittag', 'PortRange': 'portrange'}
+    def __init__(self, portrange=None, relationtag=None, unittag=None):
         '''
-        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
+        portrange : PortRange
+        relationtag : str
+        unittag : 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
+        self.portrange = PortRange.from_json(portrange) if portrange else None
+        self.relationtag = relationtag
+        self.unittag = unittag
 
 
-class CloudImageMetadataList(Type):
-    _toSchema = {'metadata': 'metadata'}
-    _toPy = {'metadata': 'metadata'}
-    def __init__(self, metadata=None):
+class MachinePorts(Type):
+    _toSchema = {'subnettag': 'SubnetTag', 'machinetag': 'MachineTag'}
+    _toPy = {'MachineTag': 'machinetag', 'SubnetTag': 'subnettag'}
+    def __init__(self, machinetag=None, subnettag=None):
         '''
-        metadata : typing.Sequence[~CloudImageMetadata]
+        machinetag : str
+        subnettag : str
         '''
-        self.metadata = [CloudImageMetadata.from_json(o) for o in metadata or []]
-
-
-class ImageMetadataFilter(Type):
-    _toSchema = {'series': 'series', 'virt_type': 'virt_type', 'stream': 'stream', 'arches': 'arches', 'root_storage_type': 'root-storage-type', 'region': 'region'}
-    _toPy = {'arches': 'arches', 'virt_type': 'virt_type', 'stream': 'stream', 'series': 'series', 'root-storage-type': 'root_storage_type', 'region': 'region'}
-    def __init__(self, arches=None, region=None, root_storage_type=None, series=None, stream=None, virt_type=None):
-        '''
-        arches : typing.Sequence[str]
-        region : str
-        root_storage_type : str
-        series : typing.Sequence[str]
-        stream : str
-        virt_type : str
-        '''
-        self.arches = arches
-        self.region = region
-        self.root_storage_type = root_storage_type
-        self.series = series
-        self.stream = stream
-        self.virt_type = virt_type
-
-
-class ListCloudImageMetadataResult(Type):
-    _toSchema = {'result': 'result'}
-    _toPy = {'result': 'result'}
-    def __init__(self, result=None):
-        '''
-        result : typing.Sequence[~CloudImageMetadata]
-        '''
-        self.result = [CloudImageMetadata.from_json(o) for o in result or []]
+        self.machinetag = machinetag
+        self.subnettag = subnettag
 
 
-class MetadataImageIds(Type):
-    _toSchema = {'image_ids': 'image_ids'}
-    _toPy = {'image_ids': 'image_ids'}
-    def __init__(self, image_ids=None):
+class MachinePortsParams(Type):
+    _toSchema = {'params': 'Params'}
+    _toPy = {'Params': 'params'}
+    def __init__(self, params=None):
         '''
-        image_ids : typing.Sequence[str]
+        params : typing.Sequence[~MachinePorts]
         '''
-        self.image_ids = image_ids
+        self.params = [MachinePorts.from_json(o) for o in params or []]
 
 
-class MetadataSaveParams(Type):
-    _toSchema = {'metadata': 'metadata'}
-    _toPy = {'metadata': 'metadata'}
-    def __init__(self, metadata=None):
+class MachinePortsResult(Type):
+    _toSchema = {'ports': 'Ports', 'error': 'Error'}
+    _toPy = {'Error': 'error', 'Ports': 'ports'}
+    def __init__(self, error=None, ports=None):
         '''
-        metadata : typing.Sequence[~CloudImageMetadataList]
+        error : Error
+        ports : typing.Sequence[~MachinePortRange]
         '''
-        self.metadata = [CloudImageMetadataList.from_json(o) for o in metadata or []]
+        self.error = Error.from_json(error) if error else None
+        self.ports = [MachinePortRange.from_json(o) for o in ports or []]
 
 
-class EntityStatusArgs(Type):
-    _toSchema = {'info': 'Info', 'status': 'Status', 'tag': 'Tag', 'data': 'Data'}
-    _toPy = {'Info': 'info', 'Status': 'status', 'Tag': 'tag', 'Data': 'data'}
-    def __init__(self, data=None, info=None, status=None, tag=None):
+class MachinePortsResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        data : typing.Mapping[str, typing.Any]
-        info : str
-        status : str
-        tag : str
+        results : typing.Sequence[~MachinePortsResult]
         '''
-        self.data = data
-        self.info = info
-        self.status = status
-        self.tag = tag
+        self.results = [MachinePortsResult.from_json(o) for o in results or []]
 
 
-class MachineAddresses(Type):
-    _toSchema = {'addresses': 'Addresses', 'tag': 'Tag'}
-    _toPy = {'Tag': 'tag', 'Addresses': 'addresses'}
-    def __init__(self, addresses=None, tag=None):
+class NotifyWatchResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        addresses : typing.Sequence[~Address]
-        tag : str
+        results : typing.Sequence[~NotifyWatchResult]
         '''
-        self.addresses = [Address.from_json(o) for o in addresses or []]
-        self.tag = tag
+        self.results = [NotifyWatchResult.from_json(o) for o in results or []]
 
 
-class MachineAddressesResult(Type):
-    _toSchema = {'addresses': 'Addresses', 'error': 'Error'}
-    _toPy = {'Error': 'error', 'Addresses': 'addresses'}
-    def __init__(self, addresses=None, error=None):
+class PortRange(Type):
+    _toSchema = {'toport': 'ToPort', 'fromport': 'FromPort', 'protocol': 'Protocol'}
+    _toPy = {'FromPort': 'fromport', 'Protocol': 'protocol', 'ToPort': 'toport'}
+    def __init__(self, fromport=None, protocol=None, toport=None):
         '''
-        addresses : typing.Sequence[~Address]
-        error : Error
+        fromport : int
+        protocol : str
+        toport : int
         '''
-        self.addresses = [Address.from_json(o) for o in addresses or []]
-        self.error = Error.from_json(error) if error else None
+        self.fromport = fromport
+        self.protocol = protocol
+        self.toport = toport
 
 
-class MachineAddressesResults(Type):
+class StringResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~MachineAddressesResult]
-        '''
-        self.results = [MachineAddressesResult.from_json(o) for o in results or []]
-
-
-class SetMachinesAddresses(Type):
-    _toSchema = {'machineaddresses': 'MachineAddresses'}
-    _toPy = {'MachineAddresses': 'machineaddresses'}
-    def __init__(self, machineaddresses=None):
-        '''
-        machineaddresses : typing.Sequence[~MachineAddresses]
+        results : typing.Sequence[~StringResult]
         '''
-        self.machineaddresses = [MachineAddresses.from_json(o) for o in machineaddresses or []]
+        self.results = [StringResult.from_json(o) for o in results or []]
 
 
-class SetStatus(Type):
-    _toSchema = {'entities': 'Entities'}
-    _toPy = {'Entities': 'entities'}
-    def __init__(self, entities=None):
+class StringsResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        entities : typing.Sequence[~EntityStatusArgs]
+        results : typing.Sequence[~StringsResult]
         '''
-        self.entities = [EntityStatusArgs.from_json(o) for o in entities or []]
+        self.results = [StringsResult.from_json(o) for o in results or []]
 
 
-class StatusResult(Type):
-    _toSchema = {'info': 'Info', 'status': 'Status', 'data': 'Data', 'error': 'Error', 'since': 'Since', 'id_': 'Id', 'life': 'Life'}
-    _toPy = {'Status': 'status', 'Since': 'since', 'Life': 'life', 'Info': 'info', 'Error': 'error', 'Data': 'data', 'Id': 'id_'}
-    def __init__(self, data=None, error=None, id_=None, info=None, life=None, since=None, status=None):
+class ControllersChangeResult(Type):
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
-        data : typing.Mapping[str, typing.Any]
         error : Error
-        id_ : str
-        info : str
-        life : str
-        since : str
-        status : str
+        result : ControllersChanges
         '''
-        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
+        self.result = ControllersChanges.from_json(result) if result else None
 
 
-class StatusResults(Type):
+class ControllersChangeResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~StatusResult]
+        results : typing.Sequence[~ControllersChangeResult]
         '''
-        self.results = [StatusResult.from_json(o) for o in results or []]
+        self.results = [ControllersChangeResult.from_json(o) for o in results or []]
 
 
-class ListSSHKeys(Type):
-    _toSchema = {'mode': 'Mode', 'entities': 'Entities'}
-    _toPy = {'Mode': 'mode', 'Entities': 'entities'}
-    def __init__(self, entities=None, mode=None):
+class ControllersChanges(Type):
+    _toSchema = {'maintained': 'maintained', 'added': 'added', 'removed': 'removed', 'promoted': 'promoted', 'converted': 'converted', 'demoted': 'demoted'}
+    _toPy = {'maintained': 'maintained', 'added': 'added', 'removed': 'removed', 'promoted': 'promoted', 'converted': 'converted', 'demoted': 'demoted'}
+    def __init__(self, added=None, converted=None, demoted=None, maintained=None, promoted=None, removed=None):
         '''
-        entities : Entities
-        mode : bool
+        added : typing.Sequence[str]
+        converted : typing.Sequence[str]
+        demoted : typing.Sequence[str]
+        maintained : typing.Sequence[str]
+        promoted : typing.Sequence[str]
+        removed : typing.Sequence[str]
         '''
-        self.entities = Entities.from_json(entities) if entities else None
-        self.mode = mode
+        self.added = added
+        self.converted = converted
+        self.demoted = demoted
+        self.maintained = maintained
+        self.promoted = promoted
+        self.removed = removed
 
 
-class ModifyUserSSHKeys(Type):
-    _toSchema = {'keys': 'Keys', 'user': 'User'}
-    _toPy = {'Keys': 'keys', 'User': 'user'}
-    def __init__(self, keys=None, user=None):
+class ControllersSpec(Type):
+    _toSchema = {'constraints': 'constraints', 'modeltag': 'ModelTag', 'num_controllers': 'num-controllers', 'placement': 'placement', 'series': 'series'}
+    _toPy = {'ModelTag': 'modeltag', 'series': 'series', 'num-controllers': 'num_controllers', 'placement': 'placement', 'constraints': 'constraints'}
+    def __init__(self, modeltag=None, constraints=None, num_controllers=None, placement=None, series=None):
         '''
-        keys : typing.Sequence[str]
-        user : str
+        modeltag : str
+        constraints : Value
+        num_controllers : int
+        placement : typing.Sequence[str]
+        series : str
         '''
-        self.keys = keys
-        self.user = user
+        self.modeltag = modeltag
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.num_controllers = num_controllers
+        self.placement = placement
+        self.series = series
 
 
-class ClaimLeadershipBulkParams(Type):
-    _toSchema = {'params': 'Params'}
-    _toPy = {'Params': 'params'}
-    def __init__(self, params=None):
+class ControllersSpecs(Type):
+    _toSchema = {'specs': 'Specs'}
+    _toPy = {'Specs': 'specs'}
+    def __init__(self, specs=None):
         '''
-        params : typing.Sequence[~ClaimLeadershipParams]
+        specs : typing.Sequence[~ControllersSpec]
         '''
-        self.params = [ClaimLeadershipParams.from_json(o) for o in params or []]
+        self.specs = [ControllersSpec.from_json(o) for o in specs or []]
 
 
-class ClaimLeadershipBulkResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class HAMember(Type):
+    _toSchema = {'publicaddress': 'PublicAddress', 'series': 'Series', 'tag': 'Tag'}
+    _toPy = {'Tag': 'tag', 'PublicAddress': 'publicaddress', 'Series': 'series'}
+    def __init__(self, publicaddress=None, series=None, tag=None):
         '''
-        results : typing.Sequence[~ErrorResult]
+        publicaddress : Address
+        series : str
+        tag : str
         '''
-        self.results = [ErrorResult.from_json(o) for o in results or []]
+        self.publicaddress = Address.from_json(publicaddress) if publicaddress else None
+        self.series = series
+        self.tag = tag
 
 
-class ClaimLeadershipParams(Type):
-    _toSchema = {'unittag': 'UnitTag', 'durationseconds': 'DurationSeconds', 'servicetag': 'ServiceTag'}
-    _toPy = {'UnitTag': 'unittag', 'DurationSeconds': 'durationseconds', 'ServiceTag': 'servicetag'}
-    def __init__(self, durationseconds=None, servicetag=None, unittag=None):
+class Member(Type):
+    _toSchema = {'priority': 'Priority', 'slavedelay': 'SlaveDelay', 'id_': 'Id', 'hidden': 'Hidden', 'votes': 'Votes', 'buildindexes': 'BuildIndexes', 'address': 'Address', 'tags': 'Tags', 'arbiter': 'Arbiter'}
+    _toPy = {'Hidden': 'hidden', 'Priority': 'priority', 'SlaveDelay': 'slavedelay', 'Id': 'id_', 'Arbiter': 'arbiter', 'Votes': 'votes', 'Tags': 'tags', 'Address': 'address', 'BuildIndexes': 'buildindexes'}
+    def __init__(self, address=None, arbiter=None, buildindexes=None, hidden=None, id_=None, priority=None, slavedelay=None, tags=None, votes=None):
         '''
-        durationseconds : float
-        servicetag : str
-        unittag : str
+        address : str
+        arbiter : bool
+        buildindexes : bool
+        hidden : bool
+        id_ : int
+        priority : float
+        slavedelay : int
+        tags : typing.Mapping[str, str]
+        votes : int
         '''
-        self.durationseconds = durationseconds
-        self.servicetag = servicetag
-        self.unittag = unittag
+        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 ServiceTag(Type):
-    _toSchema = {'name': 'Name'}
-    _toPy = {'Name': 'name'}
-    def __init__(self, name=None):
+class MongoUpgradeResults(Type):
+    _toSchema = {'members': 'Members', 'master': 'Master', 'rsmembers': 'RsMembers'}
+    _toPy = {'Master': 'master', 'Members': 'members', 'RsMembers': 'rsmembers'}
+    def __init__(self, master=None, members=None, rsmembers=None):
         '''
-        name : str
+        master : HAMember
+        members : typing.Sequence[~HAMember]
+        rsmembers : typing.Sequence[~Member]
         '''
-        self.name = name
-
-
-class ActionExecutionResult(Type):
-    _toSchema = {'message': 'message', 'results': 'results', 'status': 'status', 'actiontag': 'actiontag'}
-    _toPy = {'message': 'message', 'results': 'results', 'status': 'status', 'actiontag': 'actiontag'}
-    def __init__(self, actiontag=None, message=None, results=None, status=None):
-        '''
-        actiontag : str
-        message : str
-        results : typing.Mapping[str, typing.Any]
-        status : str
-        '''
-        self.actiontag = actiontag
-        self.message = message
-        self.results = results
-        self.status = status
+        self.master = HAMember.from_json(master) if master else None
+        self.members = [HAMember.from_json(o) for o in members or []]
+        self.rsmembers = [Member.from_json(o) for o in rsmembers or []]
 
 
-class ActionExecutionResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class ResumeReplicationParams(Type):
+    _toSchema = {'members': 'Members'}
+    _toPy = {'Members': 'members'}
+    def __init__(self, members=None):
         '''
-        results : typing.Sequence[~ActionExecutionResult]
+        members : typing.Sequence[~Member]
         '''
-        self.results = [ActionExecutionResult.from_json(o) for o in results or []]
+        self.members = [Member.from_json(o) for o in members or []]
 
 
-class JobsResult(Type):
-    _toSchema = {'jobs': 'Jobs', 'error': 'Error'}
-    _toPy = {'Error': 'error', 'Jobs': 'jobs'}
-    def __init__(self, error=None, jobs=None):
+class UpgradeMongoParams(Type):
+    _toSchema = {'minor': 'Minor', 'storageengine': 'StorageEngine', 'patch': 'Patch', 'major': 'Major'}
+    _toPy = {'Patch': 'patch', 'Major': 'major', 'StorageEngine': 'storageengine', 'Minor': 'minor'}
+    def __init__(self, major=None, minor=None, patch=None, storageengine=None):
         '''
-        error : Error
-        jobs : typing.Sequence[str]
+        major : int
+        minor : int
+        patch : str
+        storageengine : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.jobs = jobs
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+        self.storageengine = storageengine
 
 
-class JobsResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class Version(Type):
+    _toSchema = {'minor': 'Minor', 'storageengine': 'StorageEngine', 'patch': 'Patch', 'major': 'Major'}
+    _toPy = {'Patch': 'patch', 'Major': 'major', 'StorageEngine': 'storageengine', 'Minor': 'minor'}
+    def __init__(self, major=None, minor=None, patch=None, storageengine=None):
         '''
-        results : typing.Sequence[~JobsResult]
+        major : int
+        minor : int
+        patch : str
+        storageengine : str
         '''
-        self.results = [JobsResult.from_json(o) for o in results or []]
+        self.major = major
+        self.minor = minor
+        self.patch = patch
+        self.storageengine = storageengine
 
 
-class NetworkConfig(Type):
-    _toSchema = {'dnssearchdomains': 'DNSSearchDomains', 'gatewayaddress': 'GatewayAddress', 'providerspaceid': 'ProviderSpaceId', 'providersubnetid': 'ProviderSubnetId', 'noautostart': 'NoAutoStart', 'mtu': 'MTU', 'providervlanid': 'ProviderVLANId', 'provideraddressid': 'ProviderAddressId', 'dnsservers': 'DNSServers', 'interfacename': 'InterfaceName', 'providerid': 'ProviderId', 'vlantag': 'VLANTag', 'cidr': 'CIDR', 'address': 'Address', 'parentinterfacename': 'ParentInterfaceName', 'interfacetype': 'InterfaceType', 'disabled': 'Disabled', 'deviceindex': 'DeviceIndex', 'configtype': 'ConfigType', 'macaddress': 'MACAddress'}
-    _toPy = {'DeviceIndex': 'deviceindex', 'MTU': 'mtu', 'Disabled': 'disabled', 'ProviderId': 'providerid', 'CIDR': 'cidr', 'MACAddress': 'macaddress', 'InterfaceType': 'interfacetype', 'GatewayAddress': 'gatewayaddress', 'InterfaceName': 'interfacename', 'NoAutoStart': 'noautostart', 'DNSServers': 'dnsservers', 'ParentInterfaceName': 'parentinterfacename', 'VLANTag': 'vlantag', 'ProviderVLANId': 'providervlanid', 'ProviderSubnetId': 'providersubnetid', 'ProviderSpaceId': 'providerspaceid', 'Address': 'address', 'ConfigType': 'configtype', 'ProviderAddressId': 'provideraddressid', 'DNSSearchDomains': 'dnssearchdomains'}
-    def __init__(self, address=None, cidr=None, configtype=None, dnssearchdomains=None, dnsservers=None, deviceindex=None, disabled=None, gatewayaddress=None, interfacename=None, interfacetype=None, macaddress=None, mtu=None, noautostart=None, parentinterfacename=None, provideraddressid=None, providerid=None, providerspaceid=None, providersubnetid=None, providervlanid=None, vlantag=None):
+class SSHHostKeySet(Type):
+    _toSchema = {'entity_keys': 'entity-keys'}
+    _toPy = {'entity-keys': 'entity_keys'}
+    def __init__(self, entity_keys=None):
         '''
-        address : str
-        cidr : str
-        configtype : str
-        dnssearchdomains : typing.Sequence[str]
-        dnsservers : typing.Sequence[str]
-        deviceindex : int
-        disabled : bool
-        gatewayaddress : str
-        interfacename : str
-        interfacetype : str
-        macaddress : str
-        mtu : int
-        noautostart : bool
-        parentinterfacename : str
-        provideraddressid : str
-        providerid : str
-        providerspaceid : str
-        providersubnetid : str
-        providervlanid : str
-        vlantag : int
+        entity_keys : typing.Sequence[~SSHHostKeys]
         '''
-        self.address = address
-        self.cidr = cidr
-        self.configtype = configtype
-        self.dnssearchdomains = dnssearchdomains
-        self.dnsservers = dnsservers
-        self.deviceindex = deviceindex
-        self.disabled = disabled
-        self.gatewayaddress = gatewayaddress
-        self.interfacename = interfacename
-        self.interfacetype = interfacetype
-        self.macaddress = macaddress
-        self.mtu = mtu
-        self.noautostart = noautostart
-        self.parentinterfacename = parentinterfacename
-        self.provideraddressid = provideraddressid
-        self.providerid = providerid
-        self.providerspaceid = providerspaceid
-        self.providersubnetid = providersubnetid
-        self.providervlanid = providervlanid
-        self.vlantag = vlantag
+        self.entity_keys = [SSHHostKeys.from_json(o) for o in entity_keys or []]
 
 
-class SetMachineNetworkConfig(Type):
-    _toSchema = {'config': 'Config', 'tag': 'Tag'}
-    _toPy = {'Tag': 'tag', 'Config': 'config'}
-    def __init__(self, config=None, tag=None):
+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):
         '''
-        config : typing.Sequence[~NetworkConfig]
+        public_keys : typing.Sequence[str]
         tag : str
         '''
-        self.config = [NetworkConfig.from_json(o) for o in config or []]
+        self.public_keys = public_keys
         self.tag = tag
 
 
-class MeterStatusResult(Type):
-    _toSchema = {'info': 'Info', 'error': 'Error', 'code': 'Code'}
-    _toPy = {'Info': 'info', 'Error': 'error', 'Code': 'code'}
-    def __init__(self, code=None, error=None, info=None):
+class ImageFilterParams(Type):
+    _toSchema = {'images': 'images'}
+    _toPy = {'images': 'images'}
+    def __init__(self, images=None):
         '''
-        code : str
-        error : Error
-        info : str
+        images : typing.Sequence[~ImageSpec]
         '''
-        self.code = code
-        self.error = Error.from_json(error) if error else None
-        self.info = info
+        self.images = [ImageSpec.from_json(o) for o in images or []]
 
 
-class MeterStatusResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class ImageMetadata(Type):
+    _toSchema = {'created': 'created', 'arch': 'arch', 'kind': 'kind', 'series': 'series', 'url': 'url'}
+    _toPy = {'created': 'created', 'arch': 'arch', 'kind': 'kind', 'series': 'series', 'url': 'url'}
+    def __init__(self, arch=None, created=None, kind=None, series=None, url=None):
         '''
-        results : typing.Sequence[~MeterStatusResult]
+        arch : str
+        created : str
+        kind : str
+        series : str
+        url : str
         '''
-        self.results = [MeterStatusResult.from_json(o) for o in results or []]
+        self.arch = arch
+        self.created = created
+        self.kind = kind
+        self.series = series
+        self.url = url
 
 
-class Metric(Type):
-    _toSchema = {'key': 'Key', 'time': 'Time', 'value': 'Value'}
-    _toPy = {'Time': 'time', 'Value': 'value', 'Key': 'key'}
-    def __init__(self, key=None, time=None, value=None):
+class ImageSpec(Type):
+    _toSchema = {'series': 'series', 'arch': 'arch', 'kind': 'kind'}
+    _toPy = {'series': 'series', 'arch': 'arch', 'kind': 'kind'}
+    def __init__(self, arch=None, kind=None, series=None):
         '''
-        key : str
-        time : str
-        value : str
+        arch : str
+        kind : str
+        series : str
         '''
-        self.key = key
-        self.time = time
-        self.value = value
+        self.arch = arch
+        self.kind = kind
+        self.series = series
 
 
-class MetricBatch(Type):
-    _toSchema = {'charmurl': 'CharmURL', 'metrics': 'Metrics', 'created': 'Created', 'uuid': 'UUID'}
-    _toPy = {'Metrics': 'metrics', 'CharmURL': 'charmurl', 'Created': 'created', 'UUID': 'uuid'}
-    def __init__(self, charmurl=None, created=None, metrics=None, uuid=None):
+class ListImageResult(Type):
+    _toSchema = {'result': 'result'}
+    _toPy = {'result': 'result'}
+    def __init__(self, result=None):
         '''
-        charmurl : str
-        created : str
-        metrics : typing.Sequence[~Metric]
-        uuid : str
+        result : typing.Sequence[~ImageMetadata]
         '''
-        self.charmurl = charmurl
-        self.created = created
-        self.metrics = [Metric.from_json(o) for o in metrics or []]
-        self.uuid = uuid
+        self.result = [ImageMetadata.from_json(o) for o in result or []]
 
 
-class MetricBatchParam(Type):
-    _toSchema = {'batch': 'Batch', 'tag': 'Tag'}
-    _toPy = {'Tag': 'tag', 'Batch': 'batch'}
-    def __init__(self, batch=None, tag=None):
+class CloudImageMetadata(Type):
+    _toSchema = {'image_id': 'image_id', 'priority': 'priority', 'series': 'series', 'region': 'region', 'virt_type': 'virt_type', 'version': 'version', 'root_storage_size': 'root_storage_size', 'stream': 'stream', 'arch': 'arch', 'source': 'source', 'root_storage_type': 'root_storage_type'}
+    _toPy = {'image_id': 'image_id', 'priority': 'priority', 'series': 'series', 'region': 'region', 'virt_type': 'virt_type', 'version': 'version', 'root_storage_size': 'root_storage_size', 'stream': 'stream', 'arch': 'arch', 'source': 'source', 'root_storage_type': 'root_storage_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):
         '''
-        batch : MetricBatch
-        tag : str
+        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.batch = MetricBatch.from_json(batch) if batch else None
-        self.tag = tag
+        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 MetricBatchParams(Type):
-    _toSchema = {'batches': 'Batches'}
-    _toPy = {'Batches': 'batches'}
-    def __init__(self, batches=None):
+class CloudImageMetadataList(Type):
+    _toSchema = {'metadata': 'metadata'}
+    _toPy = {'metadata': 'metadata'}
+    def __init__(self, metadata=None):
         '''
-        batches : typing.Sequence[~MetricBatchParam]
+        metadata : typing.Sequence[~CloudImageMetadata]
         '''
-        self.batches = [MetricBatchParam.from_json(o) for o in batches or []]
+        self.metadata = [CloudImageMetadata.from_json(o) for o in metadata or []]
 
 
-class EntityMetrics(Type):
-    _toSchema = {'error': 'error', 'metrics': 'metrics'}
-    _toPy = {'error': 'error', 'metrics': 'metrics'}
-    def __init__(self, error=None, metrics=None):
+class ImageMetadataFilter(Type):
+    _toSchema = {'virt_type': 'virt_type', 'series': 'series', 'region': 'region', 'arches': 'arches', 'stream': 'stream', 'root_storage_type': 'root-storage-type'}
+    _toPy = {'virt_type': 'virt_type', 'series': 'series', 'region': 'region', 'arches': 'arches', 'stream': 'stream', 'root-storage-type': 'root_storage_type'}
+    def __init__(self, arches=None, region=None, root_storage_type=None, series=None, stream=None, virt_type=None):
         '''
-        error : Error
-        metrics : typing.Sequence[~MetricResult]
+        arches : typing.Sequence[str]
+        region : str
+        root_storage_type : str
+        series : typing.Sequence[str]
+        stream : str
+        virt_type : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.metrics = [MetricResult.from_json(o) for o in metrics or []]
+        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 MeterStatusParam(Type):
-    _toSchema = {'info': 'info', 'tag': 'tag', 'code': 'code'}
-    _toPy = {'info': 'info', 'tag': 'tag', 'code': 'code'}
-    def __init__(self, code=None, info=None, tag=None):
-        '''
-        code : str
-        info : str
-        tag : str
+class ListCloudImageMetadataResult(Type):
+    _toSchema = {'result': 'result'}
+    _toPy = {'result': 'result'}
+    def __init__(self, result=None):
         '''
-        self.code = code
-        self.info = info
-        self.tag = tag
+        result : typing.Sequence[~CloudImageMetadata]
+        '''
+        self.result = [CloudImageMetadata.from_json(o) for o in result or []]
 
 
-class MeterStatusParams(Type):
-    _toSchema = {'statues': 'statues'}
-    _toPy = {'statues': 'statues'}
-    def __init__(self, statues=None):
+class MetadataImageIds(Type):
+    _toSchema = {'image_ids': 'image_ids'}
+    _toPy = {'image_ids': 'image_ids'}
+    def __init__(self, image_ids=None):
         '''
-        statues : typing.Sequence[~MeterStatusParam]
+        image_ids : typing.Sequence[str]
         '''
-        self.statues = [MeterStatusParam.from_json(o) for o in statues or []]
+        self.image_ids = image_ids
 
 
-class MetricResult(Type):
-    _toSchema = {'key': 'key', 'time': 'time', 'value': 'value'}
-    _toPy = {'key': 'key', 'time': 'time', 'value': 'value'}
-    def __init__(self, key=None, time=None, value=None):
+class MetadataSaveParams(Type):
+    _toSchema = {'metadata': 'metadata'}
+    _toPy = {'metadata': 'metadata'}
+    def __init__(self, metadata=None):
         '''
-        key : str
-        time : str
-        value : str
+        metadata : typing.Sequence[~CloudImageMetadataList]
         '''
-        self.key = key
-        self.time = time
-        self.value = value
+        self.metadata = [CloudImageMetadataList.from_json(o) for o in metadata or []]
 
 
-class MetricResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class EntityStatusArgs(Type):
+    _toSchema = {'data': 'Data', 'tag': 'Tag', 'info': 'Info', 'status': 'Status'}
+    _toPy = {'Tag': 'tag', 'Status': 'status', 'Data': 'data', 'Info': 'info'}
+    def __init__(self, data=None, info=None, status=None, tag=None):
         '''
-        results : typing.Sequence[~EntityMetrics]
+        data : typing.Mapping[str, typing.Any]
+        info : str
+        status : str
+        tag : str
         '''
-        self.results = [EntityMetrics.from_json(o) for o in results or []]
+        self.data = data
+        self.info = info
+        self.status = status
+        self.tag = tag
 
 
-class PhaseResult(Type):
-    _toSchema = {'error': 'Error', 'phase': 'phase'}
-    _toPy = {'Error': 'error', 'phase': 'phase'}
-    def __init__(self, error=None, phase=None):
+class MachineAddresses(Type):
+    _toSchema = {'addresses': 'Addresses', 'tag': 'Tag'}
+    _toPy = {'Addresses': 'addresses', 'Tag': 'tag'}
+    def __init__(self, addresses=None, tag=None):
         '''
+        addresses : typing.Sequence[~Address]
+        tag : str
+        '''
+        self.addresses = [Address.from_json(o) for o in addresses or []]
+        self.tag = tag
+
+
+class MachineAddressesResult(Type):
+    _toSchema = {'addresses': 'Addresses', 'error': 'Error'}
+    _toPy = {'Addresses': 'addresses', 'Error': 'error'}
+    def __init__(self, addresses=None, error=None):
+        '''
+        addresses : typing.Sequence[~Address]
         error : Error
-        phase : str
         '''
+        self.addresses = [Address.from_json(o) for o in addresses or []]
         self.error = Error.from_json(error) if error else None
-        self.phase = phase
 
 
-class PhaseResults(Type):
+class MachineAddressesResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~PhaseResult]
+        results : typing.Sequence[~MachineAddressesResult]
         '''
-        self.results = [PhaseResult.from_json(o) for o in results or []]
+        self.results = [MachineAddressesResult.from_json(o) for o in results or []]
 
 
-class FullMigrationStatus(Type):
-    _toSchema = {'attempt': 'attempt', 'phase': 'phase', 'spec': 'spec'}
-    _toPy = {'attempt': 'attempt', 'phase': 'phase', 'spec': 'spec'}
-    def __init__(self, attempt=None, phase=None, spec=None):
+class SetMachinesAddresses(Type):
+    _toSchema = {'machineaddresses': 'MachineAddresses'}
+    _toPy = {'MachineAddresses': 'machineaddresses'}
+    def __init__(self, machineaddresses=None):
         '''
-        attempt : int
-        phase : str
-        spec : ModelMigrationSpec
+        machineaddresses : typing.Sequence[~MachineAddresses]
         '''
-        self.attempt = attempt
-        self.phase = phase
-        self.spec = ModelMigrationSpec.from_json(spec) if spec else None
+        self.machineaddresses = [MachineAddresses.from_json(o) for o in machineaddresses or []]
 
 
-class SerializedModel(Type):
-    _toSchema = {'bytes_': 'bytes'}
-    _toPy = {'bytes': 'bytes_'}
-    def __init__(self, bytes_=None):
+class SetStatus(Type):
+    _toSchema = {'entities': 'Entities'}
+    _toPy = {'Entities': 'entities'}
+    def __init__(self, entities=None):
         '''
-        bytes_ : typing.Sequence[int]
+        entities : typing.Sequence[~EntityStatusArgs]
         '''
-        self.bytes_ = bytes_
+        self.entities = [EntityStatusArgs.from_json(o) for o in entities or []]
 
 
-class SetMigrationPhaseArgs(Type):
-    _toSchema = {'phase': 'phase'}
-    _toPy = {'phase': 'phase'}
-    def __init__(self, phase=None):
+class StatusResult(Type):
+    _toSchema = {'since': 'Since', 'data': 'Data', 'info': 'Info', 'life': 'Life', 'error': 'Error', 'id_': 'Id', 'status': 'Status'}
+    _toPy = {'Id': 'id_', 'Data': 'data', 'Since': 'since', 'Error': 'error', 'Life': 'life', 'Status': 'status', 'Info': 'info'}
+    def __init__(self, data=None, error=None, id_=None, info=None, life=None, since=None, status=None):
         '''
-        phase : str
+        data : typing.Mapping[str, typing.Any]
+        error : Error
+        id_ : str
+        info : str
+        life : str
+        since : str
+        status : str
         '''
-        self.phase = phase
+        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 MigrationStatus(Type):
-    _toSchema = {'source_api_addrs': 'source-api-addrs', 'attempt': 'attempt', 'target_api_addrs': 'target-api-addrs', 'source_ca_cert': 'source-ca-cert', 'phase': 'phase', 'target_ca_cert': 'target-ca-cert'}
-    _toPy = {'attempt': 'attempt', 'target-api-addrs': 'target_api_addrs', 'target-ca-cert': 'target_ca_cert', 'phase': 'phase', 'source-ca-cert': 'source_ca_cert', 'source-api-addrs': 'source_api_addrs'}
-    def __init__(self, attempt=None, phase=None, source_api_addrs=None, source_ca_cert=None, target_api_addrs=None, target_ca_cert=None):
+class StatusResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        attempt : int
-        phase : str
-        source_api_addrs : typing.Sequence[str]
-        source_ca_cert : str
-        target_api_addrs : typing.Sequence[str]
-        target_ca_cert : str
+        results : typing.Sequence[~StatusResult]
         '''
-        self.attempt = attempt
-        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
+        self.results = [StatusResult.from_json(o) for o in results or []]
 
 
-class ModelArgs(Type):
-    _toSchema = {'model_tag': 'model-tag'}
-    _toPy = {'model-tag': 'model_tag'}
-    def __init__(self, model_tag=None):
+class ListSSHKeys(Type):
+    _toSchema = {'mode': 'Mode', 'entities': 'Entities'}
+    _toPy = {'Entities': 'entities', 'Mode': 'mode'}
+    def __init__(self, entities=None, mode=None):
         '''
-        model_tag : str
+        entities : Entities
+        mode : bool
         '''
-        self.model_tag = model_tag
+        self.entities = Entities.from_json(entities) if entities else None
+        self.mode = mode
 
 
-class ModelCreateArgs(Type):
-    _toSchema = {'config': 'Config', 'account': 'Account', 'ownertag': 'OwnerTag'}
-    _toPy = {'Account': 'account', 'Config': 'config', 'OwnerTag': 'ownertag'}
-    def __init__(self, account=None, config=None, ownertag=None):
+class ModifyUserSSHKeys(Type):
+    _toSchema = {'keys': 'Keys', 'user': 'User'}
+    _toPy = {'User': 'user', 'Keys': 'keys'}
+    def __init__(self, keys=None, user=None):
         '''
-        account : typing.Mapping[str, typing.Any]
-        config : typing.Mapping[str, typing.Any]
-        ownertag : str
+        keys : typing.Sequence[str]
+        user : str
         '''
-        self.account = account
-        self.config = config
-        self.ownertag = ownertag
+        self.keys = keys
+        self.user = user
 
 
-class ModelInfoResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
-    def __init__(self, error=None, result=None):
+class ApplicationTag(Type):
+    _toSchema = {'name': 'Name'}
+    _toPy = {'Name': 'name'}
+    def __init__(self, name=None):
         '''
-        error : Error
-        result : ModelInfo
+        name : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.result = ModelInfo.from_json(result) if result else None
+        self.name = name
 
 
-class ModelInfoResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class ClaimLeadershipBulkParams(Type):
+    _toSchema = {'params': 'Params'}
+    _toPy = {'Params': 'params'}
+    def __init__(self, params=None):
         '''
-        results : typing.Sequence[~ModelInfoResult]
+        params : typing.Sequence[~ClaimLeadershipParams]
         '''
-        self.results = [ModelInfoResult.from_json(o) for o in results or []]
+        self.params = [ClaimLeadershipParams.from_json(o) for o in params or []]
 
 
-class ModelSkeletonConfigArgs(Type):
-    _toSchema = {'provider': 'Provider', 'region': 'Region'}
-    _toPy = {'Region': 'region', 'Provider': 'provider'}
-    def __init__(self, provider=None, region=None):
+class ClaimLeadershipBulkResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        provider : str
-        region : str
+        results : typing.Sequence[~ErrorResult]
         '''
-        self.provider = provider
-        self.region = region
+        self.results = [ErrorResult.from_json(o) for o in results or []]
 
 
-class ModifyModelAccess(Type):
-    _toSchema = {'user_tag': 'user-tag', 'access': 'access', 'action': 'action', 'model_tag': 'model-tag'}
-    _toPy = {'model-tag': 'model_tag', 'access': 'access', 'action': 'action', 'user-tag': 'user_tag'}
-    def __init__(self, access=None, action=None, model_tag=None, user_tag=None):
+class ClaimLeadershipParams(Type):
+    _toSchema = {'unittag': 'UnitTag', 'applicationtag': 'ApplicationTag', 'durationseconds': 'DurationSeconds'}
+    _toPy = {'UnitTag': 'unittag', 'DurationSeconds': 'durationseconds', 'ApplicationTag': 'applicationtag'}
+    def __init__(self, applicationtag=None, durationseconds=None, unittag=None):
         '''
-        access : str
-        action : str
-        model_tag : str
-        user_tag : str
+        applicationtag : str
+        durationseconds : float
+        unittag : str
         '''
-        self.access = access
-        self.action = action
-        self.model_tag = model_tag
-        self.user_tag = user_tag
+        self.applicationtag = applicationtag
+        self.durationseconds = durationseconds
+        self.unittag = unittag
 
 
-class ModifyModelAccessRequest(Type):
-    _toSchema = {'changes': 'changes'}
-    _toPy = {'changes': 'changes'}
-    def __init__(self, changes=None):
+class ActionExecutionResult(Type):
+    _toSchema = {'message': 'message', 'results': 'results', 'actiontag': 'actiontag', 'status': 'status'}
+    _toPy = {'message': 'message', 'results': 'results', 'actiontag': 'actiontag', 'status': 'status'}
+    def __init__(self, actiontag=None, message=None, results=None, status=None):
         '''
-        changes : typing.Sequence[~ModifyModelAccess]
+        actiontag : str
+        message : str
+        results : typing.Mapping[str, typing.Any]
+        status : str
         '''
-        self.changes = [ModifyModelAccess.from_json(o) for o in changes or []]
+        self.actiontag = actiontag
+        self.message = message
+        self.results = results
+        self.status = status
 
 
-class ConstraintsResult(Type):
-    _toSchema = {'error': 'Error', 'constraints': 'Constraints'}
-    _toPy = {'Constraints': 'constraints', 'Error': 'error'}
-    def __init__(self, constraints=None, error=None):
+class ActionExecutionResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
+        '''
+        results : typing.Sequence[~ActionExecutionResult]
+        '''
+        self.results = [ActionExecutionResult.from_json(o) for o in results or []]
+
+
+class JobsResult(Type):
+    _toSchema = {'jobs': 'Jobs', 'error': 'Error'}
+    _toPy = {'Error': 'error', 'Jobs': 'jobs'}
+    def __init__(self, error=None, jobs=None):
         '''
-        constraints : Value
         error : Error
+        jobs : typing.Sequence[str]
         '''
-        self.constraints = Value.from_json(constraints) if constraints else None
         self.error = Error.from_json(error) if error else None
+        self.jobs = jobs
 
 
-class ConstraintsResults(Type):
+class JobsResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~ConstraintsResult]
-        '''
-        self.results = [ConstraintsResult.from_json(o) for o in results or []]
-
-
-class ContainerConfig(Type):
-    _toSchema = {'sslhostnameverification': 'SSLHostnameVerification', 'authorizedkeys': 'AuthorizedKeys', 'aptproxy': 'AptProxy', 'updatebehavior': 'UpdateBehavior', 'providertype': 'ProviderType', 'allowlxcloopmounts': 'AllowLXCLoopMounts', 'proxy': 'Proxy', 'aptmirror': 'AptMirror', 'preferipv6': 'PreferIPv6'}
-    _toPy = {'AuthorizedKeys': 'authorizedkeys', 'AptMirror': 'aptmirror', 'AptProxy': 'aptproxy', 'SSLHostnameVerification': 'sslhostnameverification', 'PreferIPv6': 'preferipv6', 'AllowLXCLoopMounts': 'allowlxcloopmounts', 'UpdateBehavior': 'updatebehavior', 'Proxy': 'proxy', 'ProviderType': 'providertype'}
-    def __init__(self, allowlxcloopmounts=None, aptmirror=None, aptproxy=None, authorizedkeys=None, preferipv6=None, providertype=None, proxy=None, sslhostnameverification=None, updatebehavior=None):
-        '''
-        allowlxcloopmounts : bool
-        aptmirror : str
-        aptproxy : Settings
-        authorizedkeys : str
-        preferipv6 : bool
-        providertype : str
-        proxy : Settings
-        sslhostnameverification : bool
-        updatebehavior : UpdateBehavior
+        results : typing.Sequence[~JobsResult]
         '''
-        self.allowlxcloopmounts = allowlxcloopmounts
-        self.aptmirror = aptmirror
-        self.aptproxy = Settings.from_json(aptproxy) if aptproxy else None
-        self.authorizedkeys = authorizedkeys
-        self.preferipv6 = preferipv6
-        self.providertype = providertype
-        self.proxy = Settings.from_json(proxy) if proxy else None
-        self.sslhostnameverification = sslhostnameverification
-        self.updatebehavior = UpdateBehavior.from_json(updatebehavior) if updatebehavior else None
+        self.results = [JobsResult.from_json(o) for o in results or []]
 
 
-class ContainerManagerConfig(Type):
-    _toSchema = {'managerconfig': 'ManagerConfig'}
-    _toPy = {'ManagerConfig': 'managerconfig'}
-    def __init__(self, managerconfig=None):
+class NetworkConfig(Type):
+    _toSchema = {'mtu': 'MTU', 'disabled': 'Disabled', 'interfacename': 'InterfaceName', 'dnsservers': 'DNSServers', 'providerid': 'ProviderId', 'providersubnetid': 'ProviderSubnetId', 'deviceindex': 'DeviceIndex', 'vlantag': 'VLANTag', 'provideraddressid': 'ProviderAddressId', 'dnssearchdomains': 'DNSSearchDomains', 'noautostart': 'NoAutoStart', 'macaddress': 'MACAddress', 'address': 'Address', 'cidr': 'CIDR', 'interfacetype': 'InterfaceType', 'parentinterfacename': 'ParentInterfaceName', 'gatewayaddress': 'GatewayAddress', 'providervlanid': 'ProviderVLANId', 'configtype': 'ConfigType', 'providerspaceid': 'ProviderSpaceId'}
+    _toPy = {'InterfaceType': 'interfacetype', 'ConfigType': 'configtype', 'ProviderVLANId': 'providervlanid', 'ProviderAddressId': 'provideraddressid', 'Disabled': 'disabled', 'ProviderSpaceId': 'providerspaceid', 'GatewayAddress': 'gatewayaddress', 'InterfaceName': 'interfacename', 'ProviderSubnetId': 'providersubnetid', 'MTU': 'mtu', 'VLANTag': 'vlantag', 'NoAutoStart': 'noautostart', 'DNSServers': 'dnsservers', 'DNSSearchDomains': 'dnssearchdomains', 'DeviceIndex': 'deviceindex', 'Address': 'address', 'ProviderId': 'providerid', 'MACAddress': 'macaddress', 'CIDR': 'cidr', 'ParentInterfaceName': 'parentinterfacename'}
+    def __init__(self, address=None, cidr=None, configtype=None, dnssearchdomains=None, dnsservers=None, deviceindex=None, disabled=None, gatewayaddress=None, interfacename=None, interfacetype=None, macaddress=None, mtu=None, noautostart=None, parentinterfacename=None, provideraddressid=None, providerid=None, providerspaceid=None, providersubnetid=None, providervlanid=None, vlantag=None):
         '''
-        managerconfig : typing.Mapping[str, str]
+        address : str
+        cidr : str
+        configtype : str
+        dnssearchdomains : typing.Sequence[str]
+        dnsservers : typing.Sequence[str]
+        deviceindex : int
+        disabled : bool
+        gatewayaddress : str
+        interfacename : str
+        interfacetype : str
+        macaddress : str
+        mtu : int
+        noautostart : bool
+        parentinterfacename : str
+        provideraddressid : str
+        providerid : str
+        providerspaceid : str
+        providersubnetid : str
+        providervlanid : str
+        vlantag : int
         '''
-        self.managerconfig = managerconfig
+        self.address = address
+        self.cidr = cidr
+        self.configtype = configtype
+        self.dnssearchdomains = dnssearchdomains
+        self.dnsservers = dnsservers
+        self.deviceindex = deviceindex
+        self.disabled = disabled
+        self.gatewayaddress = gatewayaddress
+        self.interfacename = interfacename
+        self.interfacetype = interfacetype
+        self.macaddress = macaddress
+        self.mtu = mtu
+        self.noautostart = noautostart
+        self.parentinterfacename = parentinterfacename
+        self.provideraddressid = provideraddressid
+        self.providerid = providerid
+        self.providerspaceid = providerspaceid
+        self.providersubnetid = providersubnetid
+        self.providervlanid = providervlanid
+        self.vlantag = vlantag
 
 
-class ContainerManagerConfigParams(Type):
-    _toSchema = {'type_': 'Type'}
-    _toPy = {'Type': 'type_'}
-    def __init__(self, type_=None):
+class SetMachineNetworkConfig(Type):
+    _toSchema = {'config': 'Config', 'tag': 'Tag'}
+    _toPy = {'Tag': 'tag', 'Config': 'config'}
+    def __init__(self, config=None, tag=None):
         '''
-        type_ : str
+        config : typing.Sequence[~NetworkConfig]
+        tag : str
         '''
-        self.type_ = type_
+        self.config = [NetworkConfig.from_json(o) for o in config or []]
+        self.tag = tag
 
 
-class DistributionGroupResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
-    def __init__(self, error=None, result=None):
+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):
         '''
+        code : str
         error : Error
-        result : typing.Sequence[str]
+        info : str
         '''
+        self.code = code
         self.error = Error.from_json(error) if error else None
-        self.result = result
+        self.info = info
 
 
-class DistributionGroupResults(Type):
+class MeterStatusResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~DistributionGroupResult]
+        results : typing.Sequence[~MeterStatusResult]
         '''
-        self.results = [DistributionGroupResult.from_json(o) for o in results or []]
+        self.results = [MeterStatusResult.from_json(o) for o in results or []]
 
 
-class InstanceInfo(Type):
-    _toSchema = {'nonce': 'Nonce', 'networkconfig': 'NetworkConfig', 'tag': 'Tag', 'characteristics': 'Characteristics', 'volumeattachments': 'VolumeAttachments', 'volumes': 'Volumes', 'instanceid': 'InstanceId'}
-    _toPy = {'Tag': 'tag', 'InstanceId': 'instanceid', 'Volumes': 'volumes', 'Characteristics': 'characteristics', 'Nonce': 'nonce', 'NetworkConfig': 'networkconfig', 'VolumeAttachments': 'volumeattachments'}
-    def __init__(self, characteristics=None, instanceid=None, networkconfig=None, nonce=None, tag=None, volumeattachments=None, volumes=None):
+class Metric(Type):
+    _toSchema = {'key': 'Key', 'time': 'Time', 'value': 'Value'}
+    _toPy = {'Value': 'value', 'Key': 'key', 'Time': 'time'}
+    def __init__(self, key=None, time=None, value=None):
         '''
-        characteristics : HardwareCharacteristics
-        instanceid : str
-        networkconfig : typing.Sequence[~NetworkConfig]
-        nonce : str
-        tag : str
-        volumeattachments : typing.Mapping[str, ~VolumeAttachmentInfo]
-        volumes : typing.Sequence[~Volume]
+        key : str
+        time : str
+        value : str
         '''
-        self.characteristics = HardwareCharacteristics.from_json(characteristics) if characteristics else None
-        self.instanceid = instanceid
-        self.networkconfig = [NetworkConfig.from_json(o) for o in networkconfig or []]
-        self.nonce = nonce
-        self.tag = tag
-        self.volumeattachments = {k: VolumeAttachmentInfo.from_json(v) for k, v in (volumeattachments or dict()).items()}
-        self.volumes = [Volume.from_json(o) for o in volumes or []]
+        self.key = key
+        self.time = time
+        self.value = value
 
 
-class InstancesInfo(Type):
-    _toSchema = {'machines': 'Machines'}
-    _toPy = {'Machines': 'machines'}
-    def __init__(self, machines=None):
+class MetricBatch(Type):
+    _toSchema = {'charmurl': 'CharmURL', 'uuid': 'UUID', 'created': 'Created', 'metrics': 'Metrics'}
+    _toPy = {'CharmURL': 'charmurl', 'Metrics': 'metrics', 'Created': 'created', 'UUID': 'uuid'}
+    def __init__(self, charmurl=None, created=None, metrics=None, uuid=None):
         '''
-        machines : typing.Sequence[~InstanceInfo]
+        charmurl : str
+        created : str
+        metrics : typing.Sequence[~Metric]
+        uuid : str
         '''
-        self.machines = [InstanceInfo.from_json(o) for o in machines or []]
+        self.charmurl = charmurl
+        self.created = created
+        self.metrics = [Metric.from_json(o) for o in metrics or []]
+        self.uuid = uuid
 
 
-class MachineContainers(Type):
-    _toSchema = {'machinetag': 'MachineTag', 'containertypes': 'ContainerTypes'}
-    _toPy = {'ContainerTypes': 'containertypes', 'MachineTag': 'machinetag'}
-    def __init__(self, containertypes=None, machinetag=None):
+class MetricBatchParam(Type):
+    _toSchema = {'batch': 'Batch', 'tag': 'Tag'}
+    _toPy = {'Tag': 'tag', 'Batch': 'batch'}
+    def __init__(self, batch=None, tag=None):
         '''
-        containertypes : typing.Sequence[str]
-        machinetag : str
+        batch : MetricBatch
+        tag : str
         '''
-        self.containertypes = containertypes
-        self.machinetag = machinetag
+        self.batch = MetricBatch.from_json(batch) if batch else None
+        self.tag = tag
 
 
-class MachineContainersParams(Type):
-    _toSchema = {'params': 'Params'}
-    _toPy = {'Params': 'params'}
-    def __init__(self, params=None):
+class MetricBatchParams(Type):
+    _toSchema = {'batches': 'Batches'}
+    _toPy = {'Batches': 'batches'}
+    def __init__(self, batches=None):
         '''
-        params : typing.Sequence[~MachineContainers]
+        batches : typing.Sequence[~MetricBatchParam]
         '''
-        self.params = [MachineContainers.from_json(o) for o in params or []]
+        self.batches = [MetricBatchParam.from_json(o) for o in batches or []]
 
 
-class MachineNetworkConfigResult(Type):
-    _toSchema = {'info': 'Info', 'error': 'Error'}
-    _toPy = {'Info': 'info', 'Error': 'error'}
-    def __init__(self, error=None, info=None):
+class EntityMetrics(Type):
+    _toSchema = {'error': 'error', 'metrics': 'metrics'}
+    _toPy = {'error': 'error', 'metrics': 'metrics'}
+    def __init__(self, error=None, metrics=None):
         '''
         error : Error
-        info : typing.Sequence[~NetworkConfig]
+        metrics : typing.Sequence[~MetricResult]
         '''
         self.error = Error.from_json(error) if error else None
-        self.info = [NetworkConfig.from_json(o) for o in info or []]
+        self.metrics = [MetricResult.from_json(o) for o in metrics or []]
 
 
-class MachineNetworkConfigResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class MeterStatusParam(Type):
+    _toSchema = {'code': 'code', 'tag': 'tag', 'info': 'info'}
+    _toPy = {'code': 'code', 'tag': 'tag', 'info': 'info'}
+    def __init__(self, code=None, info=None, tag=None):
         '''
-        results : typing.Sequence[~MachineNetworkConfigResult]
+        code : str
+        info : str
+        tag : str
         '''
-        self.results = [MachineNetworkConfigResult.from_json(o) for o in results or []]
+        self.code = code
+        self.info = info
+        self.tag = tag
 
 
-class ProvisioningInfo(Type):
-    _toSchema = {'jobs': 'Jobs', 'volumes': 'Volumes', 'tags': 'Tags', 'endpointbindings': 'EndpointBindings', 'placement': 'Placement', 'series': 'Series', 'constraints': 'Constraints', 'subnetstozones': 'SubnetsToZones', 'imagemetadata': 'ImageMetadata'}
-    _toPy = {'Constraints': 'constraints', 'EndpointBindings': 'endpointbindings', 'Volumes': 'volumes', 'Placement': 'placement', 'SubnetsToZones': 'subnetstozones', 'Tags': 'tags', 'Jobs': 'jobs', 'ImageMetadata': 'imagemetadata', 'Series': 'series'}
-    def __init__(self, constraints=None, endpointbindings=None, imagemetadata=None, jobs=None, placement=None, series=None, subnetstozones=None, tags=None, volumes=None):
+class MeterStatusParams(Type):
+    _toSchema = {'statues': 'statues'}
+    _toPy = {'statues': 'statues'}
+    def __init__(self, statues=None):
         '''
-        constraints : Value
-        endpointbindings : typing.Mapping[str, str]
-        imagemetadata : typing.Sequence[~CloudImageMetadata]
-        jobs : typing.Sequence[str]
-        placement : str
-        series : str
-        subnetstozones : typing.Sequence[str]
-        tags : typing.Mapping[str, str]
-        volumes : typing.Sequence[~VolumeParams]
+        statues : typing.Sequence[~MeterStatusParam]
         '''
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.endpointbindings = endpointbindings
-        self.imagemetadata = [CloudImageMetadata.from_json(o) for o in imagemetadata or []]
-        self.jobs = jobs
-        self.placement = placement
-        self.series = series
-        self.subnetstozones = subnetstozones
-        self.tags = tags
-        self.volumes = [VolumeParams.from_json(o) for o in volumes or []]
+        self.statues = [MeterStatusParam.from_json(o) for o in statues or []]
 
 
-class ProvisioningInfoResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
-    def __init__(self, error=None, result=None):
+class MetricResult(Type):
+    _toSchema = {'key': 'key', 'time': 'time', 'value': 'value'}
+    _toPy = {'key': 'key', 'time': 'time', 'value': 'value'}
+    def __init__(self, key=None, time=None, value=None):
         '''
-        error : Error
-        result : ProvisioningInfo
+        key : str
+        time : str
+        value : str
         '''
-        self.error = Error.from_json(error) if error else None
-        self.result = ProvisioningInfo.from_json(result) if result else None
+        self.key = key
+        self.time = time
+        self.value = value
 
 
-class ProvisioningInfoResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
+class MetricResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~ProvisioningInfoResult]
-        '''
-        self.results = [ProvisioningInfoResult.from_json(o) for o in results or []]
-
-
-class Settings(Type):
-    _toSchema = {'https': 'Https', 'noproxy': 'NoProxy', 'ftp': 'Ftp', 'http': 'Http'}
-    _toPy = {'Http': 'http', 'Ftp': 'ftp', 'Https': 'https', 'NoProxy': 'noproxy'}
-    def __init__(self, ftp=None, http=None, https=None, noproxy=None):
-        '''
-        ftp : str
-        http : str
-        https : str
-        noproxy : str
+        results : typing.Sequence[~EntityMetrics]
         '''
-        self.ftp = ftp
-        self.http = http
-        self.https = https
-        self.noproxy = noproxy
+        self.results = [EntityMetrics.from_json(o) for o in results or []]
 
 
-class ToolsResult(Type):
-    _toSchema = {'error': 'Error', 'disablesslhostnameverification': 'DisableSSLHostnameVerification', 'toolslist': 'ToolsList'}
-    _toPy = {'Error': 'error', 'ToolsList': 'toolslist', 'DisableSSLHostnameVerification': 'disablesslhostnameverification'}
-    def __init__(self, disablesslhostnameverification=None, error=None, toolslist=None):
+class PhaseResult(Type):
+    _toSchema = {'error': 'Error', 'phase': 'phase'}
+    _toPy = {'Error': 'error', 'phase': 'phase'}
+    def __init__(self, error=None, phase=None):
         '''
-        disablesslhostnameverification : bool
         error : Error
-        toolslist : typing.Sequence[~Tools]
+        phase : str
         '''
-        self.disablesslhostnameverification = disablesslhostnameverification
         self.error = Error.from_json(error) if error else None
-        self.toolslist = [Tools.from_json(o) for o in toolslist or []]
+        self.phase = phase
 
 
-class ToolsResults(Type):
+class PhaseResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~ToolsResult]
+        results : typing.Sequence[~PhaseResult]
         '''
-        self.results = [ToolsResult.from_json(o) for o in results or []]
+        self.results = [PhaseResult.from_json(o) for o in results or []]
 
 
-class UpdateBehavior(Type):
-    _toSchema = {'enableosupgrade': 'EnableOSUpgrade', 'enableosrefreshupdate': 'EnableOSRefreshUpdate'}
-    _toPy = {'EnableOSUpgrade': 'enableosupgrade', 'EnableOSRefreshUpdate': 'enableosrefreshupdate'}
-    def __init__(self, enableosrefreshupdate=None, enableosupgrade=None):
+class FullMigrationStatus(Type):
+    _toSchema = {'attempt': 'attempt', 'phase': 'phase', 'spec': 'spec'}
+    _toPy = {'attempt': 'attempt', 'phase': 'phase', 'spec': 'spec'}
+    def __init__(self, attempt=None, phase=None, spec=None):
         '''
-        enableosrefreshupdate : bool
-        enableosupgrade : bool
+        attempt : int
+        phase : str
+        spec : ModelMigrationSpec
         '''
-        self.enableosrefreshupdate = enableosrefreshupdate
-        self.enableosupgrade = enableosupgrade
+        self.attempt = attempt
+        self.phase = phase
+        self.spec = ModelMigrationSpec.from_json(spec) if spec else None
 
 
-class Volume(Type):
-    _toSchema = {'info': 'info', 'volumetag': 'volumetag'}
-    _toPy = {'info': 'info', 'volumetag': 'volumetag'}
-    def __init__(self, info=None, volumetag=None):
+class SerializedModel(Type):
+    _toSchema = {'bytes_': 'bytes'}
+    _toPy = {'bytes': 'bytes_'}
+    def __init__(self, bytes_=None):
         '''
-        info : VolumeInfo
-        volumetag : str
+        bytes_ : typing.Sequence[int]
         '''
-        self.info = VolumeInfo.from_json(info) if info else None
-        self.volumetag = volumetag
+        self.bytes_ = bytes_
 
 
-class VolumeAttachmentInfo(Type):
-    _toSchema = {'devicename': 'devicename', 'devicelink': 'devicelink', 'read_only': 'read-only', 'busaddress': 'busaddress'}
-    _toPy = {'read-only': 'read_only', 'devicename': 'devicename', 'devicelink': 'devicelink', 'busaddress': 'busaddress'}
-    def __init__(self, busaddress=None, devicelink=None, devicename=None, read_only=None):
+class SetMigrationPhaseArgs(Type):
+    _toSchema = {'phase': 'phase'}
+    _toPy = {'phase': 'phase'}
+    def __init__(self, phase=None):
         '''
-        busaddress : str
-        devicelink : str
-        devicename : str
-        read_only : bool
+        phase : str
         '''
-        self.busaddress = busaddress
-        self.devicelink = devicelink
-        self.devicename = devicename
-        self.read_only = read_only
+        self.phase = phase
 
 
-class VolumeAttachmentParams(Type):
-    _toSchema = {'volumeid': 'volumeid', 'instanceid': 'instanceid', 'volumetag': 'volumetag', 'machinetag': 'machinetag', 'provider': 'provider', 'read_only': 'read-only'}
-    _toPy = {'volumeid': 'volumeid', 'instanceid': 'instanceid', 'read-only': 'read_only', 'volumetag': 'volumetag', 'machinetag': 'machinetag', 'provider': 'provider'}
-    def __init__(self, instanceid=None, machinetag=None, provider=None, read_only=None, volumeid=None, volumetag=None):
+class MigrationStatus(Type):
+    _toSchema = {'attempt': 'attempt', 'source_api_addrs': 'source-api-addrs', 'target_api_addrs': 'target-api-addrs', 'source_ca_cert': 'source-ca-cert', 'phase': 'phase', 'target_ca_cert': 'target-ca-cert'}
+    _toPy = {'target-ca-cert': 'target_ca_cert', 'source-ca-cert': 'source_ca_cert', 'attempt': 'attempt', 'source-api-addrs': 'source_api_addrs', 'phase': 'phase', 'target-api-addrs': 'target_api_addrs'}
+    def __init__(self, attempt=None, phase=None, source_api_addrs=None, source_ca_cert=None, target_api_addrs=None, target_ca_cert=None):
         '''
-        instanceid : str
-        machinetag : str
-        provider : str
-        read_only : bool
-        volumeid : str
-        volumetag : str
+        attempt : int
+        phase : str
+        source_api_addrs : typing.Sequence[str]
+        source_ca_cert : str
+        target_api_addrs : typing.Sequence[str]
+        target_ca_cert : str
         '''
-        self.instanceid = instanceid
-        self.machinetag = machinetag
-        self.provider = provider
-        self.read_only = read_only
-        self.volumeid = volumeid
-        self.volumetag = volumetag
+        self.attempt = attempt
+        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 VolumeInfo(Type):
-    _toSchema = {'volumeid': 'volumeid', 'hardwareid': 'hardwareid', 'persistent': 'persistent', 'size': 'size'}
-    _toPy = {'volumeid': 'volumeid', 'hardwareid': 'hardwareid', 'persistent': 'persistent', 'size': 'size'}
-    def __init__(self, hardwareid=None, persistent=None, size=None, volumeid=None):
+class ModelArgs(Type):
+    _toSchema = {'model_tag': 'model-tag'}
+    _toPy = {'model-tag': 'model_tag'}
+    def __init__(self, model_tag=None):
         '''
-        hardwareid : str
-        persistent : bool
-        size : int
-        volumeid : str
+        model_tag : str
         '''
-        self.hardwareid = hardwareid
-        self.persistent = persistent
-        self.size = size
-        self.volumeid = volumeid
+        self.model_tag = model_tag
 
 
-class VolumeParams(Type):
-    _toSchema = {'volumetag': 'volumetag', 'tags': 'tags', 'attachment': 'attachment', 'provider': 'provider', 'size': 'size', 'attributes': 'attributes'}
-    _toPy = {'volumetag': 'volumetag', 'tags': 'tags', 'attachment': 'attachment', 'provider': 'provider', 'size': 'size', 'attributes': 'attributes'}
-    def __init__(self, attachment=None, attributes=None, provider=None, size=None, tags=None, volumetag=None):
+class ModelCreateArgs(Type):
+    _toSchema = {'account': 'Account', 'ownertag': 'OwnerTag', 'config': 'Config'}
+    _toPy = {'Account': 'account', 'OwnerTag': 'ownertag', 'Config': 'config'}
+    def __init__(self, account=None, config=None, ownertag=None):
         '''
-        attachment : VolumeAttachmentParams
-        attributes : typing.Mapping[str, typing.Any]
-        provider : str
-        size : int
-        tags : typing.Mapping[str, str]
-        volumetag : str
+        account : typing.Mapping[str, typing.Any]
+        config : typing.Mapping[str, typing.Any]
+        ownertag : str
         '''
-        self.attachment = VolumeAttachmentParams.from_json(attachment) if attachment else None
-        self.attributes = attributes
-        self.provider = provider
-        self.size = size
-        self.tags = tags
-        self.volumetag = volumetag
+        self.account = account
+        self.config = config
+        self.ownertag = ownertag
 
 
-class WatchContainer(Type):
-    _toSchema = {'containertype': 'ContainerType', 'machinetag': 'MachineTag'}
-    _toPy = {'MachineTag': 'machinetag', 'ContainerType': 'containertype'}
-    def __init__(self, containertype=None, machinetag=None):
+class ModelInfoResult(Type):
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
-        containertype : str
-        machinetag : str
+        error : Error
+        result : ModelInfo
         '''
-        self.containertype = containertype
-        self.machinetag = machinetag
+        self.error = Error.from_json(error) if error else None
+        self.result = ModelInfo.from_json(result) if result else None
 
 
-class WatchContainers(Type):
-    _toSchema = {'params': 'Params'}
-    _toPy = {'Params': 'params'}
-    def __init__(self, params=None):
+class ModelInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
         '''
-        params : typing.Sequence[~WatchContainer]
+        results : typing.Sequence[~ModelInfoResult]
         '''
-        self.params = [WatchContainer.from_json(o) for o in params or []]
+        self.results = [ModelInfoResult.from_json(o) for o in results or []]
 
 
-class ProxyConfig(Type):
-    _toSchema = {'https': 'HTTPS', 'noproxy': 'NoProxy', 'ftp': 'FTP', 'http': 'HTTP'}
-    _toPy = {'HTTP': 'http', 'HTTPS': 'https', 'NoProxy': 'noproxy', 'FTP': 'ftp'}
-    def __init__(self, ftp=None, http=None, https=None, noproxy=None):
+class ModelSkeletonConfigArgs(Type):
+    _toSchema = {'region': 'Region', 'provider': 'Provider'}
+    _toPy = {'Provider': 'provider', 'Region': 'region'}
+    def __init__(self, provider=None, region=None):
         '''
-        ftp : str
-        http : str
-        https : str
-        noproxy : str
+        provider : str
+        region : str
         '''
-        self.ftp = ftp
-        self.http = http
-        self.https = https
-        self.noproxy = noproxy
+        self.provider = provider
+        self.region = region
 
 
-class ProxyConfigResult(Type):
-    _toSchema = {'proxysettings': 'ProxySettings', 'error': 'Error', 'aptproxysettings': 'APTProxySettings'}
-    _toPy = {'Error': 'error', 'APTProxySettings': 'aptproxysettings', 'ProxySettings': 'proxysettings'}
-    def __init__(self, aptproxysettings=None, error=None, proxysettings=None):
+class ModifyModelAccess(Type):
+    _toSchema = {'action': 'action', 'model_tag': 'model-tag', 'user_tag': 'user-tag', 'access': 'access'}
+    _toPy = {'user-tag': 'user_tag', 'action': 'action', 'model-tag': 'model_tag', 'access': 'access'}
+    def __init__(self, access=None, action=None, model_tag=None, user_tag=None):
         '''
-        aptproxysettings : ProxyConfig
-        error : Error
-        proxysettings : ProxyConfig
+        access : str
+        action : str
+        model_tag : str
+        user_tag : str
         '''
-        self.aptproxysettings = ProxyConfig.from_json(aptproxysettings) if aptproxysettings else None
-        self.error = Error.from_json(error) if error else None
-        self.proxysettings = ProxyConfig.from_json(proxysettings) if proxysettings else None
+        self.access = access
+        self.action = action
+        self.model_tag = model_tag
+        self.user_tag = user_tag
 
 
-class ProxyConfigResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
+class ModifyModelAccessRequest(Type):
+    _toSchema = {'changes': 'changes'}
+    _toPy = {'changes': 'changes'}
+    def __init__(self, changes=None):
         '''
-        results : typing.Sequence[~ProxyConfigResult]
+        changes : typing.Sequence[~ModifyModelAccess]
         '''
-        self.results = [ProxyConfigResult.from_json(o) for o in results or []]
+        self.changes = [ModifyModelAccess.from_json(o) for o in changes or []]
 
 
-class RebootActionResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
-    def __init__(self, error=None, result=None):
+class ConstraintsResult(Type):
+    _toSchema = {'constraints': 'Constraints', 'error': 'Error'}
+    _toPy = {'Constraints': 'constraints', 'Error': 'error'}
+    def __init__(self, constraints=None, error=None):
         '''
+        constraints : Value
         error : Error
-        result : str
         '''
+        self.constraints = Value.from_json(constraints) if constraints else None
         self.error = Error.from_json(error) if error else None
-        self.result = result
 
 
-class RebootActionResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
+class ConstraintsResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~RebootActionResult]
+        results : typing.Sequence[~ConstraintsResult]
         '''
-        self.results = [RebootActionResult.from_json(o) for o in results or []]
+        self.results = [ConstraintsResult.from_json(o) for o in results or []]
 
 
-class RelationUnitsChange(Type):
-    _toSchema = {'departed': 'Departed', 'changed': 'Changed'}
-    _toPy = {'Departed': 'departed', 'Changed': 'changed'}
-    def __init__(self, changed=None, departed=None):
+class ContainerConfig(Type):
+    _toSchema = {'allowlxcloopmounts': 'AllowLXCLoopMounts', 'updatebehavior': 'UpdateBehavior', 'aptmirror': 'AptMirror', 'authorizedkeys': 'AuthorizedKeys', 'sslhostnameverification': 'SSLHostnameVerification', 'aptproxy': 'AptProxy', 'providertype': 'ProviderType', 'proxy': 'Proxy'}
+    _toPy = {'UpdateBehavior': 'updatebehavior', 'SSLHostnameVerification': 'sslhostnameverification', 'AptMirror': 'aptmirror', 'Proxy': 'proxy', 'AptProxy': 'aptproxy', 'AuthorizedKeys': 'authorizedkeys', 'AllowLXCLoopMounts': 'allowlxcloopmounts', 'ProviderType': 'providertype'}
+    def __init__(self, allowlxcloopmounts=None, aptmirror=None, aptproxy=None, authorizedkeys=None, providertype=None, proxy=None, sslhostnameverification=None, updatebehavior=None):
         '''
-        changed : typing.Mapping[str, ~UnitSettings]
-        departed : typing.Sequence[str]
+        allowlxcloopmounts : bool
+        aptmirror : str
+        aptproxy : Settings
+        authorizedkeys : str
+        providertype : str
+        proxy : Settings
+        sslhostnameverification : bool
+        updatebehavior : UpdateBehavior
         '''
-        self.changed = {k: UnitSettings.from_json(v) for k, v in (changed or dict()).items()}
-        self.departed = departed
-
-
-class RelationUnitsWatchResult(Type):
-    _toSchema = {'changes': 'Changes', 'error': 'Error', 'relationunitswatcherid': 'RelationUnitsWatcherId'}
-    _toPy = {'Changes': 'changes', 'Error': 'error', 'RelationUnitsWatcherId': 'relationunitswatcherid'}
-    def __init__(self, changes=None, error=None, relationunitswatcherid=None):
-        '''
-        changes : RelationUnitsChange
-        error : Error
-        relationunitswatcherid : str
-        '''
-        self.changes = RelationUnitsChange.from_json(changes) if changes else None
-        self.error = Error.from_json(error) if error else None
-        self.relationunitswatcherid = relationunitswatcherid
+        self.allowlxcloopmounts = allowlxcloopmounts
+        self.aptmirror = aptmirror
+        self.aptproxy = Settings.from_json(aptproxy) if aptproxy else None
+        self.authorizedkeys = authorizedkeys
+        self.providertype = providertype
+        self.proxy = Settings.from_json(proxy) if proxy else None
+        self.sslhostnameverification = sslhostnameverification
+        self.updatebehavior = UpdateBehavior.from_json(updatebehavior) if updatebehavior else None
 
 
-class UnitSettings(Type):
-    _toSchema = {'version': 'Version'}
-    _toPy = {'Version': 'version'}
-    def __init__(self, version=None):
+class ContainerManagerConfig(Type):
+    _toSchema = {'managerconfig': 'ManagerConfig'}
+    _toPy = {'ManagerConfig': 'managerconfig'}
+    def __init__(self, managerconfig=None):
         '''
-        version : int
+        managerconfig : typing.Mapping[str, str]
         '''
-        self.version = version
+        self.managerconfig = managerconfig
 
 
-class RetryStrategy(Type):
-    _toSchema = {'maxretrytime': 'MaxRetryTime', 'minretrytime': 'MinRetryTime', 'jitterretrytime': 'JitterRetryTime', 'shouldretry': 'ShouldRetry', 'retrytimefactor': 'RetryTimeFactor'}
-    _toPy = {'MinRetryTime': 'minretrytime', 'ShouldRetry': 'shouldretry', 'MaxRetryTime': 'maxretrytime', 'RetryTimeFactor': 'retrytimefactor', 'JitterRetryTime': 'jitterretrytime'}
-    def __init__(self, jitterretrytime=None, maxretrytime=None, minretrytime=None, retrytimefactor=None, shouldretry=None):
+class ContainerManagerConfigParams(Type):
+    _toSchema = {'type_': 'Type'}
+    _toPy = {'Type': 'type_'}
+    def __init__(self, type_=None):
         '''
-        jitterretrytime : bool
-        maxretrytime : int
-        minretrytime : int
-        retrytimefactor : int
-        shouldretry : bool
+        type_ : str
         '''
-        self.jitterretrytime = jitterretrytime
-        self.maxretrytime = maxretrytime
-        self.minretrytime = minretrytime
-        self.retrytimefactor = retrytimefactor
-        self.shouldretry = shouldretry
+        self.type_ = type_
 
 
-class RetryStrategyResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
+class DistributionGroupResult(Type):
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
-        result : RetryStrategy
+        result : typing.Sequence[str]
         '''
         self.error = Error.from_json(error) if error else None
-        self.result = RetryStrategy.from_json(result) if result else None
+        self.result = result
 
 
-class RetryStrategyResults(Type):
+class DistributionGroupResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~RetryStrategyResult]
+        results : typing.Sequence[~DistributionGroupResult]
         '''
-        self.results = [RetryStrategyResult.from_json(o) for o in results or []]
+        self.results = [DistributionGroupResult.from_json(o) for o in results or []]
 
 
-class SSHAddressResult(Type):
-    _toSchema = {'error': 'error', 'address': 'address'}
-    _toPy = {'error': 'error', 'address': 'address'}
-    def __init__(self, address=None, error=None):
+class InstanceInfo(Type):
+    _toSchema = {'networkconfig': 'NetworkConfig', 'nonce': 'Nonce', 'characteristics': 'Characteristics', 'volumeattachments': 'VolumeAttachments', 'instanceid': 'InstanceId', 'tag': 'Tag', 'volumes': 'Volumes'}
+    _toPy = {'Characteristics': 'characteristics', 'InstanceId': 'instanceid', 'Volumes': 'volumes', 'Nonce': 'nonce', 'VolumeAttachments': 'volumeattachments', 'Tag': 'tag', 'NetworkConfig': 'networkconfig'}
+    def __init__(self, characteristics=None, instanceid=None, networkconfig=None, nonce=None, tag=None, volumeattachments=None, volumes=None):
         '''
-        address : str
-        error : Error
+        characteristics : HardwareCharacteristics
+        instanceid : str
+        networkconfig : typing.Sequence[~NetworkConfig]
+        nonce : str
+        tag : str
+        volumeattachments : typing.Mapping[str, ~VolumeAttachmentInfo]
+        volumes : typing.Sequence[~Volume]
         '''
-        self.address = address
-        self.error = Error.from_json(error) if error else None
+        self.characteristics = HardwareCharacteristics.from_json(characteristics) if characteristics else None
+        self.instanceid = instanceid
+        self.networkconfig = [NetworkConfig.from_json(o) for o in networkconfig or []]
+        self.nonce = nonce
+        self.tag = tag
+        self.volumeattachments = {k: VolumeAttachmentInfo.from_json(v) for k, v in (volumeattachments or dict()).items()}
+        self.volumes = [Volume.from_json(o) for o in volumes or []]
 
 
-class SSHAddressResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class InstancesInfo(Type):
+    _toSchema = {'machines': 'Machines'}
+    _toPy = {'Machines': 'machines'}
+    def __init__(self, machines=None):
         '''
-        results : typing.Sequence[~SSHAddressResult]
+        machines : typing.Sequence[~InstanceInfo]
         '''
-        self.results = [SSHAddressResult.from_json(o) for o in results or []]
+        self.machines = [InstanceInfo.from_json(o) for o in machines or []]
 
 
-class SSHProxyResult(Type):
-    _toSchema = {'use_proxy': 'use-proxy'}
-    _toPy = {'use-proxy': 'use_proxy'}
-    def __init__(self, use_proxy=None):
+class MachineContainers(Type):
+    _toSchema = {'containertypes': 'ContainerTypes', 'machinetag': 'MachineTag'}
+    _toPy = {'MachineTag': 'machinetag', 'ContainerTypes': 'containertypes'}
+    def __init__(self, containertypes=None, machinetag=None):
         '''
-        use_proxy : bool
+        containertypes : typing.Sequence[str]
+        machinetag : str
         '''
-        self.use_proxy = use_proxy
+        self.containertypes = containertypes
+        self.machinetag = machinetag
 
 
-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):
+class MachineContainersParams(Type):
+    _toSchema = {'params': 'Params'}
+    _toPy = {'Params': 'params'}
+    def __init__(self, params=None):
         '''
-        error : Error
-        public_keys : typing.Sequence[str]
+        params : typing.Sequence[~MachineContainers]
         '''
-        self.error = Error.from_json(error) if error else None
-        self.public_keys = public_keys
+        self.params = [MachineContainers.from_json(o) for o in params or []]
 
 
-class SSHPublicKeysResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class MachineNetworkConfigResult(Type):
+    _toSchema = {'info': 'Info', 'error': 'Error'}
+    _toPy = {'Error': 'error', 'Info': 'info'}
+    def __init__(self, error=None, info=None):
         '''
-        results : typing.Sequence[~SSHPublicKeysResult]
+        error : Error
+        info : typing.Sequence[~NetworkConfig]
         '''
-        self.results = [SSHPublicKeysResult.from_json(o) for o in results or []]
+        self.error = Error.from_json(error) if error else None
+        self.info = [NetworkConfig.from_json(o) for o in info or []]
 
 
-class AddRelation(Type):
-    _toSchema = {'endpoints': 'Endpoints'}
-    _toPy = {'Endpoints': 'endpoints'}
-    def __init__(self, endpoints=None):
+class MachineNetworkConfigResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        endpoints : typing.Sequence[str]
+        results : typing.Sequence[~MachineNetworkConfigResult]
         '''
-        self.endpoints = endpoints
+        self.results = [MachineNetworkConfigResult.from_json(o) for o in results or []]
 
 
-class AddRelationResults(Type):
-    _toSchema = {'endpoints': 'Endpoints'}
-    _toPy = {'Endpoints': 'endpoints'}
-    def __init__(self, endpoints=None):
+class ProvisioningInfo(Type):
+    _toSchema = {'jobs': 'Jobs', 'series': 'Series', 'imagemetadata': 'ImageMetadata', 'placement': 'Placement', 'subnetstozones': 'SubnetsToZones', 'constraints': 'Constraints', 'tags': 'Tags', 'endpointbindings': 'EndpointBindings', 'volumes': 'Volumes'}
+    _toPy = {'Constraints': 'constraints', 'ImageMetadata': 'imagemetadata', 'SubnetsToZones': 'subnetstozones', 'Series': 'series', 'Volumes': 'volumes', 'Tags': 'tags', 'EndpointBindings': 'endpointbindings', 'Placement': 'placement', 'Jobs': 'jobs'}
+    def __init__(self, constraints=None, endpointbindings=None, imagemetadata=None, jobs=None, placement=None, series=None, subnetstozones=None, tags=None, volumes=None):
         '''
-        endpoints : typing.Mapping[str, ~Relation]
+        constraints : Value
+        endpointbindings : typing.Mapping[str, str]
+        imagemetadata : typing.Sequence[~CloudImageMetadata]
+        jobs : typing.Sequence[str]
+        placement : str
+        series : str
+        subnetstozones : typing.Sequence[str]
+        tags : typing.Mapping[str, str]
+        volumes : typing.Sequence[~VolumeParams]
         '''
-        self.endpoints = {k: Relation.from_json(v) for k, v in (endpoints or dict()).items()}
+        self.constraints = Value.from_json(constraints) if constraints else None
+        self.endpointbindings = endpointbindings
+        self.imagemetadata = [CloudImageMetadata.from_json(o) for o in imagemetadata or []]
+        self.jobs = jobs
+        self.placement = placement
+        self.series = series
+        self.subnetstozones = subnetstozones
+        self.tags = tags
+        self.volumes = [VolumeParams.from_json(o) for o in volumes or []]
 
 
-class AddServiceUnits(Type):
-    _toSchema = {'servicename': 'ServiceName', 'placement': 'Placement', 'numunits': 'NumUnits'}
-    _toPy = {'ServiceName': 'servicename', 'Placement': 'placement', 'NumUnits': 'numunits'}
-    def __init__(self, numunits=None, placement=None, servicename=None):
+class ProvisioningInfoResult(Type):
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
-        numunits : int
-        placement : typing.Sequence[~Placement]
-        servicename : str
+        error : Error
+        result : ProvisioningInfo
         '''
-        self.numunits = numunits
-        self.placement = [Placement.from_json(o) for o in placement or []]
-        self.servicename = servicename
+        self.error = Error.from_json(error) if error else None
+        self.result = ProvisioningInfo.from_json(result) if result else None
 
 
-class AddServiceUnitsResults(Type):
-    _toSchema = {'units': 'Units'}
-    _toPy = {'Units': 'units'}
-    def __init__(self, units=None):
+class ProvisioningInfoResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        units : typing.Sequence[str]
+        results : typing.Sequence[~ProvisioningInfoResult]
         '''
-        self.units = units
+        self.results = [ProvisioningInfoResult.from_json(o) for o in results or []]
 
 
-class DestroyRelation(Type):
-    _toSchema = {'endpoints': 'Endpoints'}
-    _toPy = {'Endpoints': 'endpoints'}
-    def __init__(self, endpoints=None):
+class Settings(Type):
+    _toSchema = {'ftp': 'Ftp', 'noproxy': 'NoProxy', 'http': 'Http', 'https': 'Https'}
+    _toPy = {'Http': 'http', 'Https': 'https', 'NoProxy': 'noproxy', 'Ftp': 'ftp'}
+    def __init__(self, ftp=None, http=None, https=None, noproxy=None):
         '''
-        endpoints : typing.Sequence[str]
+        ftp : str
+        http : str
+        https : str
+        noproxy : str
         '''
-        self.endpoints = endpoints
+        self.ftp = ftp
+        self.http = http
+        self.https = https
+        self.noproxy = noproxy
 
 
-class DestroyServiceUnits(Type):
-    _toSchema = {'unitnames': 'UnitNames'}
-    _toPy = {'UnitNames': 'unitnames'}
-    def __init__(self, unitnames=None):
+class ToolsResult(Type):
+    _toSchema = {'toolslist': 'ToolsList', 'disablesslhostnameverification': 'DisableSSLHostnameVerification', 'error': 'Error'}
+    _toPy = {'Error': 'error', 'DisableSSLHostnameVerification': 'disablesslhostnameverification', 'ToolsList': 'toolslist'}
+    def __init__(self, disablesslhostnameverification=None, error=None, toolslist=None):
         '''
-        unitnames : typing.Sequence[str]
+        disablesslhostnameverification : bool
+        error : Error
+        toolslist : typing.Sequence[~Tools]
         '''
-        self.unitnames = unitnames
+        self.disablesslhostnameverification = disablesslhostnameverification
+        self.error = Error.from_json(error) if error else None
+        self.toolslist = [Tools.from_json(o) for o in toolslist or []]
 
 
-class GetServiceConstraints(Type):
-    _toSchema = {'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename'}
-    def __init__(self, servicename=None):
+class ToolsResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        servicename : str
+        results : typing.Sequence[~ToolsResult]
         '''
-        self.servicename = servicename
+        self.results = [ToolsResult.from_json(o) for o in results or []]
 
 
-class Relation(Type):
-    _toSchema = {'name': 'Name', 'limit': 'Limit', 'role': 'Role', 'optional': 'Optional', 'scope': 'Scope', 'interface': 'Interface'}
-    _toPy = {'Optional': 'optional', 'Limit': 'limit', 'Scope': 'scope', 'Name': 'name', 'Role': 'role', 'Interface': 'interface'}
-    def __init__(self, interface=None, limit=None, name=None, optional=None, role=None, scope=None):
+class UpdateBehavior(Type):
+    _toSchema = {'enableosupgrade': 'EnableOSUpgrade', 'enableosrefreshupdate': 'EnableOSRefreshUpdate'}
+    _toPy = {'EnableOSRefreshUpdate': 'enableosrefreshupdate', 'EnableOSUpgrade': 'enableosupgrade'}
+    def __init__(self, enableosrefreshupdate=None, enableosupgrade=None):
         '''
-        interface : str
-        limit : int
-        name : str
-        optional : bool
-        role : str
-        scope : str
+        enableosrefreshupdate : bool
+        enableosupgrade : bool
         '''
-        self.interface = interface
-        self.limit = limit
-        self.name = name
-        self.optional = optional
-        self.role = role
-        self.scope = scope
+        self.enableosrefreshupdate = enableosrefreshupdate
+        self.enableosupgrade = enableosupgrade
 
 
-class ServiceCharmRelations(Type):
-    _toSchema = {'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename'}
-    def __init__(self, servicename=None):
+class Volume(Type):
+    _toSchema = {'volumetag': 'volumetag', 'info': 'info'}
+    _toPy = {'volumetag': 'volumetag', 'info': 'info'}
+    def __init__(self, info=None, volumetag=None):
         '''
-        servicename : str
+        info : VolumeInfo
+        volumetag : str
         '''
-        self.servicename = servicename
+        self.info = VolumeInfo.from_json(info) if info else None
+        self.volumetag = volumetag
 
 
-class ServiceCharmRelationsResults(Type):
-    _toSchema = {'charmrelations': 'CharmRelations'}
-    _toPy = {'CharmRelations': 'charmrelations'}
-    def __init__(self, charmrelations=None):
+class VolumeAttachmentInfo(Type):
+    _toSchema = {'read_only': 'read-only', 'devicelink': 'devicelink', 'busaddress': 'busaddress', 'devicename': 'devicename'}
+    _toPy = {'devicelink': 'devicelink', 'busaddress': 'busaddress', 'devicename': 'devicename', 'read-only': 'read_only'}
+    def __init__(self, busaddress=None, devicelink=None, devicename=None, read_only=None):
         '''
-        charmrelations : typing.Sequence[str]
+        busaddress : str
+        devicelink : str
+        devicename : str
+        read_only : bool
         '''
-        self.charmrelations = charmrelations
+        self.busaddress = busaddress
+        self.devicelink = devicelink
+        self.devicename = devicename
+        self.read_only = read_only
 
 
-class ServiceDeploy(Type):
-    _toSchema = {'configyaml': 'ConfigYAML', 'storage': 'Storage', 'endpointbindings': 'EndpointBindings', 'resources': 'Resources', 'servicename': 'ServiceName', 'series': 'Series', 'charmurl': 'CharmUrl', 'config': 'Config', 'channel': 'Channel', 'placement': 'Placement', 'numunits': 'NumUnits', 'constraints': 'Constraints'}
-    _toPy = {'ServiceName': 'servicename', 'Constraints': 'constraints', 'ConfigYAML': 'configyaml', 'Resources': 'resources', 'Channel': 'channel', 'Storage': 'storage', 'Config': 'config', 'Placement': 'placement', 'EndpointBindings': 'endpointbindings', 'NumUnits': 'numunits', 'CharmUrl': 'charmurl', 'Series': 'series'}
-    def __init__(self, channel=None, charmurl=None, config=None, configyaml=None, constraints=None, endpointbindings=None, numunits=None, placement=None, resources=None, series=None, servicename=None, storage=None):
+class VolumeAttachmentParams(Type):
+    _toSchema = {'volumetag': 'volumetag', 'read_only': 'read-only', 'provider': 'provider', 'volumeid': 'volumeid', 'instanceid': 'instanceid', 'machinetag': 'machinetag'}
+    _toPy = {'volumetag': 'volumetag', 'provider': 'provider', 'read-only': 'read_only', 'volumeid': 'volumeid', 'instanceid': 'instanceid', 'machinetag': 'machinetag'}
+    def __init__(self, instanceid=None, machinetag=None, provider=None, read_only=None, volumeid=None, volumetag=None):
         '''
-        channel : str
-        charmurl : str
-        config : typing.Mapping[str, str]
-        configyaml : str
-        constraints : Value
-        endpointbindings : typing.Mapping[str, str]
-        numunits : int
-        placement : typing.Sequence[~Placement]
-        resources : typing.Mapping[str, str]
-        series : str
-        servicename : str
-        storage : typing.Mapping[str, ~Constraints]
+        instanceid : str
+        machinetag : str
+        provider : str
+        read_only : bool
+        volumeid : str
+        volumetag : str
         '''
-        self.channel = channel
-        self.charmurl = charmurl
-        self.config = config
-        self.configyaml = configyaml
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.endpointbindings = endpointbindings
-        self.numunits = numunits
-        self.placement = [Placement.from_json(o) for o in placement or []]
-        self.resources = resources
-        self.series = series
-        self.servicename = servicename
-        self.storage = {k: Constraints.from_json(v) for k, v in (storage or dict()).items()}
+        self.instanceid = instanceid
+        self.machinetag = machinetag
+        self.provider = provider
+        self.read_only = read_only
+        self.volumeid = volumeid
+        self.volumetag = volumetag
 
 
-class ServiceDestroy(Type):
-    _toSchema = {'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename'}
-    def __init__(self, servicename=None):
+class VolumeInfo(Type):
+    _toSchema = {'hardwareid': 'hardwareid', 'persistent': 'persistent', 'size': 'size', 'volumeid': 'volumeid'}
+    _toPy = {'hardwareid': 'hardwareid', 'persistent': 'persistent', 'size': 'size', 'volumeid': 'volumeid'}
+    def __init__(self, hardwareid=None, persistent=None, size=None, volumeid=None):
         '''
-        servicename : str
+        hardwareid : str
+        persistent : bool
+        size : int
+        volumeid : str
         '''
-        self.servicename = servicename
+        self.hardwareid = hardwareid
+        self.persistent = persistent
+        self.size = size
+        self.volumeid = volumeid
 
 
-class ServiceExpose(Type):
-    _toSchema = {'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename'}
-    def __init__(self, servicename=None):
+class VolumeParams(Type):
+    _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'size': 'size', 'volumetag': 'volumetag', 'tags': 'tags', 'provider': 'provider'}
+    _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'size': 'size', 'volumetag': 'volumetag', 'tags': 'tags', 'provider': 'provider'}
+    def __init__(self, attachment=None, attributes=None, provider=None, size=None, tags=None, volumetag=None):
         '''
-        servicename : str
+        attachment : VolumeAttachmentParams
+        attributes : typing.Mapping[str, typing.Any]
+        provider : str
+        size : int
+        tags : typing.Mapping[str, str]
+        volumetag : str
         '''
-        self.servicename = servicename
+        self.attachment = VolumeAttachmentParams.from_json(attachment) if attachment else None
+        self.attributes = attributes
+        self.provider = provider
+        self.size = size
+        self.tags = tags
+        self.volumetag = volumetag
 
 
-class ServiceGet(Type):
-    _toSchema = {'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename'}
-    def __init__(self, servicename=None):
+class WatchContainer(Type):
+    _toSchema = {'machinetag': 'MachineTag', 'containertype': 'ContainerType'}
+    _toPy = {'MachineTag': 'machinetag', 'ContainerType': 'containertype'}
+    def __init__(self, containertype=None, machinetag=None):
         '''
-        servicename : str
+        containertype : str
+        machinetag : str
         '''
-        self.servicename = servicename
+        self.containertype = containertype
+        self.machinetag = machinetag
 
 
-class ServiceGetResults(Type):
-    _toSchema = {'config': 'Config', 'charm': 'Charm', 'constraints': 'Constraints', 'service': 'Service'}
-    _toPy = {'Charm': 'charm', 'Constraints': 'constraints', 'Config': 'config', 'Service': 'service'}
-    def __init__(self, charm=None, config=None, constraints=None, service=None):
+class WatchContainers(Type):
+    _toSchema = {'params': 'Params'}
+    _toPy = {'Params': 'params'}
+    def __init__(self, params=None):
         '''
-        charm : str
-        config : typing.Mapping[str, typing.Any]
-        constraints : Value
-        service : str
+        params : typing.Sequence[~WatchContainer]
         '''
-        self.charm = charm
-        self.config = config
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.service = service
+        self.params = [WatchContainer.from_json(o) for o in params or []]
 
 
-class ServiceMetricCredential(Type):
-    _toSchema = {'metriccredentials': 'MetricCredentials', 'servicename': 'ServiceName'}
-    _toPy = {'MetricCredentials': 'metriccredentials', 'ServiceName': 'servicename'}
-    def __init__(self, metriccredentials=None, servicename=None):
+class ProxyConfig(Type):
+    _toSchema = {'ftp': 'FTP', 'noproxy': 'NoProxy', 'http': 'HTTP', 'https': 'HTTPS'}
+    _toPy = {'NoProxy': 'noproxy', 'FTP': 'ftp', 'HTTPS': 'https', 'HTTP': 'http'}
+    def __init__(self, ftp=None, http=None, https=None, noproxy=None):
         '''
-        metriccredentials : typing.Sequence[int]
-        servicename : str
+        ftp : str
+        http : str
+        https : str
+        noproxy : str
         '''
-        self.metriccredentials = metriccredentials
-        self.servicename = servicename
+        self.ftp = ftp
+        self.http = http
+        self.https = https
+        self.noproxy = noproxy
 
 
-class ServiceMetricCredentials(Type):
-    _toSchema = {'creds': 'Creds'}
-    _toPy = {'Creds': 'creds'}
-    def __init__(self, creds=None):
+class ProxyConfigResult(Type):
+    _toSchema = {'proxysettings': 'ProxySettings', 'aptproxysettings': 'APTProxySettings', 'error': 'Error'}
+    _toPy = {'ProxySettings': 'proxysettings', 'APTProxySettings': 'aptproxysettings', 'Error': 'error'}
+    def __init__(self, aptproxysettings=None, error=None, proxysettings=None):
         '''
-        creds : typing.Sequence[~ServiceMetricCredential]
+        aptproxysettings : ProxyConfig
+        error : Error
+        proxysettings : ProxyConfig
         '''
-        self.creds = [ServiceMetricCredential.from_json(o) for o in creds or []]
+        self.aptproxysettings = ProxyConfig.from_json(aptproxysettings) if aptproxysettings else None
+        self.error = Error.from_json(error) if error else None
+        self.proxysettings = ProxyConfig.from_json(proxysettings) if proxysettings else None
 
 
-class ServiceSet(Type):
-    _toSchema = {'options': 'Options', 'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename', 'Options': 'options'}
-    def __init__(self, options=None, servicename=None):
+class ProxyConfigResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
         '''
-        options : typing.Mapping[str, str]
-        servicename : str
+        results : typing.Sequence[~ProxyConfigResult]
         '''
-        self.options = options
-        self.servicename = servicename
+        self.results = [ProxyConfigResult.from_json(o) for o in results or []]
 
 
-class ServiceSetCharm(Type):
-    _toSchema = {'charmurl': 'charmurl', 'forceseries': 'forceseries', 'forceunits': 'forceunits', 'resourceids': 'resourceids', 'cs_channel': 'cs-channel', 'servicename': 'servicename'}
-    _toPy = {'charmurl': 'charmurl', 'forceseries': 'forceseries', 'forceunits': 'forceunits', 'cs-channel': 'cs_channel', 'resourceids': 'resourceids', 'servicename': 'servicename'}
-    def __init__(self, charmurl=None, cs_channel=None, forceseries=None, forceunits=None, resourceids=None, servicename=None):
+class RebootActionResult(Type):
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
-        charmurl : str
-        cs_channel : str
-        forceseries : bool
-        forceunits : bool
-        resourceids : typing.Mapping[str, str]
-        servicename : str
+        error : Error
+        result : str
         '''
-        self.charmurl = charmurl
-        self.cs_channel = cs_channel
-        self.forceseries = forceseries
-        self.forceunits = forceunits
-        self.resourceids = resourceids
-        self.servicename = servicename
+        self.error = Error.from_json(error) if error else None
+        self.result = result
 
 
-class ServiceUnexpose(Type):
-    _toSchema = {'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename'}
-    def __init__(self, servicename=None):
+class RebootActionResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
         '''
-        servicename : str
+        results : typing.Sequence[~RebootActionResult]
         '''
-        self.servicename = servicename
+        self.results = [RebootActionResult.from_json(o) for o in results or []]
 
 
-class ServiceUnset(Type):
-    _toSchema = {'options': 'Options', 'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename', 'Options': 'options'}
-    def __init__(self, options=None, servicename=None):
+class RelationUnitsChange(Type):
+    _toSchema = {'departed': 'Departed', 'changed': 'Changed'}
+    _toPy = {'Changed': 'changed', 'Departed': 'departed'}
+    def __init__(self, changed=None, departed=None):
         '''
-        options : typing.Sequence[str]
-        servicename : str
+        changed : typing.Mapping[str, ~UnitSettings]
+        departed : typing.Sequence[str]
         '''
-        self.options = options
-        self.servicename = servicename
+        self.changed = {k: UnitSettings.from_json(v) for k, v in (changed or dict()).items()}
+        self.departed = departed
 
 
-class ServiceUpdate(Type):
-    _toSchema = {'charmurl': 'CharmUrl', 'forceseries': 'ForceSeries', 'minunits': 'MinUnits', 'forcecharmurl': 'ForceCharmUrl', 'settingsyaml': 'SettingsYAML', 'settingsstrings': 'SettingsStrings', 'constraints': 'Constraints', 'servicename': 'ServiceName'}
-    _toPy = {'ServiceName': 'servicename', 'Constraints': 'constraints', 'SettingsStrings': 'settingsstrings', 'ForceSeries': 'forceseries', 'CharmUrl': 'charmurl', 'SettingsYAML': 'settingsyaml', 'MinUnits': 'minunits', 'ForceCharmUrl': 'forcecharmurl'}
-    def __init__(self, charmurl=None, constraints=None, forcecharmurl=None, forceseries=None, minunits=None, servicename=None, settingsstrings=None, settingsyaml=None):
+class RelationUnitsWatchResult(Type):
+    _toSchema = {'changes': 'Changes', 'relationunitswatcherid': 'RelationUnitsWatcherId', 'error': 'Error'}
+    _toPy = {'Changes': 'changes', 'RelationUnitsWatcherId': 'relationunitswatcherid', 'Error': 'error'}
+    def __init__(self, changes=None, error=None, relationunitswatcherid=None):
         '''
-        charmurl : str
-        constraints : Value
-        forcecharmurl : bool
-        forceseries : bool
-        minunits : int
-        servicename : str
-        settingsstrings : typing.Mapping[str, str]
-        settingsyaml : str
+        changes : RelationUnitsChange
+        error : Error
+        relationunitswatcherid : str
         '''
-        self.charmurl = charmurl
-        self.constraints = Value.from_json(constraints) if constraints else None
-        self.forcecharmurl = forcecharmurl
-        self.forceseries = forceseries
-        self.minunits = minunits
-        self.servicename = servicename
-        self.settingsstrings = settingsstrings
-        self.settingsyaml = settingsyaml
+        self.changes = RelationUnitsChange.from_json(changes) if changes else None
+        self.error = Error.from_json(error) if error else None
+        self.relationunitswatcherid = relationunitswatcherid
 
 
-class ServicesDeploy(Type):
-    _toSchema = {'services': 'Services'}
-    _toPy = {'Services': 'services'}
-    def __init__(self, services=None):
+class UnitSettings(Type):
+    _toSchema = {'version': 'Version'}
+    _toPy = {'Version': 'version'}
+    def __init__(self, version=None):
         '''
-        services : typing.Sequence[~ServiceDeploy]
+        version : int
         '''
-        self.services = [ServiceDeploy.from_json(o) for o in services or []]
+        self.version = version
 
 
-class SingularClaim(Type):
-    _toSchema = {'modeltag': 'ModelTag', 'controllertag': 'ControllerTag', 'duration': 'Duration'}
-    _toPy = {'ControllerTag': 'controllertag', 'Duration': 'duration', 'ModelTag': 'modeltag'}
-    def __init__(self, controllertag=None, duration=None, modeltag=None):
+class RetryStrategy(Type):
+    _toSchema = {'jitterretrytime': 'JitterRetryTime', 'shouldretry': 'ShouldRetry', 'minretrytime': 'MinRetryTime', 'retrytimefactor': 'RetryTimeFactor', 'maxretrytime': 'MaxRetryTime'}
+    _toPy = {'MinRetryTime': 'minretrytime', 'JitterRetryTime': 'jitterretrytime', 'RetryTimeFactor': 'retrytimefactor', 'MaxRetryTime': 'maxretrytime', 'ShouldRetry': 'shouldretry'}
+    def __init__(self, jitterretrytime=None, maxretrytime=None, minretrytime=None, retrytimefactor=None, shouldretry=None):
         '''
-        controllertag : str
-        duration : int
-        modeltag : str
+        jitterretrytime : bool
+        maxretrytime : int
+        minretrytime : int
+        retrytimefactor : int
+        shouldretry : bool
         '''
-        self.controllertag = controllertag
-        self.duration = duration
-        self.modeltag = modeltag
+        self.jitterretrytime = jitterretrytime
+        self.maxretrytime = maxretrytime
+        self.minretrytime = minretrytime
+        self.retrytimefactor = retrytimefactor
+        self.shouldretry = shouldretry
 
 
-class SingularClaims(Type):
-    _toSchema = {'claims': 'Claims'}
-    _toPy = {'Claims': 'claims'}
-    def __init__(self, claims=None):
+class RetryStrategyResult(Type):
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
+    def __init__(self, error=None, result=None):
         '''
-        claims : typing.Sequence[~SingularClaim]
+        error : Error
+        result : RetryStrategy
         '''
-        self.claims = [SingularClaim.from_json(o) for o in claims or []]
+        self.error = Error.from_json(error) if error else None
+        self.result = RetryStrategy.from_json(result) if result else None
 
 
-class ListSpacesResults(Type):
+class RetryStrategyResults(Type):
     _toSchema = {'results': 'Results'}
     _toPy = {'Results': 'results'}
     def __init__(self, results=None):
         '''
-        results : typing.Sequence[~Space]
+        results : typing.Sequence[~RetryStrategyResult]
         '''
-        self.results = [Space.from_json(o) for o in results or []]
+        self.results = [RetryStrategyResult.from_json(o) for o in results or []]
 
 
-class Space(Type):
-    _toSchema = {'subnets': 'Subnets', 'error': 'Error', 'name': 'Name'}
-    _toPy = {'Error': 'error', 'Subnets': 'subnets', 'Name': 'name'}
-    def __init__(self, error=None, name=None, subnets=None):
+class SSHAddressResult(Type):
+    _toSchema = {'address': 'address', 'error': 'error'}
+    _toPy = {'address': 'address', 'error': 'error'}
+    def __init__(self, address=None, error=None):
         '''
+        address : str
         error : Error
-        name : str
-        subnets : typing.Sequence[~Subnet]
         '''
+        self.address = address
         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 StatusHistoryPruneArgs(Type):
-    _toSchema = {'maxlogsperentity': 'MaxLogsPerEntity'}
-    _toPy = {'MaxLogsPerEntity': 'maxlogsperentity'}
-    def __init__(self, maxlogsperentity=None):
+class SSHAddressResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
         '''
-        maxlogsperentity : int
+        results : typing.Sequence[~SSHAddressResult]
         '''
-        self.maxlogsperentity = maxlogsperentity
+        self.results = [SSHAddressResult.from_json(o) for o in results or []]
 
 
-class FilesystemAttachmentInfo(Type):
-    _toSchema = {'mountpoint': 'mountpoint', 'read_only': 'read-only'}
-    _toPy = {'mountpoint': 'mountpoint', 'read-only': 'read_only'}
-    def __init__(self, mountpoint=None, read_only=None):
+class SSHProxyResult(Type):
+    _toSchema = {'use_proxy': 'use-proxy'}
+    _toPy = {'use-proxy': 'use_proxy'}
+    def __init__(self, use_proxy=None):
         '''
-        mountpoint : str
-        read_only : bool
+        use_proxy : bool
         '''
-        self.mountpoint = mountpoint
-        self.read_only = read_only
+        self.use_proxy = use_proxy
 
 
-class FilesystemDetails(Type):
-    _toSchema = {'filesystemtag': 'filesystemtag', 'info': 'info', 'status': 'status', 'volumetag': 'volumetag', 'storage': 'storage', 'machineattachments': 'machineattachments'}
-    _toPy = {'filesystemtag': 'filesystemtag', 'info': 'info', 'status': 'status', 'volumetag': 'volumetag', 'storage': 'storage', 'machineattachments': 'machineattachments'}
-    def __init__(self, filesystemtag=None, info=None, machineattachments=None, status=None, storage=None, volumetag=None):
+class SSHPublicKeysResult(Type):
+    _toSchema = {'public_keys': 'public-keys', 'error': 'error'}
+    _toPy = {'public-keys': 'public_keys', 'error': 'error'}
+    def __init__(self, error=None, public_keys=None):
+        '''
+        error : Error
+        public_keys : typing.Sequence[str]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.public_keys = public_keys
+
+
+class SSHPublicKeysResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
+        '''
+        results : typing.Sequence[~SSHPublicKeysResult]
+        '''
+        self.results = [SSHPublicKeysResult.from_json(o) for o in results or []]
+
+
+class SingularClaim(Type):
+    _toSchema = {'controllertag': 'ControllerTag', 'duration': 'Duration', 'modeltag': 'ModelTag'}
+    _toPy = {'ModelTag': 'modeltag', 'ControllerTag': 'controllertag', 'Duration': 'duration'}
+    def __init__(self, controllertag=None, duration=None, modeltag=None):
+        '''
+        controllertag : str
+        duration : int
+        modeltag : str
+        '''
+        self.controllertag = controllertag
+        self.duration = duration
+        self.modeltag = modeltag
+
+
+class SingularClaims(Type):
+    _toSchema = {'claims': 'Claims'}
+    _toPy = {'Claims': 'claims'}
+    def __init__(self, claims=None):
+        '''
+        claims : typing.Sequence[~SingularClaim]
+        '''
+        self.claims = [SingularClaim.from_json(o) for o in claims or []]
+
+
+class ListSpacesResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
+        '''
+        results : typing.Sequence[~Space]
+        '''
+        self.results = [Space.from_json(o) for o in results or []]
+
+
+class Space(Type):
+    _toSchema = {'subnets': 'Subnets', 'error': 'Error', 'name': 'Name'}
+    _toPy = {'Subnets': 'subnets', 'Error': 'error', 'Name': 'name'}
+    def __init__(self, error=None, name=None, subnets=None):
+        '''
+        error : Error
+        name : str
+        subnets : typing.Sequence[~Subnet]
+        '''
+        self.error = Error.from_json(error) if error else None
+        self.name = name
+        self.subnets = [Subnet.from_json(o) for o in subnets or []]
+
+
+class StatusHistoryPruneArgs(Type):
+    _toSchema = {'maxhistorytime': 'MaxHistoryTime', 'maxhistorymb': 'MaxHistoryMB'}
+    _toPy = {'MaxHistoryTime': 'maxhistorytime', 'MaxHistoryMB': 'maxhistorymb'}
+    def __init__(self, maxhistorymb=None, maxhistorytime=None):
+        '''
+        maxhistorymb : int
+        maxhistorytime : int
+        '''
+        self.maxhistorymb = maxhistorymb
+        self.maxhistorytime = maxhistorytime
+
+
+class FilesystemAttachmentInfo(Type):
+    _toSchema = {'mountpoint': 'mountpoint', 'read_only': 'read-only'}
+    _toPy = {'mountpoint': 'mountpoint', 'read-only': 'read_only'}
+    def __init__(self, mountpoint=None, read_only=None):
+        '''
+        mountpoint : str
+        read_only : bool
+        '''
+        self.mountpoint = mountpoint
+        self.read_only = read_only
+
+
+class FilesystemDetails(Type):
+    _toSchema = {'machineattachments': 'machineattachments', 'info': 'info', 'volumetag': 'volumetag', 'filesystemtag': 'filesystemtag', 'storage': 'storage', 'status': 'status'}
+    _toPy = {'machineattachments': 'machineattachments', 'info': 'info', 'volumetag': 'volumetag', 'filesystemtag': 'filesystemtag', 'storage': 'storage', 'status': 'status'}
+    def __init__(self, filesystemtag=None, info=None, machineattachments=None, status=None, storage=None, volumetag=None):
         '''
         filesystemtag : str
         info : FilesystemInfo
@@ -3981,8 +4047,8 @@ class FilesystemDetails(Type):
 
 
 class FilesystemDetailsListResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4035,8 +4101,8 @@ class FilesystemInfo(Type):
 
 
 class StorageAddParams(Type):
-    _toSchema = {'unit': 'unit', 'storagename': 'StorageName', 'storage': 'storage'}
-    _toPy = {'unit': 'unit', 'StorageName': 'storagename', 'storage': 'storage'}
+    _toSchema = {'storage': 'storage', 'storagename': 'StorageName', 'unit': 'unit'}
+    _toPy = {'StorageName': 'storagename', 'storage': 'storage', 'unit': 'unit'}
     def __init__(self, storagename=None, storage=None, unit=None):
         '''
         storagename : str
@@ -4049,8 +4115,8 @@ class StorageAddParams(Type):
 
 
 class StorageAttachmentDetails(Type):
-    _toSchema = {'unittag': 'unittag', 'location': 'location', 'machinetag': 'machinetag', 'storagetag': 'storagetag'}
-    _toPy = {'unittag': 'unittag', 'location': 'location', 'machinetag': 'machinetag', 'storagetag': 'storagetag'}
+    _toSchema = {'unittag': 'unittag', 'storagetag': 'storagetag', 'location': 'location', 'machinetag': 'machinetag'}
+    _toPy = {'unittag': 'unittag', 'storagetag': 'storagetag', 'location': 'location', 'machinetag': 'machinetag'}
     def __init__(self, location=None, machinetag=None, storagetag=None, unittag=None):
         '''
         location : str
@@ -4065,8 +4131,8 @@ class StorageAttachmentDetails(Type):
 
 
 class StorageConstraints(Type):
-    _toSchema = {'pool': 'Pool', 'count': 'Count', 'size': 'Size'}
-    _toPy = {'Pool': 'pool', 'Count': 'count', 'Size': 'size'}
+    _toSchema = {'pool': 'Pool', 'size': 'Size', 'count': 'Count'}
+    _toPy = {'Count': 'count', 'Pool': 'pool', 'Size': 'size'}
     def __init__(self, count=None, pool=None, size=None):
         '''
         count : int
@@ -4079,8 +4145,8 @@ class StorageConstraints(Type):
 
 
 class StorageDetails(Type):
-    _toSchema = {'attachments': 'attachments', 'status': 'status', 'persistent': 'Persistent', 'kind': 'kind', 'ownertag': 'ownertag', 'storagetag': 'storagetag'}
-    _toPy = {'Persistent': 'persistent', 'status': 'status', 'attachments': 'attachments', 'kind': 'kind', 'ownertag': 'ownertag', 'storagetag': 'storagetag'}
+    _toSchema = {'persistent': 'Persistent', 'storagetag': 'storagetag', 'kind': 'kind', 'ownertag': 'ownertag', 'attachments': 'attachments', 'status': 'status'}
+    _toPy = {'storagetag': 'storagetag', 'kind': 'kind', 'Persistent': 'persistent', 'ownertag': 'ownertag', 'attachments': 'attachments', 'status': 'status'}
     def __init__(self, persistent=None, attachments=None, kind=None, ownertag=None, status=None, storagetag=None):
         '''
         persistent : bool
@@ -4099,8 +4165,8 @@ class StorageDetails(Type):
 
 
 class StorageDetailsListResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4121,8 +4187,8 @@ class StorageDetailsListResults(Type):
 
 
 class StorageDetailsResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4163,8 +4229,8 @@ class StorageFilters(Type):
 
 
 class StoragePool(Type):
-    _toSchema = {'name': 'name', 'provider': 'provider', 'attrs': 'attrs'}
-    _toPy = {'name': 'name', 'provider': 'provider', 'attrs': 'attrs'}
+    _toSchema = {'provider': 'provider', 'attrs': 'attrs', 'name': 'name'}
+    _toPy = {'provider': 'provider', 'attrs': 'attrs', 'name': 'name'}
     def __init__(self, attrs=None, name=None, provider=None):
         '''
         attrs : typing.Mapping[str, typing.Any]
@@ -4199,8 +4265,8 @@ class StoragePoolFilters(Type):
 
 
 class StoragePoolsResult(Type):
-    _toSchema = {'storagepools': 'storagepools', 'error': 'error'}
-    _toPy = {'storagepools': 'storagepools', 'error': 'error'}
+    _toSchema = {'error': 'error', 'storagepools': 'storagepools'}
+    _toPy = {'error': 'error', 'storagepools': 'storagepools'}
     def __init__(self, error=None, storagepools=None):
         '''
         error : Error
@@ -4231,8 +4297,8 @@ class StoragesAddParams(Type):
 
 
 class VolumeDetails(Type):
-    _toSchema = {'info': 'info', 'machineattachments': 'machineattachments', 'status': 'status', 'volumetag': 'volumetag', 'storage': 'storage'}
-    _toPy = {'info': 'info', 'machineattachments': 'machineattachments', 'status': 'status', 'volumetag': 'volumetag', 'storage': 'storage'}
+    _toSchema = {'machineattachments': 'machineattachments', 'volumetag': 'volumetag', 'info': 'info', 'storage': 'storage', 'status': 'status'}
+    _toPy = {'machineattachments': 'machineattachments', 'volumetag': 'volumetag', 'info': 'info', 'storage': 'storage', 'status': 'status'}
     def __init__(self, info=None, machineattachments=None, status=None, storage=None, volumetag=None):
         '''
         info : VolumeInfo
@@ -4249,8 +4315,8 @@ class VolumeDetails(Type):
 
 
 class VolumeDetailsListResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4291,8 +4357,8 @@ class VolumeFilters(Type):
 
 
 class BlockDeviceResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4313,8 +4379,8 @@ class BlockDeviceResults(Type):
 
 
 class Filesystem(Type):
-    _toSchema = {'filesystemtag': 'filesystemtag', 'info': 'info', 'volumetag': 'volumetag'}
-    _toPy = {'filesystemtag': 'filesystemtag', 'info': 'info', 'volumetag': 'volumetag'}
+    _toSchema = {'filesystemtag': 'filesystemtag', 'volumetag': 'volumetag', 'info': 'info'}
+    _toPy = {'filesystemtag': 'filesystemtag', 'volumetag': 'volumetag', 'info': 'info'}
     def __init__(self, filesystemtag=None, info=None, volumetag=None):
         '''
         filesystemtag : str
@@ -4341,8 +4407,8 @@ class FilesystemAttachment(Type):
 
 
 class FilesystemAttachmentParams(Type):
-    _toSchema = {'filesystemtag': 'filesystemtag', 'instanceid': 'instanceid', 'mountpoint': 'mountpoint', 'machinetag': 'machinetag', 'filesystemid': 'filesystemid', 'provider': 'provider', 'read_only': 'read-only'}
-    _toPy = {'filesystemtag': 'filesystemtag', 'instanceid': 'instanceid', 'read-only': 'read_only', 'mountpoint': 'mountpoint', 'machinetag': 'machinetag', 'filesystemid': 'filesystemid', 'provider': 'provider'}
+    _toSchema = {'filesystemtag': 'filesystemtag', 'mountpoint': 'mountpoint', 'read_only': 'read-only', 'provider': 'provider', 'filesystemid': 'filesystemid', 'instanceid': 'instanceid', 'machinetag': 'machinetag'}
+    _toPy = {'filesystemtag': 'filesystemtag', 'mountpoint': 'mountpoint', 'provider': 'provider', 'read-only': 'read_only', 'filesystemid': 'filesystemid', 'instanceid': 'instanceid', 'machinetag': 'machinetag'}
     def __init__(self, filesystemid=None, filesystemtag=None, instanceid=None, machinetag=None, mountpoint=None, provider=None, read_only=None):
         '''
         filesystemid : str
@@ -4363,8 +4429,8 @@ class FilesystemAttachmentParams(Type):
 
 
 class FilesystemAttachmentParamsResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4385,8 +4451,8 @@ class FilesystemAttachmentParamsResults(Type):
 
 
 class FilesystemAttachmentResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4417,8 +4483,8 @@ class FilesystemAttachments(Type):
 
 
 class FilesystemParams(Type):
-    _toSchema = {'filesystemtag': 'filesystemtag', 'volumetag': 'volumetag', 'tags': 'tags', 'attachment': 'attachment', 'provider': 'provider', 'size': 'size', 'attributes': 'attributes'}
-    _toPy = {'filesystemtag': 'filesystemtag', 'volumetag': 'volumetag', 'tags': 'tags', 'attachment': 'attachment', 'provider': 'provider', 'size': 'size', 'attributes': 'attributes'}
+    _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'size': 'size', 'volumetag': 'volumetag', 'filesystemtag': 'filesystemtag', 'tags': 'tags', 'provider': 'provider'}
+    _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'size': 'size', 'volumetag': 'volumetag', 'filesystemtag': 'filesystemtag', 'tags': 'tags', 'provider': 'provider'}
     def __init__(self, attachment=None, attributes=None, filesystemtag=None, provider=None, size=None, tags=None, volumetag=None):
         '''
         attachment : FilesystemAttachmentParams
@@ -4439,8 +4505,8 @@ class FilesystemParams(Type):
 
 
 class FilesystemParamsResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4461,8 +4527,8 @@ class FilesystemParamsResults(Type):
 
 
 class FilesystemResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4513,8 +4579,8 @@ class MachineStorageIdsWatchResults(Type):
 
 
 class VolumeAttachment(Type):
-    _toSchema = {'info': 'info', 'machinetag': 'machinetag', 'volumetag': 'volumetag'}
-    _toPy = {'info': 'info', 'machinetag': 'machinetag', 'volumetag': 'volumetag'}
+    _toSchema = {'volumetag': 'volumetag', 'info': 'info', 'machinetag': 'machinetag'}
+    _toPy = {'volumetag': 'volumetag', 'info': 'info', 'machinetag': 'machinetag'}
     def __init__(self, info=None, machinetag=None, volumetag=None):
         '''
         info : VolumeAttachmentInfo
@@ -4527,8 +4593,8 @@ class VolumeAttachment(Type):
 
 
 class VolumeAttachmentParamsResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4549,8 +4615,8 @@ class VolumeAttachmentParamsResults(Type):
 
 
 class VolumeAttachmentResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4581,8 +4647,8 @@ class VolumeAttachments(Type):
 
 
 class VolumeParamsResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4603,8 +4669,8 @@ class VolumeParamsResults(Type):
 
 
 class VolumeResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4657,7 +4723,7 @@ class SpaceResults(Type):
 
 
 class ZoneResult(Type):
-    _toSchema = {'available': 'Available', 'error': 'Error', 'name': 'Name'}
+    _toSchema = {'error': 'Error', 'available': 'Available', 'name': 'Name'}
     _toPy = {'Error': 'error', 'Available': 'available', 'Name': 'name'}
     def __init__(self, available=None, error=None, name=None):
         '''
@@ -4681,8 +4747,8 @@ class ZoneResults(Type):
 
 
 class UndertakerModelInfo(Type):
-    _toSchema = {'globalname': 'GlobalName', 'name': 'Name', 'life': 'Life', 'uuid': 'UUID', 'issystem': 'IsSystem'}
-    _toPy = {'UUID': 'uuid', 'Name': 'name', 'Life': 'life', 'GlobalName': 'globalname', 'IsSystem': 'issystem'}
+    _toSchema = {'globalname': 'GlobalName', 'uuid': 'UUID', 'life': 'Life', 'issystem': 'IsSystem', 'name': 'Name'}
+    _toPy = {'GlobalName': 'globalname', 'IsSystem': 'issystem', 'Life': 'life', 'Name': 'name', 'UUID': 'uuid'}
     def __init__(self, globalname=None, issystem=None, life=None, name=None, uuid=None):
         '''
         globalname : str
@@ -4699,8 +4765,8 @@ class UndertakerModelInfo(Type):
 
 
 class UndertakerModelInfoResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4710,6 +4776,30 @@ class UndertakerModelInfoResult(Type):
         self.result = UndertakerModelInfo.from_json(result) if result else None
 
 
+class ApplicationStatusResult(Type):
+    _toSchema = {'units': 'Units', 'application': 'Application', 'error': 'Error'}
+    _toPy = {'Error': 'error', 'Application': 'application', 'Units': 'units'}
+    def __init__(self, application=None, error=None, units=None):
+        '''
+        application : StatusResult
+        error : Error
+        units : typing.Mapping[str, ~StatusResult]
+        '''
+        self.application = StatusResult.from_json(application) if application else None
+        self.error = Error.from_json(error) if error else None
+        self.units = {k: StatusResult.from_json(v) for k, v in (units or dict()).items()}
+
+
+class ApplicationStatusResults(Type):
+    _toSchema = {'results': 'Results'}
+    _toPy = {'Results': 'results'}
+    def __init__(self, results=None):
+        '''
+        results : typing.Sequence[~ApplicationStatusResult]
+        '''
+        self.results = [ApplicationStatusResult.from_json(o) for o in results or []]
+
+
 class CharmURL(Type):
     _toSchema = {'url': 'URL'}
     _toPy = {'URL': 'url'}
@@ -4731,8 +4821,8 @@ class CharmURLs(Type):
 
 
 class ConfigSettingsResult(Type):
-    _toSchema = {'error': 'Error', 'settings': 'Settings'}
-    _toPy = {'Error': 'error', 'Settings': 'settings'}
+    _toSchema = {'settings': 'Settings', 'error': 'Error'}
+    _toPy = {'Settings': 'settings', 'Error': 'error'}
     def __init__(self, error=None, settings=None):
         '''
         error : Error
@@ -4753,15 +4843,15 @@ class ConfigSettingsResults(Type):
 
 
 class Endpoint(Type):
-    _toSchema = {'relation': 'Relation', 'servicename': 'ServiceName'}
-    _toPy = {'Relation': 'relation', 'ServiceName': 'servicename'}
-    def __init__(self, relation=None, servicename=None):
+    _toSchema = {'relation': 'Relation', 'applicationname': 'ApplicationName'}
+    _toPy = {'Relation': 'relation', 'ApplicationName': 'applicationname'}
+    def __init__(self, applicationname=None, relation=None):
         '''
+        applicationname : str
         relation : Relation
-        servicename : str
         '''
+        self.applicationname = applicationname
         self.relation = Relation.from_json(relation) if relation else None
-        self.servicename = servicename
 
 
 class EntitiesCharmURL(Type):
@@ -4786,7 +4876,7 @@ class EntitiesPortRanges(Type):
 
 class EntityCharmURL(Type):
     _toSchema = {'charmurl': 'CharmURL', 'tag': 'Tag'}
-    _toPy = {'Tag': 'tag', 'CharmURL': 'charmurl'}
+    _toPy = {'CharmURL': 'charmurl', 'Tag': 'tag'}
     def __init__(self, charmurl=None, tag=None):
         '''
         charmurl : str
@@ -4797,8 +4887,8 @@ class EntityCharmURL(Type):
 
 
 class EntityPortRange(Type):
-    _toSchema = {'protocol': 'Protocol', 'fromport': 'FromPort', 'tag': 'Tag', 'toport': 'ToPort'}
-    _toPy = {'Tag': 'tag', 'ToPort': 'toport', 'Protocol': 'protocol', 'FromPort': 'fromport'}
+    _toSchema = {'toport': 'ToPort', 'fromport': 'FromPort', 'protocol': 'Protocol', 'tag': 'Tag'}
+    _toPy = {'FromPort': 'fromport', 'Tag': 'tag', 'Protocol': 'protocol', 'ToPort': 'toport'}
     def __init__(self, fromport=None, protocol=None, tag=None, toport=None):
         '''
         fromport : int
@@ -4823,8 +4913,8 @@ class GetLeadershipSettingsBulkResults(Type):
 
 
 class GetLeadershipSettingsResult(Type):
-    _toSchema = {'error': 'Error', 'settings': 'Settings'}
-    _toPy = {'Error': 'error', 'Settings': 'settings'}
+    _toSchema = {'settings': 'Settings', 'error': 'Error'}
+    _toPy = {'Settings': 'settings', 'Error': 'error'}
     def __init__(self, error=None, settings=None):
         '''
         error : Error
@@ -4835,8 +4925,8 @@ class GetLeadershipSettingsResult(Type):
 
 
 class IntResult(Type):
-    _toSchema = {'error': 'Error', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result'}
+    _toSchema = {'result': 'Result', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -4867,20 +4957,20 @@ class MergeLeadershipSettingsBulkParams(Type):
 
 
 class MergeLeadershipSettingsParam(Type):
-    _toSchema = {'settings': 'Settings', 'servicetag': 'ServiceTag'}
-    _toPy = {'Settings': 'settings', 'ServiceTag': 'servicetag'}
-    def __init__(self, servicetag=None, settings=None):
+    _toSchema = {'applicationtag': 'ApplicationTag', 'settings': 'Settings'}
+    _toPy = {'Settings': 'settings', 'ApplicationTag': 'applicationtag'}
+    def __init__(self, applicationtag=None, settings=None):
         '''
-        servicetag : str
+        applicationtag : str
         settings : typing.Mapping[str, str]
         '''
-        self.servicetag = servicetag
+        self.applicationtag = applicationtag
         self.settings = settings
 
 
 class ModelResult(Type):
-    _toSchema = {'error': 'Error', 'uuid': 'UUID', 'name': 'Name'}
-    _toPy = {'Error': 'error', 'UUID': 'uuid', 'Name': 'name'}
+    _toSchema = {'uuid': 'UUID', 'error': 'Error', 'name': 'Name'}
+    _toPy = {'Error': 'error', 'Name': 'name', 'UUID': 'uuid'}
     def __init__(self, error=None, name=None, uuid=None):
         '''
         error : Error
@@ -4903,8 +4993,8 @@ class RelationIds(Type):
 
 
 class RelationResult(Type):
-    _toSchema = {'endpoint': 'Endpoint', 'key': 'Key', 'error': 'Error', 'id_': 'Id', 'life': 'Life'}
-    _toPy = {'Error': 'error', 'Endpoint': 'endpoint', 'Key': 'key', 'Life': 'life', 'Id': 'id_'}
+    _toSchema = {'key': 'Key', 'life': 'Life', 'id_': 'Id', 'endpoint': 'Endpoint', 'error': 'Error'}
+    _toPy = {'Endpoint': 'endpoint', 'Id': 'id_', 'Error': 'error', 'Key': 'key', 'Life': 'life'}
     def __init__(self, endpoint=None, error=None, id_=None, key=None, life=None):
         '''
         endpoint : Endpoint
@@ -4931,7 +5021,7 @@ class RelationResults(Type):
 
 
 class RelationUnit(Type):
-    _toSchema = {'unit': 'Unit', 'relation': 'Relation'}
+    _toSchema = {'relation': 'Relation', 'unit': 'Unit'}
     _toPy = {'Relation': 'relation', 'Unit': 'unit'}
     def __init__(self, relation=None, unit=None):
         '''
@@ -4943,8 +5033,8 @@ class RelationUnit(Type):
 
 
 class RelationUnitPair(Type):
-    _toSchema = {'relation': 'Relation', 'localunit': 'LocalUnit', 'remoteunit': 'RemoteUnit'}
-    _toPy = {'Relation': 'relation', 'RemoteUnit': 'remoteunit', 'LocalUnit': 'localunit'}
+    _toSchema = {'localunit': 'LocalUnit', 'relation': 'Relation', 'remoteunit': 'RemoteUnit'}
+    _toPy = {'RemoteUnit': 'remoteunit', 'Relation': 'relation', 'LocalUnit': 'localunit'}
     def __init__(self, localunit=None, relation=None, remoteunit=None):
         '''
         localunit : str
@@ -4967,8 +5057,8 @@ class RelationUnitPairs(Type):
 
 
 class RelationUnitSettings(Type):
-    _toSchema = {'unit': 'Unit', 'relation': 'Relation', 'settings': 'Settings'}
-    _toPy = {'Relation': 'relation', 'Unit': 'unit', 'Settings': 'settings'}
+    _toSchema = {'settings': 'Settings', 'relation': 'Relation', 'unit': 'Unit'}
+    _toPy = {'Settings': 'settings', 'Relation': 'relation', 'Unit': 'unit'}
     def __init__(self, relation=None, settings=None, unit=None):
         '''
         relation : str
@@ -5011,7 +5101,7 @@ class RelationUnitsWatchResults(Type):
 
 
 class ResolvedModeResult(Type):
-    _toSchema = {'error': 'Error', 'mode': 'Mode'}
+    _toSchema = {'mode': 'Mode', 'error': 'Error'}
     _toPy = {'Error': 'error', 'Mode': 'mode'}
     def __init__(self, error=None, mode=None):
         '''
@@ -5032,33 +5122,9 @@ class ResolvedModeResults(Type):
         self.results = [ResolvedModeResult.from_json(o) for o in results or []]
 
 
-class ServiceStatusResult(Type):
-    _toSchema = {'units': 'Units', 'error': 'Error', 'service': 'Service'}
-    _toPy = {'Error': 'error', 'Service': 'service', 'Units': 'units'}
-    def __init__(self, error=None, service=None, units=None):
-        '''
-        error : Error
-        service : StatusResult
-        units : typing.Mapping[str, ~StatusResult]
-        '''
-        self.error = Error.from_json(error) if error else None
-        self.service = StatusResult.from_json(service) if service else None
-        self.units = {k: StatusResult.from_json(v) for k, v in (units or dict()).items()}
-
-
-class ServiceStatusResults(Type):
-    _toSchema = {'results': 'Results'}
-    _toPy = {'Results': 'results'}
-    def __init__(self, results=None):
-        '''
-        results : typing.Sequence[~ServiceStatusResult]
-        '''
-        self.results = [ServiceStatusResult.from_json(o) for o in results or []]
-
-
 class SettingsResult(Type):
-    _toSchema = {'error': 'Error', 'settings': 'Settings'}
-    _toPy = {'Error': 'error', 'Settings': 'settings'}
+    _toSchema = {'settings': 'Settings', 'error': 'Error'}
+    _toPy = {'Settings': 'settings', 'Error': 'error'}
     def __init__(self, error=None, settings=None):
         '''
         error : Error
@@ -5079,8 +5145,8 @@ class SettingsResults(Type):
 
 
 class StorageAttachment(Type):
-    _toSchema = {'ownertag': 'OwnerTag', 'unittag': 'UnitTag', 'location': 'Location', 'kind': 'Kind', 'life': 'Life', 'storagetag': 'StorageTag'}
-    _toPy = {'UnitTag': 'unittag', 'OwnerTag': 'ownertag', 'Location': 'location', 'Life': 'life', 'StorageTag': 'storagetag', 'Kind': 'kind'}
+    _toSchema = {'storagetag': 'StorageTag', 'location': 'Location', 'life': 'Life', 'unittag': 'UnitTag', 'ownertag': 'OwnerTag', 'kind': 'Kind'}
+    _toPy = {'OwnerTag': 'ownertag', 'StorageTag': 'storagetag', 'UnitTag': 'unittag', 'Life': 'life', 'Location': 'location', 'Kind': 'kind'}
     def __init__(self, kind=None, life=None, location=None, ownertag=None, storagetag=None, unittag=None):
         '''
         kind : int
@@ -5121,8 +5187,8 @@ class StorageAttachmentIds(Type):
 
 
 class StorageAttachmentIdsResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -5143,8 +5209,8 @@ class StorageAttachmentIdsResults(Type):
 
 
 class StorageAttachmentResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -5165,8 +5231,8 @@ class StorageAttachmentResults(Type):
 
 
 class StringBoolResult(Type):
-    _toSchema = {'error': 'Error', 'ok': 'Ok', 'result': 'Result'}
-    _toPy = {'Error': 'error', 'Result': 'result', 'Ok': 'ok'}
+    _toSchema = {'result': 'Result', 'ok': 'Ok', 'error': 'Error'}
+    _toPy = {'Result': 'result', 'Error': 'error', 'Ok': 'ok'}
     def __init__(self, error=None, ok=None, result=None):
         '''
         error : Error
@@ -5190,7 +5256,7 @@ class StringBoolResults(Type):
 
 class UnitNetworkConfig(Type):
     _toSchema = {'unittag': 'UnitTag', 'bindingname': 'BindingName'}
-    _toPy = {'UnitTag': 'unittag', 'BindingName': 'bindingname'}
+    _toPy = {'BindingName': 'bindingname', 'UnitTag': 'unittag'}
     def __init__(self, bindingname=None, unittag=None):
         '''
         bindingname : str
@@ -5202,7 +5268,7 @@ class UnitNetworkConfig(Type):
 
 class UnitNetworkConfigResult(Type):
     _toSchema = {'info': 'Info', 'error': 'Error'}
-    _toPy = {'Info': 'info', 'Error': 'error'}
+    _toPy = {'Error': 'error', 'Info': 'info'}
     def __init__(self, error=None, info=None):
         '''
         error : Error
@@ -5277,8 +5343,8 @@ class VersionResults(Type):
 
 
 class AddUser(Type):
-    _toSchema = {'model_access_permission': 'model-access-permission', 'display_name': 'display-name', 'username': 'username', 'shared_model_tags': 'shared-model-tags', 'password': 'password'}
-    _toPy = {'password': 'password', 'model-access-permission': 'model_access_permission', 'display-name': 'display_name', 'username': 'username', 'shared-model-tags': 'shared_model_tags'}
+    _toSchema = {'model_access_permission': 'model-access-permission', 'shared_model_tags': 'shared-model-tags', 'password': 'password', 'username': 'username', 'display_name': 'display-name'}
+    _toPy = {'model-access-permission': 'model_access_permission', 'password': 'password', 'username': 'username', 'shared-model-tags': 'shared_model_tags', 'display-name': 'display_name'}
     def __init__(self, display_name=None, model_access_permission=None, password=None, shared_model_tags=None, username=None):
         '''
         display_name : str
@@ -5295,8 +5361,8 @@ class AddUser(Type):
 
 
 class AddUserResult(Type):
-    _toSchema = {'error': 'error', 'tag': 'tag', 'secret_key': 'secret-key'}
-    _toPy = {'error': 'error', 'secret-key': 'secret_key', 'tag': 'tag'}
+    _toSchema = {'tag': 'tag', 'error': 'error', 'secret_key': 'secret-key'}
+    _toPy = {'error': 'error', 'tag': 'tag', 'secret-key': 'secret_key'}
     def __init__(self, error=None, secret_key=None, tag=None):
         '''
         error : Error
@@ -5329,8 +5395,8 @@ class AddUsers(Type):
 
 
 class MacaroonResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -5351,8 +5417,8 @@ class MacaroonResults(Type):
 
 
 class UserInfo(Type):
-    _toSchema = {'created_by': 'created-by', 'username': 'username', 'display_name': 'display-name', 'last_connection': 'last-connection', 'disabled': 'disabled', 'date_created': 'date-created'}
-    _toPy = {'username': 'username', 'created-by': 'created_by', 'display-name': 'display_name', 'disabled': 'disabled', 'last-connection': 'last_connection', 'date-created': 'date_created'}
+    _toSchema = {'date_created': 'date-created', 'last_connection': 'last-connection', 'disabled': 'disabled', 'display_name': 'display-name', 'created_by': 'created-by', 'username': 'username'}
+    _toPy = {'last-connection': 'last_connection', 'date-created': 'date_created', 'disabled': 'disabled', 'created-by': 'created_by', 'username': 'username', 'display-name': 'display_name'}
     def __init__(self, created_by=None, date_created=None, disabled=None, display_name=None, last_connection=None, username=None):
         '''
         created_by : str
@@ -5383,8 +5449,8 @@ class UserInfoRequest(Type):
 
 
 class UserInfoResult(Type):
-    _toSchema = {'error': 'error', 'result': 'result'}
-    _toPy = {'error': 'error', 'result': 'result'}
+    _toSchema = {'result': 'result', 'error': 'error'}
+    _toPy = {'result': 'result', 'error': 'error'}
     def __init__(self, error=None, result=None):
         '''
         error : Error
@@ -5394,71 +5460,532 @@ class UserInfoResult(Type):
         self.result = UserInfo.from_json(result) if result else None
 
 
-class UserInfoResults(Type):
-    _toSchema = {'results': 'results'}
-    _toPy = {'results': 'results'}
-    def __init__(self, results=None):
+class UserInfoResults(Type):
+    _toSchema = {'results': 'results'}
+    _toPy = {'results': 'results'}
+    def __init__(self, results=None):
+        '''
+        results : typing.Sequence[~UserInfoResult]
+        '''
+        self.results = [UserInfoResult.from_json(o) for o in results or []]
+
+
+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': {'ActionSpecs': {'patternProperties': {'.*': {'$ref': '#/definitions/ActionSpec'}},
+                                                                'type': 'object'}},
+                                 'required': ['ActionSpecs'],
+                                 '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': {'ApplicationTag': {'type': 'string'},
+                                                                      'actions': {'$ref': '#/definitions/Actions'},
+                                                                      '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'},
+                                                  'MacaroonPath': {'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,
+                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
+                                                             'type': 'array'},
+                                                 'data': {'items': {'type': 'integer'},
+                                                          'type': 'array'},
+                                                 'id': {'$ref': '#/definitions/packet'},
+                                                 'location': {'$ref': '#/definitions/packet'},
+                                                 'sig': {'items': {'type': 'integer'},
+                                                         'type': 'array'}},
+                                  'required': ['data',
+                                               'location',
+                                               'id',
+                                               'caveats',
+                                               'sig'],
+                                  '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',
+                                                'Machines',
+                                                'Applications',
+                                                'Units'],
+                                   'type': 'object'},
+                     'caveat': {'additionalProperties': False,
+                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
+                                               'location': {'$ref': '#/definitions/packet'},
+                                               'verificationId': {'$ref': '#/definitions/packet'}},
+                                'required': ['location',
+                                             'caveatId',
+                                             'verificationId'],
+                                'type': 'object'},
+                     'packet': {'additionalProperties': False,
+                                'properties': {'headerLen': {'type': 'integer'},
+                                               'start': {'type': 'integer'},
+                                               'totalLen': {'type': 'integer'}},
+                                'required': ['start', 'totalLen', 'headerLen'],
+                                'type': 'object'}},
+     'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'ApplicationsCharmsActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                                 'Result': {'$ref': '#/definitions/ApplicationsCharmActionsResults'}},
+                                                  'type': 'object'},
+                    'Cancel': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                              'Result': {'$ref': '#/definitions/ActionResults'}},
+                               'type': 'object'},
+                    'Enqueue': {'properties': {'Params': {'$ref': '#/definitions/Actions'},
+                                               'Result': {'$ref': '#/definitions/ActionResults'}},
+                                'type': 'object'},
+                    'FindActionTagsByPrefix': {'properties': {'Params': {'$ref': '#/definitions/FindTags'},
+                                                              'Result': {'$ref': '#/definitions/FindTagsResults'}},
+                                               'type': 'object'},
+                    'FindActionsByNames': {'properties': {'Params': {'$ref': '#/definitions/FindActionsByNames'},
+                                                          'Result': {'$ref': '#/definitions/ActionsByNames'}},
+                                           'type': 'object'},
+                    'ListAll': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                'type': 'object'},
+                    'ListCompleted': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                     'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                      'type': 'object'},
+                    'ListPending': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                    'type': 'object'},
+                    'ListRunning': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                                    'type': 'object'},
+                    'Run': {'properties': {'Params': {'$ref': '#/definitions/RunParams'},
+                                           'Result': {'$ref': '#/definitions/ActionResults'}},
+                            'type': 'object'},
+                    'RunOnAllMachines': {'properties': {'Params': {'$ref': '#/definitions/RunParams'},
+                                                        'Result': {'$ref': '#/definitions/ActionResults'}},
+                                         'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(ActionResults)
+    async def Actions(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ActionResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='Actions', Version=2, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationsCharmActionsResults)
+    async def ApplicationsCharmsActions(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ApplicationCharmActionsResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='ApplicationsCharmsActions', Version=2, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionResults)
+    async def Cancel(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ActionResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='Cancel', Version=2, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionResults)
+    async def Enqueue(self, actionspecs):
+        '''
+        actionspecs : typing.Mapping[str, ~ActionSpec]
+        Returns -> typing.Sequence[~ActionResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='Enqueue', Version=2, Params=params)
+        params['ActionSpecs'] = actionspecs
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(FindTagsResults)
+    async def FindActionTagsByPrefix(self, prefixes):
+        '''
+        prefixes : typing.Sequence[str]
+        Returns -> typing.Sequence[~Entity]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='FindActionTagsByPrefix', Version=2, Params=params)
+        params['prefixes'] = prefixes
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionsByNames)
+    async def FindActionsByNames(self, names):
+        '''
+        names : typing.Sequence[str]
+        Returns -> typing.Sequence[~ActionsByName]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='FindActionsByNames', Version=2, Params=params)
+        params['names'] = names
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionsByReceivers)
+    async def ListAll(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ActionsByReceiver]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='ListAll', Version=2, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionsByReceivers)
+    async def ListCompleted(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ActionsByReceiver]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='ListCompleted', Version=2, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionsByReceivers)
+    async def ListPending(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ActionsByReceiver]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='ListPending', Version=2, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ActionsByReceivers)
+    async def ListRunning(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ActionsByReceiver]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='ListRunning', Version=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[str]
+        commands : str
+        machines : typing.Sequence[str]
+        timeout : int
+        units : typing.Sequence[str]
+        Returns -> typing.Sequence[~ActionResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='Run', Version=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[str]
+        commands : str
+        machines : typing.Sequence[str]
+        timeout : int
+        units : typing.Sequence[str]
+        Returns -> typing.Sequence[~ActionResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Action', Request='RunOnAllMachines', Version=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 AddresserFacade(Type):
+    name = 'Addresser'
+    version = 2
+    schema =     {'definitions': {'BoolResult': {'additionalProperties': False,
+                                    'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                   'Result': {'type': 'boolean'}},
+                                    'required': ['Error', 'Result'],
+                                    'type': 'object'},
+                     'EntitiesWatchResult': {'additionalProperties': False,
+                                             'properties': {'Changes': {'items': {'type': 'string'},
+                                                                        'type': 'array'},
+                                                            'EntityWatcherId': {'type': 'string'},
+                                                            'Error': {'$ref': '#/definitions/Error'}},
+                                             'required': ['EntityWatcherId',
+                                                          'Changes',
+                                                          'Error'],
+                                             'type': 'object'},
+                     'Error': {'additionalProperties': False,
+                               'properties': {'Code': {'type': 'string'},
+                                              'Info': {'$ref': '#/definitions/ErrorInfo'},
+                                              'Message': {'type': 'string'}},
+                               'required': ['Message', 'Code'],
+                               'type': 'object'},
+                     'ErrorInfo': {'additionalProperties': False,
+                                   'properties': {'Macaroon': {'$ref': '#/definitions/Macaroon'},
+                                                  'MacaroonPath': {'type': 'string'}},
+                                   'type': 'object'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'Error': {'$ref': '#/definitions/Error'}},
+                                     'required': ['Error'],
+                                     'type': 'object'},
+                     'Macaroon': {'additionalProperties': False,
+                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
+                                                             'type': 'array'},
+                                                 'data': {'items': {'type': 'integer'},
+                                                          'type': 'array'},
+                                                 'id': {'$ref': '#/definitions/packet'},
+                                                 'location': {'$ref': '#/definitions/packet'},
+                                                 'sig': {'items': {'type': 'integer'},
+                                                         'type': 'array'}},
+                                  'required': ['data',
+                                               'location',
+                                               'id',
+                                               'caveats',
+                                               'sig'],
+                                  'type': 'object'},
+                     'caveat': {'additionalProperties': False,
+                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
+                                               'location': {'$ref': '#/definitions/packet'},
+                                               'verificationId': {'$ref': '#/definitions/packet'}},
+                                'required': ['location',
+                                             'caveatId',
+                                             'verificationId'],
+                                'type': 'object'},
+                     'packet': {'additionalProperties': False,
+                                'properties': {'headerLen': {'type': 'integer'},
+                                               'start': {'type': 'integer'},
+                                               'totalLen': {'type': 'integer'}},
+                                'required': ['start', 'totalLen', 'headerLen'],
+                                'type': 'object'}},
+     'properties': {'CanDeallocateAddresses': {'properties': {'Result': {'$ref': '#/definitions/BoolResult'}},
+                                               'type': 'object'},
+                    'CleanupIPAddresses': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}},
+                                           'type': 'object'},
+                    'WatchIPAddresses': {'properties': {'Result': {'$ref': '#/definitions/EntitiesWatchResult'}},
+                                         'type': 'object'}},
+     'type': 'object'}
+    
+
+    @ReturnMapping(BoolResult)
+    async def CanDeallocateAddresses(self):
+        '''
+
+        Returns -> typing.Union[_ForwardRef('Error'), bool]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Addresser', Request='CanDeallocateAddresses', Version=2, Params=params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResult)
+    async def CleanupIPAddresses(self):
+        '''
+
+        Returns -> Error
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Addresser', Request='CleanupIPAddresses', Version=2, Params=params)
+
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(EntitiesWatchResult)
+    async def WatchIPAddresses(self):
         '''
-        results : typing.Sequence[~UserInfoResult]
+
+        Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error')]
         '''
-        self.results = [UserInfoResult.from_json(o) for o in results or []]
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Addresser', Request='WatchIPAddresses', Version=2, Params=params)
 
+        reply = await self.rpc(msg)
+        return reply
 
-class Action(Type):
-    name = 'Action'
-    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'},
-                     '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'},
-                     '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'},
+
+class AgentFacade(Type):
+    name = 'Agent'
+    version = 2
+    schema =     {'definitions': {'AgentGetEntitiesResult': {'additionalProperties': False,
+                                                'properties': {'ContainerType': {'type': 'string'},
+                                                               'Error': {'$ref': '#/definitions/Error'},
+                                                               'Jobs': {'items': {'type': 'string'},
+                                                                        'type': 'array'},
+                                                               'Life': {'type': 'string'}},
+                                                'required': ['Life',
+                                                             'Jobs',
+                                                             'ContainerType',
+                                                             'Error'],
+                                                'type': 'object'},
+                     'AgentGetEntitiesResults': {'additionalProperties': False,
+                                                 'properties': {'Entities': {'items': {'$ref': '#/definitions/AgentGetEntitiesResult'},
+                                                                             'type': 'array'}},
+                                                 'required': ['Entities'],
+                                                 'type': 'object'},
                      'Entities': {'additionalProperties': False,
                                   'properties': {'Entities': {'items': {'$ref': '#/definitions/Entity'},
                                                               'type': 'array'}},
@@ -5468,6 +5995,16 @@ class Action(Type):
                                 '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'},
@@ -5478,21 +6015,19 @@ class Action(Type):
                                    'properties': {'Macaroon': {'$ref': '#/definitions/Macaroon'},
                                                   'MacaroonPath': {'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'},
+                     'ErrorResult': {'additionalProperties': False,
+                                     'properties': {'Error': {'$ref': '#/definitions/Error'}},
+                                     'required': ['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,
                                   'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
                                                              'type': 'array'},
@@ -5508,30 +6043,33 @@ class Action(Type):
                                                'caveats',
                                                'sig'],
                                   'type': 'object'},
-                     'RunParams': {'additionalProperties': False,
-                                   'properties': {'Commands': {'type': 'string'},
-                                                  'Machines': {'items': {'type': 'string'},
-                                                               'type': 'array'},
-                                                  'Services': {'items': {'type': 'string'},
-                                                               'type': 'array'},
-                                                  'Timeout': {'type': 'integer'},
-                                                  'Units': {'items': {'type': 'string'},
-                                                            'type': 'array'}},
-                                   'required': ['Commands',
-                                                'Timeout',
-                                                'Machines',
-                                                'Services',
-                                                'Units'],
-                                   'type': 'object'},
-                     'ServiceCharmActionsResult': {'additionalProperties': False,
-                                                   'properties': {'actions': {'$ref': '#/definitions/Actions'},
-                                                                  'error': {'$ref': '#/definitions/Error'},
-                                                                  'servicetag': {'type': 'string'}},
-                                                   'type': 'object'},
-                     'ServicesCharmActionsResults': {'additionalProperties': False,
-                                                     'properties': {'results': {'items': {'$ref': '#/definitions/ServiceCharmActionsResult'},
-                                                                                'type': 'array'}},
-                                                     'type': 'object'},
+                     'ModelConfigResult': {'additionalProperties': False,
+                                           'properties': {'Config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                  'type': 'object'}},
+                                                                     'type': 'object'}},
+                                           'required': ['Config'],
+                                           'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                          'NotifyWatcherId': {'type': 'string'}},
+                                           'required': ['NotifyWatcherId', 'Error'],
+                                           'type': 'object'},
+                     'StateServingInfo': {'additionalProperties': False,
+                                          'properties': {'APIPort': {'type': 'integer'},
+                                                         'CAPrivateKey': {'type': 'string'},
+                                                         'Cert': {'type': 'string'},
+                                                         'PrivateKey': {'type': 'string'},
+                                                         'SharedSecret': {'type': 'string'},
+                                                         'StatePort': {'type': 'integer'},
+                                                         'SystemIdentity': {'type': 'string'}},
+                                          'required': ['APIPort',
+                                                       'StatePort',
+                                                       'Cert',
+                                                       'PrivateKey',
+                                                       'CAPrivateKey',
+                                                       'SharedSecret',
+                                                       'SystemIdentity'],
+                                          'type': 'object'},
                      'caveat': {'additionalProperties': False,
                                 'properties': {'caveatId': {'$ref': '#/definitions/packet'},
                                                'location': {'$ref': '#/definitions/packet'},
@@ -5546,257 +6084,285 @@ class Action(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 'type': 'object'}},
-     'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                               'Result': {'$ref': '#/definitions/ActionResults'}},
-                                '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'}},
+     'properties': {'ClearReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
                                     'type': 'object'},
-                    'ListRunning': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                   'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+                    'GetEntities': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                   'Result': {'$ref': '#/definitions/AgentGetEntitiesResults'}},
                                     'type': 'object'},
-                    'Run': {'properties': {'Params': {'$ref': '#/definitions/RunParams'},
-                                           'Result': {'$ref': '#/definitions/ActionResults'}},
-                            'type': 'object'},
-                    'RunOnAllMachines': {'properties': {'Params': {'$ref': '#/definitions/RunParams'},
-                                                        'Result': {'$ref': '#/definitions/ActionResults'}},
+                    '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'},
-                    'ServicesCharmActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                            'Result': {'$ref': '#/definitions/ServicesCharmActionsResults'}},
-                                             'type': 'object'}},
+                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+                                                   'type': 'object'}},
      'type': 'object'}
     
 
-    @ReturnMapping(ActionResults)
-    async def Actions(self, entities):
+    @ReturnMapping(ErrorResults)
+    async def ClearReboot(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ActionResult]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='Actions', Version=1, Params=params)
+        msg = dict(Type='Agent', Request='ClearReboot', Version=2, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ActionResults)
-    async def Cancel(self, entities):
+    @ReturnMapping(AgentGetEntitiesResults)
+    async def GetEntities(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ActionResult]
+        Returns -> typing.Sequence[~AgentGetEntitiesResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='Cancel', Version=1, Params=params)
+        msg = dict(Type='Agent', Request='GetEntities', Version=2, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ActionResults)
-    async def Enqueue(self, actions):
+    @ReturnMapping(IsMasterResult)
+    async def IsMaster(self):
         '''
-        actions : typing.Sequence[~Action]
-        Returns -> typing.Sequence[~ActionResult]
+
+        Returns -> bool
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='Enqueue', Version=1, Params=params)
-        params['actions'] = actions
+        msg = dict(Type='Agent', Request='IsMaster', Version=2, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(FindTagsResults)
-    async def FindActionTagsByPrefix(self, prefixes):
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
         '''
-        prefixes : typing.Sequence[str]
-        Returns -> typing.Sequence[~Entity]
+
+        Returns -> typing.Mapping[str, typing.Any]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='FindActionTagsByPrefix', Version=1, Params=params)
-        params['prefixes'] = prefixes
+        msg = dict(Type='Agent', Request='ModelConfig', Version=2, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
-
-    @ReturnMapping(ActionsByNames)
-    async def FindActionsByNames(self, names):
+
+    @ReturnMapping(ErrorResults)
+    async def SetPasswords(self, changes):
         '''
-        names : typing.Sequence[str]
-        Returns -> typing.Sequence[~ActionsByName]
+        changes : typing.Sequence[~EntityPassword]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='FindActionsByNames', Version=1, Params=params)
-        params['names'] = names
+        msg = dict(Type='Agent', Request='SetPasswords', Version=2, Params=params)
+        params['Changes'] = changes
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ActionsByReceivers)
-    async def ListAll(self, entities):
+    @ReturnMapping(StateServingInfo)
+    async def StateServingInfo(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ActionsByReceiver]
+
+        Returns -> typing.Union[int, str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='ListAll', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Agent', Request='StateServingInfo', Version=2, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ActionsByReceivers)
-    async def ListCompleted(self, entities):
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ActionsByReceiver]
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='ListCompleted', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Agent', Request='WatchForModelConfigChanges', Version=2, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
+class AgentToolsFacade(Type):
+    name = 'AgentTools'
+    version = 1
+    schema =     {'properties': {'UpdateToolsAvailable': {'type': 'object'}}, 'type': 'object'}
+    
 
-    @ReturnMapping(ActionsByReceivers)
-    async def ListPending(self, entities):
+    @ReturnMapping(None)
+    async def UpdateToolsAvailable(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ActionsByReceiver]
+
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='ListPending', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='AgentTools', Request='UpdateToolsAvailable', Version=1, 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(ActionsByReceivers)
-    async def ListRunning(self, entities):
+    @ReturnMapping(AllWatcherNextResults)
+    async def Next(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ActionsByReceiver]
+
+        Returns -> typing.Sequence[~Delta]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='ListRunning', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='AllModelWatcher', Request='Next', Version=2, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ActionResults)
-    async def Run(self, commands, machines, services, timeout, units):
+    @ReturnMapping(None)
+    async def Stop(self):
         '''
-        commands : str
-        machines : typing.Sequence[str]
-        services : typing.Sequence[str]
-        timeout : int
-        units : typing.Sequence[str]
-        Returns -> typing.Sequence[~ActionResult]
+
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='Run', Version=1, Params=params)
-        params['Commands'] = commands
-        params['Machines'] = machines
-        params['Services'] = services
-        params['Timeout'] = timeout
-        params['Units'] = units
+        msg = dict(Type='AllModelWatcher', Request='Stop', Version=2, 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(ActionResults)
-    async def RunOnAllMachines(self, commands, machines, services, timeout, units):
+    @ReturnMapping(AllWatcherNextResults)
+    async def Next(self):
         '''
-        commands : str
-        machines : typing.Sequence[str]
-        services : typing.Sequence[str]
-        timeout : int
-        units : typing.Sequence[str]
-        Returns -> typing.Sequence[~ActionResult]
+
+        Returns -> typing.Sequence[~Delta]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='RunOnAllMachines', Version=1, Params=params)
-        params['Commands'] = commands
-        params['Machines'] = machines
-        params['Services'] = services
-        params['Timeout'] = timeout
-        params['Units'] = units
+        msg = dict(Type='AllWatcher', Request='Next', Version=1, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ServicesCharmActionsResults)
-    async def ServicesCharmActions(self, entities):
+    @ReturnMapping(None)
+    async def Stop(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ServiceCharmActionsResult]
+
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Action', Request='ServicesCharmActions', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='AllWatcher', Request='Stop', Version=1, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
-class Addresser(Type):
-    name = 'Addresser'
+class AnnotationsFacade(Type):
+    name = 'Annotations'
     version = 2
-    schema =     {'definitions': {'BoolResult': {'additionalProperties': False,
-                                    'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                   'Result': {'type': 'boolean'}},
-                                    'required': ['Error', 'Result'],
-                                    'type': 'object'},
-                     'EntitiesWatchResult': {'additionalProperties': False,
-                                             'properties': {'Changes': {'items': {'type': 'string'},
-                                                                        'type': 'array'},
-                                                            'EntityWatcherId': {'type': 'string'},
-                                                            'Error': {'$ref': '#/definitions/Error'}},
-                                             'required': ['EntityWatcherId',
-                                                          'Changes',
-                                                          'Error'],
-                                             'type': 'object'},
+    schema =     {'definitions': {'AnnotationsGetResult': {'additionalProperties': False,
+                                              'properties': {'Annotations': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                             'type': 'object'},
+                                                             'EntityTag': {'type': 'string'},
+                                                             'Error': {'$ref': '#/definitions/ErrorResult'}},
+                                              'required': ['EntityTag',
+                                                           'Annotations',
+                                                           'Error'],
+                                              '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'},
+                                                          'EntityTag': {'type': 'string'}},
+                                           'required': ['EntityTag', 'Annotations'],
+                                           'type': 'object'},
                      'Error': {'additionalProperties': False,
                                'properties': {'Code': {'type': 'string'},
                                               'Info': {'$ref': '#/definitions/ErrorInfo'},
@@ -5811,6 +6377,11 @@ class Addresser(Type):
                                      'properties': {'Error': {'$ref': '#/definitions/Error'}},
                                      'required': ['Error'],
                                      'type': 'object'},
+                     'ErrorResults': {'additionalProperties': False,
+                                      'properties': {'Results': {'items': {'$ref': '#/definitions/ErrorResult'},
+                                                                 'type': 'array'}},
+                                      'required': ['Results'],
+                                      'type': 'object'},
                      'Macaroon': {'additionalProperties': False,
                                   'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
                                                              'type': 'array'},
@@ -5840,96 +6411,218 @@ class Addresser(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 'type': 'object'}},
-     'properties': {'CanDeallocateAddresses': {'properties': {'Result': {'$ref': '#/definitions/BoolResult'}},
-                                               'type': 'object'},
-                    'CleanupIPAddresses': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}},
-                                           'type': 'object'},
-                    'WatchIPAddresses': {'properties': {'Result': {'$ref': '#/definitions/EntitiesWatchResult'}},
-                                         '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(BoolResult)
-    async def CanDeallocateAddresses(self):
-        '''
-
-        Returns -> typing.Union[_ForwardRef('Error'), bool]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Addresser', Request='CanDeallocateAddresses', Version=2, Params=params)
-
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ErrorResult)
-    async def CleanupIPAddresses(self):
+    @ReturnMapping(AnnotationsGetResults)
+    async def Get(self, entities):
         '''
-
-        Returns -> Error
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~AnnotationsGetResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Addresser', Request='CleanupIPAddresses', Version=2, Params=params)
-
+        msg = dict(Type='Annotations', Request='Get', Version=2, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(EntitiesWatchResult)
-    async def WatchIPAddresses(self):
+    @ReturnMapping(ErrorResults)
+    async def Set(self, annotations):
         '''
-
-        Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error')]
+        annotations : typing.Sequence[~EntityAnnotations]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Addresser', Request='WatchIPAddresses', Version=2, Params=params)
-
+        msg = dict(Type='Annotations', Request='Set', Version=2, Params=params)
+        params['Annotations'] = annotations
         reply = await self.rpc(msg)
         return reply
 
 
-class Agent(Type):
-    name = 'Agent'
-    version = 2
-    schema =     {'definitions': {'AgentGetEntitiesResult': {'additionalProperties': False,
-                                                'properties': {'ContainerType': {'type': 'string'},
-                                                               'Error': {'$ref': '#/definitions/Error'},
-                                                               'Jobs': {'items': {'type': 'string'},
-                                                                        'type': 'array'},
-                                                               'Life': {'type': 'string'}},
-                                                'required': ['Life',
-                                                             'Jobs',
-                                                             'ContainerType',
-                                                             'Error'],
-                                                'type': 'object'},
-                     'AgentGetEntitiesResults': {'additionalProperties': False,
-                                                 'properties': {'Entities': {'items': {'$ref': '#/definitions/AgentGetEntitiesResult'},
+class ApplicationFacade(Type):
+    name = 'Application'
+    version = 1
+    schema =     {'definitions': {'AddApplicationUnits': {'additionalProperties': False,
+                                             'properties': {'ApplicationName': {'type': 'string'},
+                                                            'NumUnits': {'type': 'integer'},
+                                                            'Placement': {'items': {'$ref': '#/definitions/Placement'},
+                                                                          'type': 'array'}},
+                                             'required': ['ApplicationName',
+                                                          'NumUnits',
+                                                          'Placement'],
+                                             'type': 'object'},
+                     'AddApplicationUnitsResults': {'additionalProperties': False,
+                                                    'properties': {'Units': {'items': {'type': 'string'},
                                                                              'type': 'array'}},
-                                                 'required': ['Entities'],
-                                                 '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'],
+                                                    '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/Relation'}},
+                                                                         'type': 'object'}},
+                                            'required': ['Endpoints'],
+                                            'type': 'object'},
+                     'ApplicationCharmRelations': {'additionalProperties': False,
+                                                   'properties': {'ApplicationName': {'type': 'string'}},
+                                                   'required': ['ApplicationName'],
+                                                   'type': 'object'},
+                     'ApplicationCharmRelationsResults': {'additionalProperties': False,
+                                                          'properties': {'CharmRelations': {'items': {'type': 'string'},
+                                                                                            'type': 'array'}},
+                                                          'required': ['CharmRelations'],
+                                                          'type': 'object'},
+                     'ApplicationDeploy': {'additionalProperties': False,
+                                           'properties': {'ApplicationName': {'type': 'string'},
+                                                          'Channel': {'type': 'string'},
+                                                          'CharmUrl': {'type': 'string'},
+                                                          'Config': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                     'type': 'object'},
+                                                          'ConfigYAML': {'type': 'string'},
+                                                          'Constraints': {'$ref': '#/definitions/Value'},
+                                                          'EndpointBindings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                               'type': 'object'},
+                                                          'NumUnits': {'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': ['ApplicationName',
+                                                        'Series',
+                                                        'CharmUrl',
+                                                        'Channel',
+                                                        'NumUnits',
+                                                        'Config',
+                                                        'ConfigYAML',
+                                                        'Constraints',
+                                                        'Placement',
+                                                        'Storage',
+                                                        'EndpointBindings',
+                                                        'Resources'],
+                                           'type': 'object'},
+                     'ApplicationDestroy': {'additionalProperties': False,
+                                            'properties': {'ApplicationName': {'type': 'string'}},
+                                            'required': ['ApplicationName'],
+                                            'type': 'object'},
+                     'ApplicationExpose': {'additionalProperties': False,
+                                           'properties': {'ApplicationName': {'type': 'string'}},
+                                           'required': ['ApplicationName'],
+                                           'type': 'object'},
+                     'ApplicationGet': {'additionalProperties': False,
+                                        'properties': {'ApplicationName': {'type': 'string'}},
+                                        'required': ['ApplicationName'],
                                         'type': 'object'},
-                     'EntityPasswords': {'additionalProperties': False,
-                                         'properties': {'Changes': {'items': {'$ref': '#/definitions/EntityPassword'},
-                                                                    'type': 'array'}},
-                                         'required': ['Changes'],
+                     'ApplicationGetResults': {'additionalProperties': False,
+                                               'properties': {'Application': {'type': 'string'},
+                                                              'Charm': {'type': 'string'},
+                                                              'Config': {'patternProperties': {'.*': {'additionalProperties': True,
+                                                                                                      'type': 'object'}},
+                                                                         'type': 'object'},
+                                                              'Constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['Application',
+                                                            'Charm',
+                                                            'Config',
+                                                            'Constraints'],
+                                               'type': 'object'},
+                     'ApplicationMetricCredential': {'additionalProperties': False,
+                                                     'properties': {'ApplicationName': {'type': 'string'},
+                                                                    'MetricCredentials': {'items': {'type': 'integer'},
+                                                                                          'type': 'array'}},
+                                                     'required': ['ApplicationName',
+                                                                  'MetricCredentials'],
+                                                     'type': 'object'},
+                     'ApplicationMetricCredentials': {'additionalProperties': False,
+                                                      'properties': {'Creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'},
+                                                                               'type': 'array'}},
+                                                      'required': ['Creds'],
+                                                      'type': 'object'},
+                     'ApplicationSet': {'additionalProperties': False,
+                                        'properties': {'ApplicationName': {'type': 'string'},
+                                                       'Options': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                   'type': 'object'}},
+                                        'required': ['ApplicationName', 'Options'],
+                                        'type': 'object'},
+                     'ApplicationSetCharm': {'additionalProperties': False,
+                                             'properties': {'applicationname': {'type': 'string'},
+                                                            'charmurl': {'type': 'string'},
+                                                            'cs-channel': {'type': 'string'},
+                                                            'forceseries': {'type': 'boolean'},
+                                                            'forceunits': {'type': 'boolean'},
+                                                            'resourceids': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                            'type': 'object'}},
+                                             'required': ['applicationname',
+                                                          'charmurl',
+                                                          'cs-channel',
+                                                          'forceunits',
+                                                          'forceseries',
+                                                          'resourceids'],
+                                             'type': 'object'},
+                     'ApplicationUnexpose': {'additionalProperties': False,
+                                             'properties': {'ApplicationName': {'type': 'string'}},
+                                             'required': ['ApplicationName'],
+                                             'type': 'object'},
+                     'ApplicationUnset': {'additionalProperties': False,
+                                          'properties': {'ApplicationName': {'type': 'string'},
+                                                         'Options': {'items': {'type': 'string'},
+                                                                     'type': 'array'}},
+                                          'required': ['ApplicationName',
+                                                       'Options'],
+                                          'type': 'object'},
+                     'ApplicationUpdate': {'additionalProperties': False,
+                                           'properties': {'ApplicationName': {'type': 'string'},
+                                                          'CharmUrl': {'type': 'string'},
+                                                          'Constraints': {'$ref': '#/definitions/Value'},
+                                                          'ForceCharmUrl': {'type': 'boolean'},
+                                                          'ForceSeries': {'type': 'boolean'},
+                                                          'MinUnits': {'type': 'integer'},
+                                                          'SettingsStrings': {'patternProperties': {'.*': {'type': 'string'}},
+                                                                              'type': 'object'},
+                                                          'SettingsYAML': {'type': 'string'}},
+                                           'required': ['ApplicationName',
+                                                        'CharmUrl',
+                                                        'ForceCharmUrl',
+                                                        'ForceSeries',
+                                                        'MinUnits',
+                                                        'SettingsStrings',
+                                                        'SettingsYAML',
+                                                        'Constraints'],
+                                           'type': 'object'},
+                     'ApplicationsDeploy': {'additionalProperties': False,
+                                            'properties': {'Applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'},
+                                                                            'type': 'array'}},
+                                            'required': ['Applications'],
+                                            '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': {'UnitNames': {'items': {'type': 'string'},
+                                                                              'type': 'array'}},
+                                                 'required': ['UnitNames'],
+                                                 'type': 'object'},
+                     'DestroyRelation': {'additionalProperties': False,
+                                         'properties': {'Endpoints': {'items': {'type': 'string'},
+                                                                      'type': 'array'}},
+                                         'required': ['Endpoints'],
                                          'type': 'object'},
                      'Error': {'additionalProperties': False,
                                'properties': {'Code': {'type': 'string'},
@@ -5950,10 +6643,14 @@ class Agent(Type):
                                                                  'type': 'array'}},
                                       'required': ['Results'],
                                       'type': 'object'},
-                     'IsMasterResult': {'additionalProperties': False,
-                                        'properties': {'Master': {'type': 'boolean'}},
-                                        'required': ['Master'],
-                                        'type': 'object'},
+                     'GetApplicationConstraints': {'additionalProperties': False,
+                                                   'properties': {'ApplicationName': {'type': 'string'}},
+                                                   'required': ['ApplicationName'],
+                                                   'type': 'object'},
+                     'GetConstraintsResults': {'additionalProperties': False,
+                                               'properties': {'Constraints': {'$ref': '#/definitions/Value'}},
+                                               'required': ['Constraints'],
+                                               'type': 'object'},
                      'Macaroon': {'additionalProperties': False,
                                   'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
                                                              'type': 'array'},
@@ -5969,33 +6666,50 @@ class Agent(Type):
                                                'caveats',
                                                'sig'],
                                   'type': 'object'},
-                     'ModelConfigResult': {'additionalProperties': False,
-                                           'properties': {'Config': {'patternProperties': {'.*': {'additionalProperties': True,
-                                                                                                  'type': 'object'}},
-                                                                     'type': 'object'}},
-                                           'required': ['Config'],
-                                           'type': 'object'},
-                     'NotifyWatchResult': {'additionalProperties': False,
-                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                          'NotifyWatcherId': {'type': 'string'}},
-                                           'required': ['NotifyWatcherId', 'Error'],
-                                           'type': 'object'},
-                     'StateServingInfo': {'additionalProperties': False,
-                                          'properties': {'APIPort': {'type': 'integer'},
-                                                         'CAPrivateKey': {'type': 'string'},
-                                                         'Cert': {'type': 'string'},
-                                                         'PrivateKey': {'type': 'string'},
-                                                         'SharedSecret': {'type': 'string'},
-                                                         'StatePort': {'type': 'integer'},
-                                                         'SystemIdentity': {'type': 'string'}},
-                                          'required': ['APIPort',
-                                                       'StatePort',
-                                                       'Cert',
-                                                       'PrivateKey',
-                                                       'CAPrivateKey',
-                                                       'SharedSecret',
-                                                       'SystemIdentity'],
-                                          'type': 'object'},
+                     'Placement': {'additionalProperties': False,
+                                   'properties': {'Directive': {'type': 'string'},
+                                                  'Scope': {'type': 'string'}},
+                                   'required': ['Scope', 'Directive'],
+                                   'type': 'object'},
+                     'Relation': {'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'},
+                     'SetConstraints': {'additionalProperties': False,
+                                        'properties': {'ApplicationName': {'type': 'string'},
+                                                       'Constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['ApplicationName',
+                                                     'Constraints'],
+                                        'type': 'object'},
+                     'StringResult': {'additionalProperties': False,
+                                      'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                     'Result': {'type': 'string'}},
+                                      'required': ['Error', 'Result'],
+                                      'type': 'object'},
+                     'Value': {'additionalProperties': False,
+                               'properties': {'arch': {'type': 'string'},
+                                              'container': {'type': 'string'},
+                                              'cpu-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'},
                      'caveat': {'additionalProperties': False,
                                 'properties': {'caveatId': {'$ref': '#/definitions/packet'},
                                                'location': {'$ref': '#/definitions/packet'},
@@ -6010,271 +6724,360 @@ class Agent(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 'type': 'object'}},
-     'properties': {'ClearReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                   'Result': {'$ref': '#/definitions/ErrorResults'}},
-                                    'type': 'object'},
-                    'GetEntities': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                   'Result': {'$ref': '#/definitions/AgentGetEntitiesResults'}},
+     'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
+                                                   'Result': {'$ref': '#/definitions/AddRelationResults'}},
                                     'type': 'object'},
-                    'IsMaster': {'properties': {'Result': {'$ref': '#/definitions/IsMasterResult'}},
+                    'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
+                                                'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
                                  'type': 'object'},
-                    'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
-                                    'type': 'object'},
-                    'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'},
-                                                    'Result': {'$ref': '#/definitions/ErrorResults'}},
+                    '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'},
-                    'StateServingInfo': {'properties': {'Result': {'$ref': '#/definitions/StateServingInfo'}},
-                                         'type': 'object'},
-                    'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
-                                                   '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(ErrorResults)
-    async def ClearReboot(self, entities):
+    @ReturnMapping(AddRelationResults)
+    async def AddRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence[str]
+        Returns -> typing.Mapping[str, ~Relation]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Application', Request='AddRelation', Version=1, Params=params)
+        params['Endpoints'] = endpoints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(AddApplicationUnitsResults)
+    async def AddUnits(self, applicationname, numunits, placement):
+        '''
+        applicationname : str
+        numunits : int
+        placement : typing.Sequence[~Placement]
+        Returns -> typing.Sequence[str]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Application', Request='AddUnits', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        params['NumUnits'] = numunits
+        params['Placement'] = placement
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationCharmRelationsResults)
+    async def CharmRelations(self, applicationname):
+        '''
+        applicationname : str
+        Returns -> typing.Sequence[str]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Application', Request='CharmRelations', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def Deploy(self, applications):
+        '''
+        applications : typing.Sequence[~ApplicationDeploy]
+        Returns -> typing.Sequence[~ErrorResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Application', Request='Deploy', Version=1, Params=params)
+        params['Applications'] = applications
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def Destroy(self, applicationname):
+        '''
+        applicationname : str
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Application', Request='Destroy', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def DestroyRelation(self, endpoints):
+        '''
+        endpoints : typing.Sequence[str]
+        Returns -> None
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Application', Request='DestroyRelation', Version=1, Params=params)
+        params['Endpoints'] = endpoints
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(None)
+    async def DestroyUnits(self, unitnames):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ErrorResult]
+        unitnames : typing.Sequence[str]
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='ClearReboot', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Application', Request='DestroyUnits', Version=1, Params=params)
+        params['UnitNames'] = unitnames
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(AgentGetEntitiesResults)
-    async def GetEntities(self, entities):
+    @ReturnMapping(None)
+    async def Expose(self, applicationname):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~AgentGetEntitiesResult]
+        applicationname : str
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='GetEntities', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Application', Request='Expose', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(IsMasterResult)
-    async def IsMaster(self):
+    @ReturnMapping(ApplicationGetResults)
+    async def Get(self, applicationname):
         '''
-
-        Returns -> bool
+        applicationname : str
+        Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='IsMaster', Version=2, Params=params)
-
+        msg = dict(Type='Application', Request='Get', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ModelConfigResult)
-    async def ModelConfig(self):
+    @ReturnMapping(StringResult)
+    async def GetCharmURL(self, applicationname):
         '''
-
-        Returns -> typing.Mapping[str, typing.Any]
+        applicationname : str
+        Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='ModelConfig', Version=2, Params=params)
-
+        msg = dict(Type='Application', Request='GetCharmURL', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def SetPasswords(self, changes):
+    @ReturnMapping(GetConstraintsResults)
+    async def GetConstraints(self, applicationname):
         '''
-        changes : typing.Sequence[~EntityPassword]
-        Returns -> typing.Sequence[~ErrorResult]
+        applicationname : str
+        Returns -> Value
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='SetPasswords', Version=2, Params=params)
-        params['Changes'] = changes
+        msg = dict(Type='Application', Request='GetConstraints', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StateServingInfo)
-    async def StateServingInfo(self):
+    @ReturnMapping(None)
+    async def Set(self, applicationname, options):
         '''
-
-        Returns -> typing.Union[int, str]
+        applicationname : str
+        options : typing.Mapping[str, str]
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='StateServingInfo', Version=2, Params=params)
-
+        msg = dict(Type='Application', Request='Set', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        params['Options'] = options
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(NotifyWatchResult)
-    async def WatchForModelConfigChanges(self):
+    @ReturnMapping(None)
+    async def SetCharm(self, applicationname, charmurl, cs_channel, forceseries, forceunits, resourceids):
         '''
-
-        Returns -> typing.Union[_ForwardRef('Error'), str]
+        applicationname : str
+        charmurl : str
+        cs_channel : str
+        forceseries : bool
+        forceunits : bool
+        resourceids : typing.Mapping[str, str]
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Agent', Request='WatchForModelConfigChanges', Version=2, Params=params)
-
+        msg = dict(Type='Application', Request='SetCharm', Version=1, Params=params)
+        params['applicationname'] = applicationname
+        params['charmurl'] = charmurl
+        params['cs-channel'] = cs_channel
+        params['forceseries'] = forceseries
+        params['forceunits'] = forceunits
+        params['resourceids'] = resourceids
         reply = await self.rpc(msg)
         return reply
 
 
-class AgentTools(Type):
-    name = 'AgentTools'
-    version = 1
-    schema =     {'properties': {'UpdateToolsAvailable': {'type': 'object'}}, 'type': 'object'}
-    
 
     @ReturnMapping(None)
-    async def UpdateToolsAvailable(self):
+    async def SetConstraints(self, applicationname, constraints):
         '''
-
+        applicationname : str
+        constraints : Value
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='AgentTools', Request='UpdateToolsAvailable', Version=1, Params=params)
-
+        msg = dict(Type='Application', Request='SetConstraints', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        params['Constraints'] = constraints
         reply = await self.rpc(msg)
         return reply
 
 
-class AllModelWatcher(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):
+    @ReturnMapping(ErrorResults)
+    async def SetMetricCredentials(self, creds):
         '''
-
-        Returns -> typing.Sequence[~Delta]
+        creds : typing.Sequence[~ApplicationMetricCredential]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='AllModelWatcher', Request='Next', Version=2, Params=params)
-
+        msg = dict(Type='Application', Request='SetMetricCredentials', Version=1, Params=params)
+        params['Creds'] = creds
         reply = await self.rpc(msg)
         return reply
 
 
 
     @ReturnMapping(None)
-    async def Stop(self):
+    async def Unexpose(self, applicationname):
         '''
-
+        applicationname : str
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='AllModelWatcher', Request='Stop', Version=2, Params=params)
-
+        msg = dict(Type='Application', Request='Unexpose', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
         reply = await self.rpc(msg)
         return reply
 
 
-class AllWatcher(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):
+    @ReturnMapping(None)
+    async def Unset(self, applicationname, options):
         '''
-
-        Returns -> typing.Sequence[~Delta]
+        applicationname : str
+        options : typing.Sequence[str]
+        Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='AllWatcher', Request='Next', Version=1, Params=params)
-
+        msg = dict(Type='Application', Request='Unset', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        params['Options'] = options
         reply = await self.rpc(msg)
         return reply
 
 
 
     @ReturnMapping(None)
-    async def Stop(self):
+    async def Update(self, applicationname, charmurl, constraints, forcecharmurl, forceseries, minunits, settingsstrings, settingsyaml):
         '''
-
+        applicationname : str
+        charmurl : str
+        constraints : Value
+        forcecharmurl : bool
+        forceseries : bool
+        minunits : int
+        settingsstrings : typing.Mapping[str, str]
+        settingsyaml : str
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='AllWatcher', Request='Stop', Version=1, Params=params)
-
+        msg = dict(Type='Application', Request='Update', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
+        params['CharmUrl'] = charmurl
+        params['Constraints'] = constraints
+        params['ForceCharmUrl'] = forcecharmurl
+        params['ForceSeries'] = forceseries
+        params['MinUnits'] = minunits
+        params['SettingsStrings'] = settingsstrings
+        params['SettingsYAML'] = settingsyaml
         reply = await self.rpc(msg)
         return reply
 
 
-class Annotations(Type):
-    name = 'Annotations'
-    version = 2
-    schema =     {'definitions': {'AnnotationsGetResult': {'additionalProperties': False,
-                                              'properties': {'Annotations': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                             'type': 'object'},
-                                                             'EntityTag': {'type': 'string'},
-                                                             'Error': {'$ref': '#/definitions/ErrorResult'}},
-                                              'required': ['EntityTag',
-                                                           'Annotations',
-                                                           'Error'],
-                                              '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,
+class ApplicationScalerFacade(Type):
+    name = 'ApplicationScaler'
+    version = 1
+    schema =     {'definitions': {'Entities': {'additionalProperties': False,
                                   'properties': {'Entities': {'items': {'$ref': '#/definitions/Entity'},
                                                               'type': 'array'}},
                                   'required': ['Entities'],
@@ -6283,12 +7086,6 @@ class Annotations(Type):
                                 'properties': {'Tag': {'type': 'string'}},
                                 'required': ['Tag'],
                                 'type': 'object'},
-                     'EntityAnnotations': {'additionalProperties': False,
-                                           'properties': {'Annotations': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                          'type': 'object'},
-                                                          'EntityTag': {'type': 'string'}},
-                                           'required': ['EntityTag', 'Annotations'],
-                                           'type': 'object'},
                      'Error': {'additionalProperties': False,
                                'properties': {'Code': {'type': 'string'},
                                               'Info': {'$ref': '#/definitions/ErrorInfo'},
@@ -6323,6 +7120,15 @@ class Annotations(Type):
                                                'caveats',
                                                'sig'],
                                   'type': 'object'},
+                     'StringsWatchResult': {'additionalProperties': False,
+                                            'properties': {'Changes': {'items': {'type': 'string'},
+                                                                       'type': 'array'},
+                                                           'Error': {'$ref': '#/definitions/Error'},
+                                                           'StringsWatcherId': {'type': 'string'}},
+                                            'required': ['StringsWatcherId',
+                                                         'Changes',
+                                                         'Error'],
+                                            'type': 'object'},
                      'caveat': {'additionalProperties': False,
                                 'properties': {'caveatId': {'$ref': '#/definitions/packet'},
                                                'location': {'$ref': '#/definitions/packet'},
@@ -6337,45 +7143,44 @@ class Annotations(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 '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'}},
+     'properties': {'Rescale': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
+                                'type': 'object'},
+                    'Watch': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+                              'type': 'object'}},
      'type': 'object'}
     
 
-    @ReturnMapping(AnnotationsGetResults)
-    async def Get(self, entities):
+    @ReturnMapping(ErrorResults)
+    async def Rescale(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~AnnotationsGetResult]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Annotations', Request='Get', Version=2, Params=params)
+        msg = dict(Type='ApplicationScaler', Request='Rescale', Version=1, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def Set(self, annotations):
+    @ReturnMapping(StringsWatchResult)
+    async def Watch(self):
         '''
-        annotations : typing.Sequence[~EntityAnnotations]
-        Returns -> typing.Sequence[~ErrorResult]
+
+        Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error')]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Annotations', Request='Set', Version=2, Params=params)
-        params['Annotations'] = annotations
+        msg = dict(Type='ApplicationScaler', Request='Watch', Version=1, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
-class Backups(Type):
+class BackupsFacade(Type):
     name = 'Backups'
     version = 1
     schema =     {'definitions': {'BackupsCreateArgs': {'additionalProperties': False,
@@ -6405,6 +7210,7 @@ class Backups(Type):
                                                               'Machine': {'type': 'string'},
                                                               'Model': {'type': 'string'},
                                                               'Notes': {'type': 'string'},
+                                                              'Series': {'type': 'string'},
                                                               'Size': {'type': 'integer'},
                                                               'Started': {'format': 'date-time',
                                                                           'type': 'string'},
@@ -6423,6 +7229,7 @@ class Backups(Type):
                                                             'Machine',
                                                             'Hostname',
                                                             'Version',
+                                                            'Series',
                                                             'CACert',
                                                             'CAPrivateKey'],
                                                'type': 'object'},
@@ -6568,7 +7375,7 @@ class Backups(Type):
         return reply
 
 
-class Block(Type):
+class BlockFacade(Type):
     name = 'Block'
     version = 2
     schema =     {'definitions': {'Block': {'additionalProperties': False,
@@ -6694,9 +7501,9 @@ class Block(Type):
         return reply
 
 
-class CharmRevisionUpdater(Type):
+class CharmRevisionUpdaterFacade(Type):
     name = 'CharmRevisionUpdater'
-    version = 1
+    version = 2
     schema =     {'definitions': {'Error': {'additionalProperties': False,
                                'properties': {'Code': {'type': 'string'},
                                               'Info': {'$ref': '#/definitions/ErrorInfo'},
@@ -6753,13 +7560,13 @@ class CharmRevisionUpdater(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='CharmRevisionUpdater', Request='UpdateLatestRevisions', Version=1, Params=params)
+        msg = dict(Type='CharmRevisionUpdater', Request='UpdateLatestRevisions', Version=2, Params=params)
 
         reply = await self.rpc(msg)
         return reply
 
 
-class Charms(Type):
+class CharmsFacade(Type):
     name = 'Charms'
     version = 2
     schema =     {'definitions': {'CharmInfo': {'additionalProperties': False,
@@ -6836,7 +7643,7 @@ class Charms(Type):
         return reply
 
 
-class Cleaner(Type):
+class CleanerFacade(Type):
     name = 'Cleaner'
     version = 2
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -6918,7 +7725,7 @@ class Cleaner(Type):
         return reply
 
 
-class Client(Type):
+class ClientFacade(Type):
     name = 'Client'
     version = 1
     schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
@@ -6997,6 +7804,34 @@ class Client(Type):
                                       'properties': {'AllWatcherId': {'type': 'string'}},
                                       'required': ['AllWatcherId'],
                                       'type': 'object'},
+                     'ApplicationStatus': {'additionalProperties': False,
+                                           'properties': {'CanUpgradeTo': {'type': 'string'},
+                                                          'Charm': {'type': 'string'},
+                                                          'Err': {'additionalProperties': True,
+                                                                  'type': 'object'},
+                                                          'Exposed': {'type': 'boolean'},
+                                                          'Life': {'type': 'string'},
+                                                          'MeterStatuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}},
+                                                                            'type': 'object'},
+                                                          'Relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
+                                                                                                     'type': 'array'}},
+                                                                        'type': 'object'},
+                                                          'Status': {'$ref': '#/definitions/DetailedStatus'},
+                                                          'SubordinateTo': {'items': {'type': 'string'},
+                                                                            'type': 'array'},
+                                                          'Units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
+                                                                    'type': 'object'}},
+                                           'required': ['Err',
+                                                        'Charm',
+                                                        'Exposed',
+                                                        'Life',
+                                                        'Relations',
+                                                        'CanUpgradeTo',
+                                                        'SubordinateTo',
+                                                        'Units',
+                                                        'MeterStatuses',
+                                                        'Status'],
+                                           'type': 'object'},
                      'Binary': {'additionalProperties': False,
                                 'properties': {'Arch': {'type': 'string'},
                                                'Number': {'$ref': '#/definitions/Number'},
@@ -7055,11 +7890,11 @@ class Client(Type):
                                                      'Err'],
                                         'type': 'object'},
                      'EndpointStatus': {'additionalProperties': False,
-                                        'properties': {'Name': {'type': 'string'},
+                                        'properties': {'ApplicationName': {'type': 'string'},
+                                                       'Name': {'type': 'string'},
                                                        'Role': {'type': 'string'},
-                                                       'ServiceName': {'type': 'string'},
                                                        'Subordinate': {'type': 'boolean'}},
-                                        'required': ['ServiceName',
+                                        'required': ['ApplicationName',
                                                      'Name',
                                                      'Role',
                                                      'Subordinate'],
@@ -7124,18 +7959,18 @@ class Client(Type):
                                          'required': ['List', 'Error'],
                                          'type': 'object'},
                      'FullStatus': {'additionalProperties': False,
-                                    'properties': {'AvailableVersion': {'type': 'string'},
+                                    'properties': {'Applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}},
+                                                                    'type': 'object'},
+                                                   'AvailableVersion': {'type': 'string'},
                                                    'Machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
                                                                 'type': 'object'},
                                                    'ModelName': {'type': 'string'},
                                                    'Relations': {'items': {'$ref': '#/definitions/RelationStatus'},
-                                                                 'type': 'array'},
-                                                   'Services': {'patternProperties': {'.*': {'$ref': '#/definitions/ServiceStatus'}},
-                                                                'type': 'object'}},
+                                                                 'type': 'array'}},
                                     'required': ['ModelName',
                                                  'AvailableVersion',
                                                  'Machines',
-                                                 'Services',
+                                                 'Applications',
                                                  'Relations'],
                                     'type': 'object'},
                      'GetBundleChangesParams': {'additionalProperties': False,
@@ -7162,6 +7997,12 @@ class Client(Type):
                                                                 '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'}},
@@ -7220,7 +8061,8 @@ class Client(Type):
                                             'required': ['Config'],
                                             'type': 'object'},
                      'ModelInfo': {'additionalProperties': False,
-                                   'properties': {'DefaultSeries': {'type': 'string'},
+                                   'properties': {'Cloud': {'type': 'string'},
+                                                  'DefaultSeries': {'type': 'string'},
                                                   'Life': {'type': 'string'},
                                                   'Name': {'type': 'string'},
                                                   'OwnerTag': {'type': 'string'},
@@ -7235,6 +8077,7 @@ class Client(Type):
                                                 'ServerUUID',
                                                 'ProviderType',
                                                 'DefaultSeries',
+                                                'Cloud',
                                                 'OwnerTag',
                                                 'Life',
                                                 'Status',
@@ -7350,53 +8193,47 @@ class Client(Type):
                                                  'UnitName': {'type': 'string'}},
                                   'required': ['UnitName', 'Retry'],
                                   'type': 'object'},
-                     'ServiceStatus': {'additionalProperties': False,
-                                       'properties': {'CanUpgradeTo': {'type': 'string'},
-                                                      'Charm': {'type': 'string'},
-                                                      'Err': {'additionalProperties': True,
-                                                              'type': 'object'},
-                                                      'Exposed': {'type': 'boolean'},
-                                                      'Life': {'type': 'string'},
-                                                      'MeterStatuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}},
-                                                                        'type': 'object'},
-                                                      'Relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
-                                                                                                 'type': 'array'}},
-                                                                    'type': 'object'},
-                                                      'Status': {'$ref': '#/definitions/DetailedStatus'},
-                                                      'SubordinateTo': {'items': {'type': 'string'},
-                                                                        'type': 'array'},
-                                                      'Units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
-                                                                'type': 'object'}},
-                                       'required': ['Err',
-                                                    'Charm',
-                                                    'Exposed',
-                                                    'Life',
-                                                    'Relations',
-                                                    'CanUpgradeTo',
-                                                    'SubordinateTo',
-                                                    'Units',
-                                                    'MeterStatuses',
-                                                    'Status'],
-                                       'type': 'object'},
                      'SetConstraints': {'additionalProperties': False,
-                                        'properties': {'Constraints': {'$ref': '#/definitions/Value'},
-                                                       'ServiceName': {'type': 'string'}},
-                                        'required': ['ServiceName', 'Constraints'],
+                                        'properties': {'ApplicationName': {'type': 'string'},
+                                                       'Constraints': {'$ref': '#/definitions/Value'}},
+                                        'required': ['ApplicationName',
+                                                     'Constraints'],
                                         'type': 'object'},
                      'SetModelAgentVersion': {'additionalProperties': False,
                                               'properties': {'Version': {'$ref': '#/definitions/Number'}},
                                               'required': ['Version'],
                                               'type': 'object'},
-                     'StatusHistoryArgs': {'additionalProperties': False,
-                                           'properties': {'Kind': {'type': 'string'},
-                                                          'Name': {'type': 'string'},
-                                                          'Size': {'type': 'integer'}},
-                                           'required': ['Kind', 'Size', 'Name'],
-                                           'type': 'object'},
+                     'StatusHistoryFilter': {'additionalProperties': False,
+                                             'properties': {'Date': {'format': 'date-time',
+                                                                     'type': 'string'},
+                                                            'Delta': {'type': 'integer'},
+                                                            'Size': {'type': 'integer'}},
+                                             'required': ['Size', 'Date', 'Delta'],
+                                             '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': {'Statuses': {'items': {'$ref': '#/definitions/DetailedStatus'},
-                                                                          'type': 'array'}},
-                                              'required': ['Statuses'],
+                                              'properties': {'Results': {'items': {'$ref': '#/definitions/StatusHistoryResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['Results'],
                                               'type': 'object'},
                      'StatusParams': {'additionalProperties': False,
                                       'properties': {'Patterns': {'items': {'type': 'string'},
@@ -7536,7 +8373,7 @@ class Client(Type):
                                              'type': 'object'},
                     'SetModelConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
                                             'type': 'object'},
-                    'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryArgs'},
+                    'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryRequests'},
                                                      'Result': {'$ref': '#/definitions/StatusHistoryResults'}},
                                       'type': 'object'},
                     'WatchAll': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}},
@@ -7729,7 +8566,7 @@ class Client(Type):
     async def FullStatus(self, patterns):
         '''
         patterns : typing.Sequence[str]
-        Returns -> typing.Union[typing.Sequence[~RelationStatus], typing.Mapping[str, ~ServiceStatus]]
+        Returns -> typing.Union[typing.Mapping[str, ~MachineStatus], typing.Sequence[~RelationStatus]]
         '''
         # map input types to rpc msg
         params = dict()
@@ -7982,36 +8819,32 @@ class Client(Type):
 
 
     @ReturnMapping(None)
-    async def SetModelConstraints(self, constraints, servicename):
+    async def SetModelConstraints(self, applicationname, constraints):
         '''
+        applicationname : str
         constraints : Value
-        servicename : str
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
         msg = dict(Type='Client', Request='SetModelConstraints', Version=1, Params=params)
+        params['ApplicationName'] = applicationname
         params['Constraints'] = constraints
-        params['ServiceName'] = servicename
         reply = await self.rpc(msg)
         return reply
 
 
 
     @ReturnMapping(StatusHistoryResults)
-    async def StatusHistory(self, kind, name, size):
+    async def StatusHistory(self, requests):
         '''
-        kind : str
-        name : str
-        size : int
-        Returns -> typing.Sequence[~DetailedStatus]
+        requests : typing.Sequence[~StatusHistoryRequest]
+        Returns -> typing.Sequence[~StatusHistoryResult]
         '''
         # map input types to rpc msg
         params = dict()
         msg = dict(Type='Client', Request='StatusHistory', Version=1, Params=params)
-        params['Kind'] = kind
-        params['Name'] = name
-        params['Size'] = size
+        params['Requests'] = requests
         reply = await self.rpc(msg)
         return reply
 
@@ -8031,9 +8864,9 @@ class Client(Type):
         return reply
 
 
-class Controller(Type):
+class ControllerFacade(Type):
     name = 'Controller'
-    version = 2
+    version = 3
     schema =     {'definitions': {'AllWatcherId': {'additionalProperties': False,
                                       'properties': {'AllWatcherId': {'type': 'string'}},
                                       'required': ['AllWatcherId'],
@@ -8141,15 +8974,15 @@ class Controller(Type):
                                                                'password'],
                                                   'type': 'object'},
                      'ModelStatus': {'additionalProperties': False,
-                                     'properties': {'hosted-machine-count': {'type': 'integer'},
+                                     'properties': {'application-count': {'type': 'integer'},
+                                                    'hosted-machine-count': {'type': 'integer'},
                                                     'life': {'type': 'string'},
                                                     'model-tag': {'type': 'string'},
-                                                    'owner-tag': {'type': 'string'},
-                                                    'service-count': {'type': 'integer'}},
+                                                    'owner-tag': {'type': 'string'}},
                                      'required': ['model-tag',
                                                   'life',
                                                   'hosted-machine-count',
-                                                  'service-count',
+                                                  'application-count',
                                                   'owner-tag'],
                                      'type': 'object'},
                      'ModelStatusResults': {'additionalProperties': False,
@@ -8215,7 +9048,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='AllModels', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='AllModels', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -8230,7 +9063,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='DestroyController', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='DestroyController', Version=3, Params=params)
         params['destroy-models'] = destroy_models
         reply = await self.rpc(msg)
         return reply
@@ -8245,7 +9078,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='InitiateModelMigration', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='InitiateModelMigration', Version=3, Params=params)
         params['specs'] = specs
         reply = await self.rpc(msg)
         return reply
@@ -8260,7 +9093,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='ListBlockedModels', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='ListBlockedModels', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -8275,7 +9108,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='ModelConfig', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='ModelConfig', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -8290,7 +9123,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='ModelStatus', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='ModelStatus', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -8305,7 +9138,7 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='RemoveBlocks', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='RemoveBlocks', Version=3, Params=params)
         params['all'] = all_
         reply = await self.rpc(msg)
         return reply
@@ -8320,13 +9153,13 @@ class Controller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Controller', Request='WatchAllModels', Version=2, Params=params)
+        msg = dict(Type='Controller', Request='WatchAllModels', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
 
 
-class Deployer(Type):
+class DeployerFacade(Type):
     name = 'Deployer'
     version = 1
     schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
@@ -8660,7 +9493,7 @@ class Deployer(Type):
         return reply
 
 
-class DiscoverSpaces(Type):
+class DiscoverSpacesFacade(Type):
     name = 'DiscoverSpaces'
     version = 2
     schema =     {'definitions': {'AddSubnetParams': {'additionalProperties': False,
@@ -8880,7 +9713,7 @@ class DiscoverSpaces(Type):
         return reply
 
 
-class DiskManager(Type):
+class DiskManagerFacade(Type):
     name = 'DiskManager'
     version = 2
     schema =     {'definitions': {'BlockDevice': {'additionalProperties': False,
@@ -8985,7 +9818,7 @@ class DiskManager(Type):
         return reply
 
 
-class EntityWatcher(Type):
+class EntityWatcherFacade(Type):
     name = 'EntityWatcher'
     version = 2
     schema =     {'definitions': {'EntitiesWatchResult': {'additionalProperties': False,
@@ -9071,7 +9904,7 @@ class EntityWatcher(Type):
         return reply
 
 
-class FilesystemAttachmentsWatcher(Type):
+class FilesystemAttachmentsWatcherFacade(Type):
     name = 'FilesystemAttachmentsWatcher'
     version = 2
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -9163,9 +9996,9 @@ class FilesystemAttachmentsWatcher(Type):
         return reply
 
 
-class Firewaller(Type):
+class FirewallerFacade(Type):
     name = 'Firewaller'
-    version = 2
+    version = 3
     schema =     {'definitions': {'BoolResult': {'additionalProperties': False,
                                     'properties': {'Error': {'$ref': '#/definitions/Error'},
                                                    'Result': {'type': 'boolean'}},
@@ -9364,7 +10197,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='GetAssignedMachine', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='GetAssignedMachine', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9379,7 +10212,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='GetExposed', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='GetExposed', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9394,7 +10227,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='GetMachineActiveSubnets', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='GetMachineActiveSubnets', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9409,7 +10242,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='GetMachinePorts', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='GetMachinePorts', Version=3, Params=params)
         params['Params'] = params
         reply = await self.rpc(msg)
         return reply
@@ -9424,7 +10257,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='InstanceId', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='InstanceId', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9439,7 +10272,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='Life', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='Life', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9454,7 +10287,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='ModelConfig', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='ModelConfig', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -9469,7 +10302,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='Watch', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='Watch', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9484,7 +10317,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='WatchForModelConfigChanges', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='WatchForModelConfigChanges', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -9499,7 +10332,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='WatchModelMachines', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='WatchModelMachines', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -9514,7 +10347,7 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='WatchOpenedPorts', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='WatchOpenedPorts', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -9529,13 +10362,13 @@ class Firewaller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Firewaller', Request='WatchUnits', Version=2, Params=params)
+        msg = dict(Type='Firewaller', Request='WatchUnits', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
-class HighAvailability(Type):
+class HighAvailabilityFacade(Type):
     name = 'HighAvailability'
     version = 2
     schema =     {'definitions': {'Address': {'additionalProperties': False,
@@ -9759,7 +10592,7 @@ class HighAvailability(Type):
         return reply
 
 
-class HostKeyReporter(Type):
+class HostKeyReporterFacade(Type):
     name = 'HostKeyReporter'
     version = 1
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -9841,7 +10674,7 @@ class HostKeyReporter(Type):
         return reply
 
 
-class ImageManager(Type):
+class ImageManagerFacade(Type):
     name = 'ImageManager'
     version = 2
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -9959,7 +10792,7 @@ class ImageManager(Type):
         return reply
 
 
-class ImageMetadata(Type):
+class ImageMetadataFacade(Type):
     name = 'ImageMetadata'
     version = 2
     schema =     {'definitions': {'CloudImageMetadata': {'additionalProperties': False,
@@ -10140,9 +10973,9 @@ class ImageMetadata(Type):
         return reply
 
 
-class InstancePoller(Type):
+class InstancePollerFacade(Type):
     name = 'InstancePoller'
-    version = 2
+    version = 3
     schema =     {'definitions': {'Address': {'additionalProperties': False,
                                  'properties': {'Scope': {'type': 'string'},
                                                 'SpaceName': {'type': 'string'},
@@ -10361,7 +11194,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='AreManuallyProvisioned', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='AreManuallyProvisioned', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10376,7 +11209,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='InstanceId', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='InstanceId', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10391,7 +11224,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='InstanceStatus', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='InstanceStatus', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10406,7 +11239,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='Life', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='Life', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10421,7 +11254,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='ModelConfig', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='ModelConfig', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -10436,7 +11269,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='ProviderAddresses', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='ProviderAddresses', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10451,7 +11284,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='SetInstanceStatus', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='SetInstanceStatus', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10466,7 +11299,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='SetProviderAddresses', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='SetProviderAddresses', Version=3, Params=params)
         params['MachineAddresses'] = machineaddresses
         reply = await self.rpc(msg)
         return reply
@@ -10481,7 +11314,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='Status', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='Status', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -10496,7 +11329,7 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='WatchForModelConfigChanges', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='WatchForModelConfigChanges', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -10511,13 +11344,13 @@ class InstancePoller(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='InstancePoller', Request='WatchModelMachines', Version=2, Params=params)
+        msg = dict(Type='InstancePoller', Request='WatchModelMachines', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
 
 
-class KeyManager(Type):
+class KeyManagerFacade(Type):
     name = 'KeyManager'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -10681,7 +11514,7 @@ class KeyManager(Type):
         return reply
 
 
-class KeyUpdater(Type):
+class KeyUpdaterFacade(Type):
     name = 'KeyUpdater'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -10791,10 +11624,14 @@ class KeyUpdater(Type):
         return reply
 
 
-class LeadershipService(Type):
+class LeadershipServiceFacade(Type):
     name = 'LeadershipService'
     version = 2
-    schema =     {'definitions': {'ClaimLeadershipBulkParams': {'additionalProperties': False,
+    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'],
@@ -10805,10 +11642,10 @@ class LeadershipService(Type):
                                                     'required': ['Results'],
                                                     'type': 'object'},
                      'ClaimLeadershipParams': {'additionalProperties': False,
-                                               'properties': {'DurationSeconds': {'type': 'number'},
-                                                              'ServiceTag': {'type': 'string'},
+                                               'properties': {'ApplicationTag': {'type': 'string'},
+                                                              'DurationSeconds': {'type': 'number'},
                                                               'UnitTag': {'type': 'string'}},
-                                               'required': ['ServiceTag',
+                                               'required': ['ApplicationTag',
                                                             'UnitTag',
                                                             'DurationSeconds'],
                                                'type': 'object'},
@@ -10841,10 +11678,6 @@ class LeadershipService(Type):
                                                'caveats',
                                                'sig'],
                                   'type': 'object'},
-                     'ServiceTag': {'additionalProperties': False,
-                                    'properties': {'Name': {'type': 'string'}},
-                                    'required': ['Name'],
-                                    'type': 'object'},
                      'caveat': {'additionalProperties': False,
                                 'properties': {'caveatId': {'$ref': '#/definitions/packet'},
                                                'location': {'$ref': '#/definitions/packet'},
@@ -10859,7 +11692,7 @@ class LeadershipService(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 'type': 'object'}},
-     'properties': {'BlockUntilLeadershipReleased': {'properties': {'Params': {'$ref': '#/definitions/ServiceTag'},
+     'properties': {'BlockUntilLeadershipReleased': {'properties': {'Params': {'$ref': '#/definitions/ApplicationTag'},
                                                                     'Result': {'$ref': '#/definitions/ErrorResult'}},
                                                      'type': 'object'},
                     'ClaimLeadership': {'properties': {'Params': {'$ref': '#/definitions/ClaimLeadershipBulkParams'},
@@ -10897,7 +11730,7 @@ class LeadershipService(Type):
         return reply
 
 
-class LifeFlag(Type):
+class LifeFlagFacade(Type):
     name = 'LifeFlag'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -11006,7 +11839,7 @@ class LifeFlag(Type):
         return reply
 
 
-class Logger(Type):
+class LoggerFacade(Type):
     name = 'Logger'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -11115,7 +11948,7 @@ class Logger(Type):
         return reply
 
 
-class MachineActions(Type):
+class MachineActionsFacade(Type):
     name = 'MachineActions'
     version = 1
     schema =     {'definitions': {'Action': {'additionalProperties': False,
@@ -11332,7 +12165,7 @@ class MachineActions(Type):
         return reply
 
 
-class MachineManager(Type):
+class MachineManagerFacade(Type):
     name = 'MachineManager'
     version = 2
     schema =     {'definitions': {'AddMachineParams': {'additionalProperties': False,
@@ -11478,7 +12311,7 @@ class MachineManager(Type):
         return reply
 
 
-class Machiner(Type):
+class MachinerFacade(Type):
     name = 'Machiner'
     version = 1
     schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
@@ -11925,7 +12758,7 @@ class Machiner(Type):
         return reply
 
 
-class MeterStatus(Type):
+class MeterStatusFacade(Type):
     name = 'MeterStatus'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -12035,7 +12868,7 @@ class MeterStatus(Type):
         return reply
 
 
-class MetricsAdder(Type):
+class MetricsAdderFacade(Type):
     name = 'MetricsAdder'
     version = 2
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -12135,9 +12968,9 @@ class MetricsAdder(Type):
         return reply
 
 
-class MetricsDebug(Type):
+class MetricsDebugFacade(Type):
     name = 'MetricsDebug'
-    version = 1
+    version = 2
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
                                   'properties': {'Entities': {'items': {'$ref': '#/definitions/Entity'},
                                                               'type': 'array'}},
@@ -12240,7 +13073,7 @@ class MetricsDebug(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='MetricsDebug', Request='GetMetrics', Version=1, Params=params)
+        msg = dict(Type='MetricsDebug', Request='GetMetrics', Version=2, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -12255,13 +13088,13 @@ class MetricsDebug(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='MetricsDebug', Request='SetMeterStatus', Version=1, Params=params)
+        msg = dict(Type='MetricsDebug', Request='SetMeterStatus', Version=2, Params=params)
         params['statues'] = statues
         reply = await self.rpc(msg)
         return reply
 
 
-class MetricsManager(Type):
+class MetricsManagerFacade(Type):
     name = 'MetricsManager'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -12359,7 +13192,7 @@ class MetricsManager(Type):
         return reply
 
 
-class MigrationFlag(Type):
+class MigrationFlagFacade(Type):
     name = 'MigrationFlag'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -12468,7 +13301,7 @@ class MigrationFlag(Type):
         return reply
 
 
-class MigrationMaster(Type):
+class MigrationMasterFacade(Type):
     name = 'MigrationMaster'
     version = 1
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -12621,7 +13454,7 @@ class MigrationMaster(Type):
         return reply
 
 
-class MigrationMinion(Type):
+class MigrationMinionFacade(Type):
     name = 'MigrationMinion'
     version = 1
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -12687,7 +13520,7 @@ class MigrationMinion(Type):
         return reply
 
 
-class MigrationStatusWatcher(Type):
+class MigrationStatusWatcherFacade(Type):
     name = 'MigrationStatusWatcher'
     version = 1
     schema =     {'definitions': {'MigrationStatus': {'additionalProperties': False,
@@ -12741,7 +13574,7 @@ class MigrationStatusWatcher(Type):
         return reply
 
 
-class MigrationTarget(Type):
+class MigrationTargetFacade(Type):
     name = 'MigrationTarget'
     version = 1
     schema =     {'definitions': {'ModelArgs': {'additionalProperties': False,
@@ -12806,7 +13639,7 @@ class MigrationTarget(Type):
         return reply
 
 
-class ModelManager(Type):
+class ModelManagerFacade(Type):
     name = 'ModelManager'
     version = 2
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -12890,7 +13723,8 @@ class ModelManager(Type):
                                                       'Config'],
                                          'type': 'object'},
                      'ModelInfo': {'additionalProperties': False,
-                                   'properties': {'DefaultSeries': {'type': 'string'},
+                                   'properties': {'Cloud': {'type': 'string'},
+                                                  'DefaultSeries': {'type': 'string'},
                                                   'Life': {'type': 'string'},
                                                   'Name': {'type': 'string'},
                                                   'OwnerTag': {'type': 'string'},
@@ -12905,6 +13739,7 @@ class ModelManager(Type):
                                                 'ServerUUID',
                                                 'ProviderType',
                                                 'DefaultSeries',
+                                                'Cloud',
                                                 'OwnerTag',
                                                 'Life',
                                                 'Status',
@@ -13073,7 +13908,7 @@ class ModelManager(Type):
         return reply
 
 
-class NotifyWatcher(Type):
+class NotifyWatcherFacade(Type):
     name = 'NotifyWatcher'
     version = 1
     schema =     {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}},
@@ -13109,7 +13944,7 @@ class NotifyWatcher(Type):
         return reply
 
 
-class Pinger(Type):
+class PingerFacade(Type):
     name = 'Pinger'
     version = 1
     schema =     {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}},
@@ -13145,9 +13980,9 @@ class Pinger(Type):
         return reply
 
 
-class Provisioner(Type):
+class ProvisionerFacade(Type):
     name = 'Provisioner'
-    version = 2
+    version = 3
     schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
                                             'properties': {'Servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
                                                                                  'type': 'array'},
@@ -13207,7 +14042,6 @@ class Provisioner(Type):
                                                         'AptMirror': {'type': 'string'},
                                                         'AptProxy': {'$ref': '#/definitions/Settings'},
                                                         'AuthorizedKeys': {'type': 'string'},
-                                                        'PreferIPv6': {'type': 'boolean'},
                                                         'ProviderType': {'type': 'string'},
                                                         'Proxy': {'$ref': '#/definitions/Settings'},
                                                         'SSLHostnameVerification': {'type': 'boolean'},
@@ -13218,7 +14052,6 @@ class Provisioner(Type):
                                                       'Proxy',
                                                       'AptProxy',
                                                       'AptMirror',
-                                                      'PreferIPv6',
                                                       'AllowLXCLoopMounts',
                                                       'UpdateBehavior'],
                                          'type': 'object'},
@@ -13774,7 +14607,7 @@ class Provisioner(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='APIAddresses', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='APIAddresses', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -13789,330 +14622,82 @@ class Provisioner(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='APIHostPorts', Version=2, Params=params)
-
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(BytesResult)
-    async def CACert(self):
-        '''
-
-        Returns -> typing.Sequence[int]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='CACert', Version=2, Params=params)
-
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ConstraintsResults)
-    async def Constraints(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ConstraintsResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='Constraints', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ContainerConfig)
-    async def ContainerConfig(self):
-        '''
-
-        Returns -> typing.Union[bool, str, _ForwardRef('Settings'), _ForwardRef('Settings'), _ForwardRef('UpdateBehavior')]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='ContainerConfig', Version=2, Params=params)
-
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ContainerManagerConfig)
-    async def ContainerManagerConfig(self, type_):
-        '''
-        type_ : str
-        Returns -> typing.Mapping[str, str]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='ContainerManagerConfig', Version=2, Params=params)
-        params['Type'] = type_
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(DistributionGroupResults)
-    async def DistributionGroup(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~DistributionGroupResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='DistributionGroup', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ErrorResults)
-    async def EnsureDead(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ErrorResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='EnsureDead', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(FindToolsResult)
-    async def FindTools(self, arch, majorversion, minorversion, number, series):
-        '''
-        arch : str
-        majorversion : int
-        minorversion : int
-        number : Number
-        series : str
-        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='FindTools', Version=2, Params=params)
-        params['Arch'] = arch
-        params['MajorVersion'] = majorversion
-        params['MinorVersion'] = minorversion
-        params['Number'] = number
-        params['Series'] = series
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(MachineNetworkConfigResults)
-    async def GetContainerInterfaceInfo(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~MachineNetworkConfigResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='GetContainerInterfaceInfo', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(StringResults)
-    async def InstanceId(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~StringResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='InstanceId', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(StatusResults)
-    async def InstanceStatus(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~StatusResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='InstanceStatus', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(LifeResults)
-    async def Life(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~LifeResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='Life', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(StatusResults)
-    async def MachinesWithTransientErrors(self):
-        '''
-
-        Returns -> typing.Sequence[~StatusResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='MachinesWithTransientErrors', Version=2, Params=params)
-
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ModelConfigResult)
-    async def ModelConfig(self):
-        '''
-
-        Returns -> typing.Mapping[str, typing.Any]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='ModelConfig', Version=2, 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=2, Params=params)
-
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(MachineNetworkConfigResults)
-    async def PrepareContainerInterfaceInfo(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~MachineNetworkConfigResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='PrepareContainerInterfaceInfo', Version=2, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ProvisioningInfoResults)
-    async def ProvisioningInfo(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ProvisioningInfoResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Provisioner', Request='ProvisioningInfo', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='APIHostPorts', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def ReleaseContainerAddresses(self, entities):
+    @ReturnMapping(BytesResult)
+    async def CACert(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ErrorResult]
+
+        Returns -> typing.Sequence[int]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='ReleaseContainerAddresses', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='CACert', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def Remove(self, entities):
+    @ReturnMapping(ConstraintsResults)
+    async def Constraints(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ErrorResult]
+        Returns -> typing.Sequence[~ConstraintsResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='Remove', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='Constraints', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringResults)
-    async def Series(self, entities):
+    @ReturnMapping(ContainerConfig)
+    async def ContainerConfig(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~StringResult]
+
+        Returns -> typing.Union[bool, str, _ForwardRef('Settings'), _ForwardRef('Settings'), _ForwardRef('UpdateBehavior')]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='Series', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='ContainerConfig', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def SetInstanceInfo(self, machines):
+    @ReturnMapping(ContainerManagerConfig)
+    async def ContainerManagerConfig(self, type_):
         '''
-        machines : typing.Sequence[~InstanceInfo]
-        Returns -> typing.Sequence[~ErrorResult]
+        type_ : str
+        Returns -> typing.Mapping[str, str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='SetInstanceInfo', Version=2, Params=params)
-        params['Machines'] = machines
+        msg = dict(Type='Provisioner', Request='ContainerManagerConfig', Version=3, Params=params)
+        params['Type'] = type_
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def SetInstanceStatus(self, entities):
+    @ReturnMapping(DistributionGroupResults)
+    async def DistributionGroup(self, entities):
         '''
-        entities : typing.Sequence[~EntityStatusArgs]
-        Returns -> typing.Sequence[~ErrorResult]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~DistributionGroupResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='SetInstanceStatus', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='DistributionGroup', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -14120,446 +14705,352 @@ class Provisioner(Type):
 
 
     @ReturnMapping(ErrorResults)
-    async def SetPasswords(self, changes):
+    async def EnsureDead(self, entities):
         '''
-        changes : typing.Sequence[~EntityPassword]
+        entities : typing.Sequence[~Entity]
         Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='SetPasswords', Version=2, Params=params)
-        params['Changes'] = changes
+        msg = dict(Type='Provisioner', Request='EnsureDead', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def SetStatus(self, entities):
+    @ReturnMapping(FindToolsResult)
+    async def FindTools(self, arch, majorversion, minorversion, number, series):
         '''
-        entities : typing.Sequence[~EntityStatusArgs]
-        Returns -> typing.Sequence[~ErrorResult]
+        arch : str
+        majorversion : int
+        minorversion : int
+        number : Number
+        series : str
+        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='SetStatus', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='FindTools', Version=3, Params=params)
+        params['Arch'] = arch
+        params['MajorVersion'] = majorversion
+        params['MinorVersion'] = minorversion
+        params['Number'] = number
+        params['Series'] = series
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def SetSupportedContainers(self, params):
+    @ReturnMapping(MachineNetworkConfigResults)
+    async def GetContainerInterfaceInfo(self, entities):
         '''
-        params : typing.Sequence[~MachineContainers]
-        Returns -> typing.Sequence[~ErrorResult]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~MachineNetworkConfigResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='SetSupportedContainers', Version=2, Params=params)
-        params['Params'] = params
+        msg = dict(Type='Provisioner', Request='GetContainerInterfaceInfo', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringsResult)
-    async def StateAddresses(self):
+    @ReturnMapping(StringResults)
+    async def InstanceId(self, entities):
         '''
-
-        Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~StringResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='StateAddresses', Version=2, Params=params)
-
+        msg = dict(Type='Provisioner', Request='InstanceId', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
     @ReturnMapping(StatusResults)
-    async def Status(self, entities):
+    async def InstanceStatus(self, entities):
         '''
         entities : typing.Sequence[~Entity]
         Returns -> typing.Sequence[~StatusResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='Status', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='InstanceStatus', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ToolsResults)
-    async def Tools(self, entities):
+    @ReturnMapping(LifeResults)
+    async def Life(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ToolsResult]
+        Returns -> typing.Sequence[~LifeResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='Tools', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='Life', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def UpdateStatus(self, entities):
+    @ReturnMapping(StatusResults)
+    async def MachinesWithTransientErrors(self):
         '''
-        entities : typing.Sequence[~EntityStatusArgs]
-        Returns -> typing.Sequence[~ErrorResult]
+
+        Returns -> typing.Sequence[~StatusResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='UpdateStatus', Version=2, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='MachinesWithTransientErrors', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(NotifyWatchResult)
-    async def WatchAPIHostPorts(self):
+    @ReturnMapping(ModelConfigResult)
+    async def ModelConfig(self):
         '''
 
-        Returns -> typing.Union[_ForwardRef('Error'), str]
+        Returns -> typing.Mapping[str, typing.Any]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='WatchAPIHostPorts', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='ModelConfig', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringsWatchResults)
-    async def WatchAllContainers(self, params):
+    @ReturnMapping(StringResult)
+    async def ModelUUID(self):
         '''
-        params : typing.Sequence[~WatchContainer]
-        Returns -> typing.Sequence[~StringsWatchResult]
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='WatchAllContainers', Version=2, Params=params)
-        params['Params'] = params
+        msg = dict(Type='Provisioner', Request='ModelUUID', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringsWatchResults)
-    async def WatchContainers(self, params):
+    @ReturnMapping(MachineNetworkConfigResults)
+    async def PrepareContainerInterfaceInfo(self, entities):
         '''
-        params : typing.Sequence[~WatchContainer]
-        Returns -> typing.Sequence[~StringsWatchResult]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~MachineNetworkConfigResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='WatchContainers', Version=2, Params=params)
-        params['Params'] = params
+        msg = dict(Type='Provisioner', Request='PrepareContainerInterfaceInfo', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(NotifyWatchResult)
-    async def WatchForModelConfigChanges(self):
+    @ReturnMapping(ProvisioningInfoResults)
+    async def ProvisioningInfo(self, entities):
         '''
-
-        Returns -> typing.Union[_ForwardRef('Error'), str]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ProvisioningInfoResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='WatchForModelConfigChanges', Version=2, Params=params)
-
+        msg = dict(Type='Provisioner', Request='ProvisioningInfo', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(NotifyWatchResult)
-    async def WatchMachineErrorRetry(self):
+    @ReturnMapping(ErrorResults)
+    async def ReleaseContainerAddresses(self, entities):
         '''
-
-        Returns -> typing.Union[_ForwardRef('Error'), str]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='WatchMachineErrorRetry', Version=2, Params=params)
-
+        msg = dict(Type='Provisioner', Request='ReleaseContainerAddresses', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringsWatchResult)
-    async def WatchModelMachines(self):
+    @ReturnMapping(ErrorResults)
+    async def Remove(self, entities):
         '''
-
-        Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error')]
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Provisioner', Request='WatchModelMachines', Version=2, Params=params)
-
+        msg = dict(Type='Provisioner', Request='Remove', Version=3, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
-class ProxyUpdater(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'},
-                                                  'MacaroonPath': {'type': 'string'}},
-                                   'type': 'object'},
-                     'Macaroon': {'additionalProperties': False,
-                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
-                                                             'type': 'array'},
-                                                 'data': {'items': {'type': 'integer'},
-                                                          'type': 'array'},
-                                                 'id': {'$ref': '#/definitions/packet'},
-                                                 'location': {'$ref': '#/definitions/packet'},
-                                                 'sig': {'items': {'type': 'integer'},
-                                                         'type': 'array'}},
-                                  'required': ['data',
-                                               'location',
-                                               'id',
-                                               'caveats',
-                                               'sig'],
-                                  'type': 'object'},
-                     'NotifyWatchResult': {'additionalProperties': False,
-                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                          'NotifyWatcherId': {'type': 'string'}},
-                                           'required': ['NotifyWatcherId', 'Error'],
-                                           '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'},
-                                                    'NoProxy': {'type': 'string'}},
-                                     'required': ['HTTP',
-                                                  'HTTPS',
-                                                  'FTP',
-                                                  'NoProxy'],
-                                     'type': 'object'},
-                     'ProxyConfigResult': {'additionalProperties': False,
-                                           'properties': {'APTProxySettings': {'$ref': '#/definitions/ProxyConfig'},
-                                                          'Error': {'$ref': '#/definitions/Error'},
-                                                          'ProxySettings': {'$ref': '#/definitions/ProxyConfig'}},
-                                           'required': ['ProxySettings',
-                                                        'APTProxySettings'],
-                                           'type': 'object'},
-                     'ProxyConfigResults': {'additionalProperties': False,
-                                            'properties': {'Results': {'items': {'$ref': '#/definitions/ProxyConfigResult'},
-                                                                       'type': 'array'}},
-                                            'required': ['Results'],
-                                            'type': 'object'},
-                     'caveat': {'additionalProperties': False,
-                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
-                                               'location': {'$ref': '#/definitions/packet'},
-                                               'verificationId': {'$ref': '#/definitions/packet'}},
-                                'required': ['location',
-                                             'caveatId',
-                                             'verificationId'],
-                                'type': 'object'},
-                     'packet': {'additionalProperties': False,
-                                'properties': {'headerLen': {'type': 'integer'},
-                                               'start': {'type': 'integer'},
-                                               'totalLen': {'type': 'integer'}},
-                                'required': ['start', 'totalLen', 'headerLen'],
-                                '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):
+
+    @ReturnMapping(StringResults)
+    async def Series(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ProxyConfigResult]
+        Returns -> typing.Sequence[~StringResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='ProxyUpdater', Request='ProxyConfig', Version=1, Params=params)
+        msg = dict(Type='Provisioner', Request='Series', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(NotifyWatchResults)
-    async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
+    @ReturnMapping(ErrorResults)
+    async def SetInstanceInfo(self, machines):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~NotifyWatchResult]
+        machines : typing.Sequence[~InstanceInfo]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='ProxyUpdater', Request='WatchForProxyConfigAndAPIHostPortChanges', Version=1, Params=params)
+        msg = dict(Type='Provisioner', Request='SetInstanceInfo', Version=3, Params=params)
+        params['Machines'] = machines
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetInstanceStatus(self, entities):
+        '''
+        entities : typing.Sequence[~EntityStatusArgs]
+        Returns -> typing.Sequence[~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
 
 
-class Reboot(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'},
-                                                  'MacaroonPath': {'type': 'string'}},
-                                   'type': 'object'},
-                     'ErrorResult': {'additionalProperties': False,
-                                     'properties': {'Error': {'$ref': '#/definitions/Error'}},
-                                     'required': ['Error'],
-                                     'type': 'object'},
-                     'ErrorResults': {'additionalProperties': False,
-                                      'properties': {'Results': {'items': {'$ref': '#/definitions/ErrorResult'},
-                                                                 'type': 'array'}},
-                                      'required': ['Results'],
-                                      'type': 'object'},
-                     'Macaroon': {'additionalProperties': False,
-                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
-                                                             'type': 'array'},
-                                                 'data': {'items': {'type': 'integer'},
-                                                          'type': 'array'},
-                                                 'id': {'$ref': '#/definitions/packet'},
-                                                 'location': {'$ref': '#/definitions/packet'},
-                                                 'sig': {'items': {'type': 'integer'},
-                                                         'type': 'array'}},
-                                  'required': ['data',
-                                               'location',
-                                               'id',
-                                               'caveats',
-                                               'sig'],
-                                  'type': 'object'},
-                     'NotifyWatchResult': {'additionalProperties': False,
-                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                          'NotifyWatcherId': {'type': 'string'}},
-                                           'required': ['NotifyWatcherId', 'Error'],
-                                           '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'},
-                     'caveat': {'additionalProperties': False,
-                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
-                                               'location': {'$ref': '#/definitions/packet'},
-                                               'verificationId': {'$ref': '#/definitions/packet'}},
-                                'required': ['location',
-                                             'caveatId',
-                                             'verificationId'],
-                                'type': 'object'},
-                     'packet': {'additionalProperties': False,
-                                'properties': {'headerLen': {'type': 'integer'},
-                                               'start': {'type': 'integer'},
-                                               'totalLen': {'type': 'integer'}},
-                                'required': ['start', 'totalLen', 'headerLen'],
-                                '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):
+    async def SetPasswords(self, changes):
         '''
-        entities : typing.Sequence[~Entity]
+        changes : typing.Sequence[~EntityPassword]
         Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Reboot', Request='ClearReboot', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='SetPasswords', Version=3, Params=params)
+        params['Changes'] = changes
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def SetStatus(self, entities):
+        '''
+        entities : typing.Sequence[~EntityStatusArgs]
+        Returns -> typing.Sequence[~ErrorResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Provisioner', Request='SetStatus', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(RebootActionResults)
-    async def GetRebootAction(self, entities):
+    @ReturnMapping(ErrorResults)
+    async def SetSupportedContainers(self, params):
+        '''
+        params : typing.Sequence[~MachineContainers]
+        Returns -> typing.Sequence[~ErrorResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Provisioner', Request='SetSupportedContainers', Version=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[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[~Entity]
-        Returns -> typing.Sequence[~RebootActionResult]
+        Returns -> typing.Sequence[~StatusResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Reboot', Request='GetRebootAction', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='Status', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ErrorResults)
-    async def RequestReboot(self, entities):
+    @ReturnMapping(ToolsResults)
+    async def Tools(self, entities):
         '''
         entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ToolsResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Provisioner', Request='Tools', Version=3, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ErrorResults)
+    async def UpdateStatus(self, entities):
+        '''
+        entities : typing.Sequence[~EntityStatusArgs]
         Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Reboot', Request='RequestReboot', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='UpdateStatus', Version=3, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -14567,258 +15058,96 @@ class Reboot(Type):
 
 
     @ReturnMapping(NotifyWatchResult)
-    async def WatchForRebootEvent(self):
+    async def WatchAPIHostPorts(self):
         '''
 
         Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Reboot', Request='WatchForRebootEvent', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='WatchAPIHostPorts', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
 
 
-class RelationUnitsWatcher(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'},
-                                                  'MacaroonPath': {'type': 'string'}},
-                                   'type': 'object'},
-                     'Macaroon': {'additionalProperties': False,
-                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
-                                                             'type': 'array'},
-                                                 'data': {'items': {'type': 'integer'},
-                                                          'type': 'array'},
-                                                 'id': {'$ref': '#/definitions/packet'},
-                                                 'location': {'$ref': '#/definitions/packet'},
-                                                 'sig': {'items': {'type': 'integer'},
-                                                         'type': 'array'}},
-                                  'required': ['data',
-                                               'location',
-                                               'id',
-                                               'caveats',
-                                               'sig'],
-                                  'type': 'object'},
-                     'RelationUnitsChange': {'additionalProperties': False,
-                                             'properties': {'Changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
-                                                                        'type': 'object'},
-                                                            'Departed': {'items': {'type': 'string'},
-                                                                         'type': 'array'}},
-                                             'required': ['Changed', 'Departed'],
-                                             'type': 'object'},
-                     'RelationUnitsWatchResult': {'additionalProperties': False,
-                                                  'properties': {'Changes': {'$ref': '#/definitions/RelationUnitsChange'},
-                                                                 'Error': {'$ref': '#/definitions/Error'},
-                                                                 'RelationUnitsWatcherId': {'type': 'string'}},
-                                                  'required': ['RelationUnitsWatcherId',
-                                                               'Changes',
-                                                               'Error'],
-                                                  'type': 'object'},
-                     'UnitSettings': {'additionalProperties': False,
-                                      'properties': {'Version': {'type': 'integer'}},
-                                      'required': ['Version'],
-                                      'type': 'object'},
-                     'caveat': {'additionalProperties': False,
-                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
-                                               'location': {'$ref': '#/definitions/packet'},
-                                               'verificationId': {'$ref': '#/definitions/packet'}},
-                                'required': ['location',
-                                             'caveatId',
-                                             'verificationId'],
-                                'type': 'object'},
-                     'packet': {'additionalProperties': False,
-                                'properties': {'headerLen': {'type': 'integer'},
-                                               'start': {'type': 'integer'},
-                                               'totalLen': {'type': 'integer'}},
-                                'required': ['start', 'totalLen', 'headerLen'],
-                                '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]
+    @ReturnMapping(StringsWatchResults)
+    async def WatchAllContainers(self, params):
+        '''
+        params : typing.Sequence[~WatchContainer]
+        Returns -> typing.Sequence[~StringsWatchResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='RelationUnitsWatcher', Request='Next', Version=1, Params=params)
-
+        msg = dict(Type='Provisioner', Request='WatchAllContainers', Version=3, Params=params)
+        params['Params'] = params
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(None)
-    async def Stop(self):
+    @ReturnMapping(StringsWatchResults)
+    async def WatchContainers(self, params):
         '''
-
-        Returns -> None
+        params : typing.Sequence[~WatchContainer]
+        Returns -> typing.Sequence[~StringsWatchResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='RelationUnitsWatcher', Request='Stop', Version=1, Params=params)
-
+        msg = dict(Type='Provisioner', Request='WatchContainers', Version=3, Params=params)
+        params['Params'] = params
         reply = await self.rpc(msg)
         return reply
 
 
-class Resumer(Type):
-    name = 'Resumer'
-    version = 2
-    schema =     {'properties': {'ResumeTransactions': {'type': 'object'}}, 'type': 'object'}
-    
 
-    @ReturnMapping(None)
-    async def ResumeTransactions(self):
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForModelConfigChanges(self):
         '''
 
-        Returns -> None
+        Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Resumer', Request='ResumeTransactions', Version=2, Params=params)
+        msg = dict(Type='Provisioner', Request='WatchForModelConfigChanges', Version=3, Params=params)
 
         reply = await self.rpc(msg)
         return reply
 
 
-class RetryStrategy(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'},
-                                                  'MacaroonPath': {'type': 'string'}},
-                                   'type': 'object'},
-                     'Macaroon': {'additionalProperties': False,
-                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
-                                                             'type': 'array'},
-                                                 'data': {'items': {'type': 'integer'},
-                                                          'type': 'array'},
-                                                 'id': {'$ref': '#/definitions/packet'},
-                                                 'location': {'$ref': '#/definitions/packet'},
-                                                 'sig': {'items': {'type': 'integer'},
-                                                         'type': 'array'}},
-                                  'required': ['data',
-                                               'location',
-                                               'id',
-                                               'caveats',
-                                               'sig'],
-                                  'type': 'object'},
-                     'NotifyWatchResult': {'additionalProperties': False,
-                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                          'NotifyWatcherId': {'type': 'string'}},
-                                           'required': ['NotifyWatcherId', 'Error'],
-                                           'type': 'object'},
-                     'NotifyWatchResults': {'additionalProperties': False,
-                                            'properties': {'Results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
-                                                                       'type': 'array'}},
-                                            'required': ['Results'],
-                                            'type': 'object'},
-                     'RetryStrategy': {'additionalProperties': False,
-                                       'properties': {'JitterRetryTime': {'type': 'boolean'},
-                                                      'MaxRetryTime': {'type': 'integer'},
-                                                      'MinRetryTime': {'type': 'integer'},
-                                                      'RetryTimeFactor': {'type': 'integer'},
-                                                      'ShouldRetry': {'type': 'boolean'}},
-                                       'required': ['ShouldRetry',
-                                                    'MinRetryTime',
-                                                    'MaxRetryTime',
-                                                    'JitterRetryTime',
-                                                    'RetryTimeFactor'],
-                                       'type': 'object'},
-                     'RetryStrategyResult': {'additionalProperties': False,
-                                             'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                            'Result': {'$ref': '#/definitions/RetryStrategy'}},
-                                             'required': ['Error', 'Result'],
-                                             'type': 'object'},
-                     'RetryStrategyResults': {'additionalProperties': False,
-                                              'properties': {'Results': {'items': {'$ref': '#/definitions/RetryStrategyResult'},
-                                                                         'type': 'array'}},
-                                              'required': ['Results'],
-                                              'type': 'object'},
-                     'caveat': {'additionalProperties': False,
-                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
-                                               'location': {'$ref': '#/definitions/packet'},
-                                               'verificationId': {'$ref': '#/definitions/packet'}},
-                                'required': ['location',
-                                             'caveatId',
-                                             'verificationId'],
-                                'type': 'object'},
-                     'packet': {'additionalProperties': False,
-                                'properties': {'headerLen': {'type': 'integer'},
-                                               'start': {'type': 'integer'},
-                                               'totalLen': {'type': 'integer'}},
-                                'required': ['start', 'totalLen', 'headerLen'],
-                                '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):
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchMachineErrorRetry(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~RetryStrategyResult]
+
+        Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='RetryStrategy', Request='RetryStrategy', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='WatchMachineErrorRetry', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(NotifyWatchResults)
-    async def WatchRetryStrategy(self, entities):
+    @ReturnMapping(StringsWatchResult)
+    async def WatchModelMachines(self):
         '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~NotifyWatchResult]
+
+        Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error')]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='RetryStrategy', Request='WatchRetryStrategy', Version=1, Params=params)
-        params['Entities'] = entities
+        msg = dict(Type='Provisioner', Request='WatchModelMachines', Version=3, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
-class SSHClient(Type):
-    name = 'SSHClient'
+class ProxyUpdaterFacade(Type):
+    name = 'ProxyUpdater'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
                                   'properties': {'Entities': {'items': {'$ref': '#/definitions/Entity'},
@@ -14854,159 +15183,102 @@ class SSHClient(Type):
                                                'caveats',
                                                'sig'],
                                   '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'],
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                          'NotifyWatcherId': {'type': 'string'}},
+                                           'required': ['NotifyWatcherId', 'Error'],
                                            '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'},
-                     'caveat': {'additionalProperties': False,
-                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
-                                               'location': {'$ref': '#/definitions/packet'},
-                                               'verificationId': {'$ref': '#/definitions/packet'}},
-                                'required': ['location',
-                                             'caveatId',
-                                             'verificationId'],
-                                'type': 'object'},
-                     'packet': {'additionalProperties': False,
-                                'properties': {'headerLen': {'type': 'integer'},
-                                               'start': {'type': 'integer'},
-                                               'totalLen': {'type': 'integer'}},
-                                'required': ['start', 'totalLen', 'headerLen'],
-                                '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[~Entity]
-        Returns -> typing.Sequence[~SSHAddressResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='SSHClient', Request='PrivateAddress', Version=1, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(SSHProxyResult)
-    async def Proxy(self):
-        '''
-
-        Returns -> 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
-
-
+                     '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'},
+                                                    'NoProxy': {'type': 'string'}},
+                                     'required': ['HTTP',
+                                                  'HTTPS',
+                                                  'FTP',
+                                                  'NoProxy'],
+                                     'type': 'object'},
+                     'ProxyConfigResult': {'additionalProperties': False,
+                                           'properties': {'APTProxySettings': {'$ref': '#/definitions/ProxyConfig'},
+                                                          'Error': {'$ref': '#/definitions/Error'},
+                                                          'ProxySettings': {'$ref': '#/definitions/ProxyConfig'}},
+                                           'required': ['ProxySettings',
+                                                        'APTProxySettings'],
+                                           'type': 'object'},
+                     'ProxyConfigResults': {'additionalProperties': False,
+                                            'properties': {'Results': {'items': {'$ref': '#/definitions/ProxyConfigResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['Results'],
+                                            'type': 'object'},
+                     'caveat': {'additionalProperties': False,
+                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
+                                               'location': {'$ref': '#/definitions/packet'},
+                                               'verificationId': {'$ref': '#/definitions/packet'}},
+                                'required': ['location',
+                                             'caveatId',
+                                             'verificationId'],
+                                'type': 'object'},
+                     'packet': {'additionalProperties': False,
+                                'properties': {'headerLen': {'type': 'integer'},
+                                               'start': {'type': 'integer'},
+                                               'totalLen': {'type': 'integer'}},
+                                'required': ['start', 'totalLen', 'headerLen'],
+                                '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(SSHAddressResults)
-    async def PublicAddress(self, entities):
+    @ReturnMapping(ProxyConfigResults)
+    async def ProxyConfig(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~SSHAddressResult]
+        Returns -> typing.Sequence[~ProxyConfigResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='SSHClient', Request='PublicAddress', Version=1, Params=params)
+        msg = dict(Type='ProxyUpdater', Request='ProxyConfig', Version=1, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(SSHPublicKeysResults)
-    async def PublicKeys(self, entities):
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~SSHPublicKeysResult]
+        Returns -> typing.Sequence[~NotifyWatchResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='SSHClient', Request='PublicKeys', Version=1, Params=params)
+        msg = dict(Type='ProxyUpdater', Request='WatchForProxyConfigAndAPIHostPortChanges', Version=1, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
-class Service(Type):
-    name = 'Service'
-    version = 3
-    schema =     {'definitions': {'AddRelation': {'additionalProperties': False,
-                                     'properties': {'Endpoints': {'items': {'type': 'string'},
-                                                                  'type': 'array'}},
-                                     'required': ['Endpoints'],
-                                     'type': 'object'},
-                     'AddRelationResults': {'additionalProperties': False,
-                                            'properties': {'Endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/Relation'}},
-                                                                         'type': 'object'}},
-                                            'required': ['Endpoints'],
-                                            'type': 'object'},
-                     'AddServiceUnits': {'additionalProperties': False,
-                                         'properties': {'NumUnits': {'type': 'integer'},
-                                                        'Placement': {'items': {'$ref': '#/definitions/Placement'},
-                                                                      'type': 'array'},
-                                                        'ServiceName': {'type': 'string'}},
-                                         'required': ['ServiceName',
-                                                      'NumUnits',
-                                                      'Placement'],
-                                         'type': 'object'},
-                     'AddServiceUnitsResults': {'additionalProperties': False,
-                                                'properties': {'Units': {'items': {'type': 'string'},
-                                                                         'type': 'array'}},
-                                                'required': ['Units'],
-                                                'type': 'object'},
-                     'Constraints': {'additionalProperties': False,
-                                     'properties': {'Count': {'type': 'integer'},
-                                                    'Pool': {'type': 'string'},
-                                                    'Size': {'type': 'integer'}},
-                                     'required': ['Pool', 'Size', 'Count'],
-                                     'type': 'object'},
-                     'DestroyRelation': {'additionalProperties': False,
-                                         'properties': {'Endpoints': {'items': {'type': 'string'},
-                                                                      'type': 'array'}},
-                                         'required': ['Endpoints'],
-                                         'type': 'object'},
-                     'DestroyServiceUnits': {'additionalProperties': False,
-                                             'properties': {'UnitNames': {'items': {'type': 'string'},
-                                                                          'type': 'array'}},
-                                             'required': ['UnitNames'],
-                                             'type': 'object'},
+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'},
@@ -15026,14 +15298,6 @@ class Service(Type):
                                                                  'type': 'array'}},
                                       'required': ['Results'],
                                       'type': 'object'},
-                     'GetConstraintsResults': {'additionalProperties': False,
-                                               'properties': {'Constraints': {'$ref': '#/definitions/Value'}},
-                                               'required': ['Constraints'],
-                                               'type': 'object'},
-                     'GetServiceConstraints': {'additionalProperties': False,
-                                               'properties': {'ServiceName': {'type': 'string'}},
-                                               'required': ['ServiceName'],
-                                               'type': 'object'},
                      'Macaroon': {'additionalProperties': False,
                                   'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
                                                              'type': 'array'},
@@ -15049,180 +15313,19 @@ class Service(Type):
                                                'caveats',
                                                'sig'],
                                   'type': 'object'},
-                     'Placement': {'additionalProperties': False,
-                                   'properties': {'Directive': {'type': 'string'},
-                                                  'Scope': {'type': 'string'}},
-                                   'required': ['Scope', 'Directive'],
-                                   'type': 'object'},
-                     'Relation': {'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'},
-                     'ServiceCharmRelations': {'additionalProperties': False,
-                                               'properties': {'ServiceName': {'type': 'string'}},
-                                               'required': ['ServiceName'],
-                                               'type': 'object'},
-                     'ServiceCharmRelationsResults': {'additionalProperties': False,
-                                                      'properties': {'CharmRelations': {'items': {'type': 'string'},
-                                                                                        'type': 'array'}},
-                                                      'required': ['CharmRelations'],
-                                                      'type': 'object'},
-                     'ServiceDeploy': {'additionalProperties': False,
-                                       'properties': {'Channel': {'type': 'string'},
-                                                      'CharmUrl': {'type': 'string'},
-                                                      'Config': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                 'type': 'object'},
-                                                      'ConfigYAML': {'type': 'string'},
-                                                      'Constraints': {'$ref': '#/definitions/Value'},
-                                                      'EndpointBindings': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                           'type': 'object'},
-                                                      'NumUnits': {'type': 'integer'},
-                                                      'Placement': {'items': {'$ref': '#/definitions/Placement'},
-                                                                    'type': 'array'},
-                                                      'Resources': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                    'type': 'object'},
-                                                      'Series': {'type': 'string'},
-                                                      'ServiceName': {'type': 'string'},
-                                                      'Storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}},
-                                                                  'type': 'object'}},
-                                       'required': ['ServiceName',
-                                                    'Series',
-                                                    'CharmUrl',
-                                                    'Channel',
-                                                    'NumUnits',
-                                                    'Config',
-                                                    'ConfigYAML',
-                                                    'Constraints',
-                                                    'Placement',
-                                                    'Storage',
-                                                    'EndpointBindings',
-                                                    'Resources'],
-                                       'type': 'object'},
-                     'ServiceDestroy': {'additionalProperties': False,
-                                        'properties': {'ServiceName': {'type': 'string'}},
-                                        'required': ['ServiceName'],
-                                        'type': 'object'},
-                     'ServiceExpose': {'additionalProperties': False,
-                                       'properties': {'ServiceName': {'type': 'string'}},
-                                       'required': ['ServiceName'],
-                                       'type': 'object'},
-                     'ServiceGet': {'additionalProperties': False,
-                                    'properties': {'ServiceName': {'type': 'string'}},
-                                    'required': ['ServiceName'],
-                                    'type': 'object'},
-                     'ServiceGetResults': {'additionalProperties': False,
-                                           'properties': {'Charm': {'type': 'string'},
-                                                          'Config': {'patternProperties': {'.*': {'additionalProperties': True,
-                                                                                                  'type': 'object'}},
-                                                                     'type': 'object'},
-                                                          'Constraints': {'$ref': '#/definitions/Value'},
-                                                          'Service': {'type': 'string'}},
-                                           'required': ['Service',
-                                                        'Charm',
-                                                        'Config',
-                                                        'Constraints'],
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                          'NotifyWatcherId': {'type': 'string'}},
+                                           'required': ['NotifyWatcherId', 'Error'],
                                            'type': 'object'},
-                     'ServiceMetricCredential': {'additionalProperties': False,
-                                                 'properties': {'MetricCredentials': {'items': {'type': 'integer'},
-                                                                                      'type': 'array'},
-                                                                'ServiceName': {'type': 'string'}},
-                                                 'required': ['ServiceName',
-                                                              'MetricCredentials'],
-                                                 'type': 'object'},
-                     'ServiceMetricCredentials': {'additionalProperties': False,
-                                                  'properties': {'Creds': {'items': {'$ref': '#/definitions/ServiceMetricCredential'},
-                                                                           'type': 'array'}},
-                                                  'required': ['Creds'],
-                                                  'type': 'object'},
-                     'ServiceSet': {'additionalProperties': False,
-                                    'properties': {'Options': {'patternProperties': {'.*': {'type': 'string'}},
-                                                               'type': 'object'},
-                                                   'ServiceName': {'type': 'string'}},
-                                    'required': ['ServiceName', 'Options'],
-                                    'type': 'object'},
-                     'ServiceSetCharm': {'additionalProperties': False,
-                                         'properties': {'charmurl': {'type': 'string'},
-                                                        'cs-channel': {'type': 'string'},
-                                                        'forceseries': {'type': 'boolean'},
-                                                        'forceunits': {'type': 'boolean'},
-                                                        'resourceids': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                        'type': 'object'},
-                                                        'servicename': {'type': 'string'}},
-                                         'required': ['servicename',
-                                                      'charmurl',
-                                                      'cs-channel',
-                                                      'forceunits',
-                                                      'forceseries',
-                                                      'resourceids'],
-                                         'type': 'object'},
-                     'ServiceUnexpose': {'additionalProperties': False,
-                                         'properties': {'ServiceName': {'type': 'string'}},
-                                         'required': ['ServiceName'],
-                                         'type': 'object'},
-                     'ServiceUnset': {'additionalProperties': False,
-                                      'properties': {'Options': {'items': {'type': 'string'},
-                                                                 'type': 'array'},
-                                                     'ServiceName': {'type': 'string'}},
-                                      'required': ['ServiceName', 'Options'],
-                                      'type': 'object'},
-                     'ServiceUpdate': {'additionalProperties': False,
-                                       'properties': {'CharmUrl': {'type': 'string'},
-                                                      'Constraints': {'$ref': '#/definitions/Value'},
-                                                      'ForceCharmUrl': {'type': 'boolean'},
-                                                      'ForceSeries': {'type': 'boolean'},
-                                                      'MinUnits': {'type': 'integer'},
-                                                      'ServiceName': {'type': 'string'},
-                                                      'SettingsStrings': {'patternProperties': {'.*': {'type': 'string'}},
-                                                                          'type': 'object'},
-                                                      'SettingsYAML': {'type': 'string'}},
-                                       'required': ['ServiceName',
-                                                    'CharmUrl',
-                                                    'ForceCharmUrl',
-                                                    'ForceSeries',
-                                                    'MinUnits',
-                                                    'SettingsStrings',
-                                                    'SettingsYAML',
-                                                    'Constraints'],
-                                       'type': 'object'},
-                     'ServicesDeploy': {'additionalProperties': False,
-                                        'properties': {'Services': {'items': {'$ref': '#/definitions/ServiceDeploy'},
-                                                                    'type': 'array'}},
-                                        'required': ['Services'],
-                                        'type': 'object'},
-                     'SetConstraints': {'additionalProperties': False,
-                                        'properties': {'Constraints': {'$ref': '#/definitions/Value'},
-                                                       'ServiceName': {'type': 'string'}},
-                                        'required': ['ServiceName', 'Constraints'],
-                                        'type': 'object'},
-                     'StringResult': {'additionalProperties': False,
-                                      'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                     'Result': {'type': 'string'}},
-                                      'required': ['Error', 'Result'],
-                                      'type': 'object'},
-                     'Value': {'additionalProperties': False,
-                               'properties': {'arch': {'type': 'string'},
-                                              'container': {'type': 'string'},
-                                              'cpu-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'},
+                     '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'},
                      'caveat': {'additionalProperties': False,
                                 'properties': {'caveatId': {'$ref': '#/definitions/packet'},
                                                'location': {'$ref': '#/definitions/packet'},
@@ -15237,358 +15340,318 @@ class Service(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 'type': 'object'}},
-     'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
-                                                   'Result': {'$ref': '#/definitions/AddRelationResults'}},
-                                    'type': 'object'},
-                    'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddServiceUnits'},
-                                                'Result': {'$ref': '#/definitions/AddServiceUnitsResults'}},
-                                 'type': 'object'},
-                    'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ServiceCharmRelations'},
-                                                      'Result': {'$ref': '#/definitions/ServiceCharmRelationsResults'}},
-                                       'type': 'object'},
-                    'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ServicesDeploy'},
-                                              'Result': {'$ref': '#/definitions/ErrorResults'}},
-                               'type': 'object'},
-                    'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ServiceDestroy'}},
-                                'type': 'object'},
-                    'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
-                                        'type': 'object'},
-                    'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyServiceUnits'}},
-                                     'type': 'object'},
-                    'Expose': {'properties': {'Params': {'$ref': '#/definitions/ServiceExpose'}},
-                               'type': 'object'},
-                    'Get': {'properties': {'Params': {'$ref': '#/definitions/ServiceGet'},
-                                           'Result': {'$ref': '#/definitions/ServiceGetResults'}},
-                            'type': 'object'},
-                    'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ServiceGet'},
-                                                   'Result': {'$ref': '#/definitions/StringResult'}},
-                                    'type': 'object'},
-                    'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetServiceConstraints'},
-                                                      'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
-                                       'type': 'object'},
-                    'Set': {'properties': {'Params': {'$ref': '#/definitions/ServiceSet'}},
-                            'type': 'object'},
-                    'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ServiceSetCharm'}},
-                                 'type': 'object'},
-                    'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
-                                       'type': 'object'},
-                    'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ServiceMetricCredentials'},
-                                                            'Result': {'$ref': '#/definitions/ErrorResults'}},
-                                             'type': 'object'},
-                    'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ServiceUnexpose'}},
-                                 'type': 'object'},
-                    'Unset': {'properties': {'Params': {'$ref': '#/definitions/ServiceUnset'}},
-                              'type': 'object'},
-                    'Update': {'properties': {'Params': {'$ref': '#/definitions/ServiceUpdate'}},
-                               'type': 'object'}},
-     'type': 'object'}
-    
-
-    @ReturnMapping(AddRelationResults)
-    async def AddRelation(self, endpoints):
-        '''
-        endpoints : typing.Sequence[str]
-        Returns -> typing.Mapping[str, ~Relation]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='AddRelation', Version=3, Params=params)
-        params['Endpoints'] = endpoints
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(AddServiceUnitsResults)
-    async def AddUnits(self, numunits, placement, servicename):
-        '''
-        numunits : int
-        placement : typing.Sequence[~Placement]
-        servicename : str
-        Returns -> typing.Sequence[str]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='AddUnits', Version=3, Params=params)
-        params['NumUnits'] = numunits
-        params['Placement'] = placement
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ServiceCharmRelationsResults)
-    async def CharmRelations(self, servicename):
-        '''
-        servicename : str
-        Returns -> typing.Sequence[str]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='CharmRelations', Version=3, Params=params)
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ErrorResults)
-    async def Deploy(self, services):
-        '''
-        services : typing.Sequence[~ServiceDeploy]
-        Returns -> typing.Sequence[~ErrorResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='Deploy', Version=3, Params=params)
-        params['Services'] = services
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(None)
-    async def Destroy(self, servicename):
-        '''
-        servicename : str
-        Returns -> None
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='Destroy', Version=3, Params=params)
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
-
+     '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(None)
-    async def DestroyRelation(self, endpoints):
+    @ReturnMapping(ErrorResults)
+    async def ClearReboot(self, entities):
         '''
-        endpoints : typing.Sequence[str]
-        Returns -> None
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='DestroyRelation', Version=3, Params=params)
-        params['Endpoints'] = endpoints
+        msg = dict(Type='Reboot', Request='ClearReboot', Version=2, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(None)
-    async def DestroyUnits(self, unitnames):
+    @ReturnMapping(RebootActionResults)
+    async def GetRebootAction(self, entities):
         '''
-        unitnames : typing.Sequence[str]
-        Returns -> None
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~RebootActionResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='DestroyUnits', Version=3, Params=params)
-        params['UnitNames'] = unitnames
+        msg = dict(Type='Reboot', Request='GetRebootAction', Version=2, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(None)
-    async def Expose(self, servicename):
+    @ReturnMapping(ErrorResults)
+    async def RequestReboot(self, entities):
         '''
-        servicename : str
-        Returns -> None
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='Expose', Version=3, Params=params)
-        params['ServiceName'] = servicename
+        msg = dict(Type='Reboot', Request='RequestReboot', Version=2, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(ServiceGetResults)
-    async def Get(self, servicename):
-        '''
-        servicename : str
-        Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
+    @ReturnMapping(NotifyWatchResult)
+    async def WatchForRebootEvent(self):
         '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='Get', Version=3, Params=params)
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
-
 
-    @ReturnMapping(StringResult)
-    async def GetCharmURL(self, servicename):
-        '''
-        servicename : str
         Returns -> typing.Union[_ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='GetCharmURL', Version=3, Params=params)
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
-
+        msg = dict(Type='Reboot', Request='WatchForRebootEvent', Version=2, Params=params)
 
-    @ReturnMapping(GetConstraintsResults)
-    async def GetConstraints(self, servicename):
-        '''
-        servicename : str
-        Returns -> Value
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='GetConstraints', Version=3, Params=params)
-        params['ServiceName'] = servicename
         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'},
+                                                  'MacaroonPath': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False,
+                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
+                                                             'type': 'array'},
+                                                 'data': {'items': {'type': 'integer'},
+                                                          'type': 'array'},
+                                                 'id': {'$ref': '#/definitions/packet'},
+                                                 'location': {'$ref': '#/definitions/packet'},
+                                                 'sig': {'items': {'type': 'integer'},
+                                                         'type': 'array'}},
+                                  'required': ['data',
+                                               'location',
+                                               'id',
+                                               'caveats',
+                                               'sig'],
+                                  'type': 'object'},
+                     'RelationUnitsChange': {'additionalProperties': False,
+                                             'properties': {'Changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
+                                                                        'type': 'object'},
+                                                            'Departed': {'items': {'type': 'string'},
+                                                                         'type': 'array'}},
+                                             'required': ['Changed', 'Departed'],
+                                             'type': 'object'},
+                     'RelationUnitsWatchResult': {'additionalProperties': False,
+                                                  'properties': {'Changes': {'$ref': '#/definitions/RelationUnitsChange'},
+                                                                 'Error': {'$ref': '#/definitions/Error'},
+                                                                 'RelationUnitsWatcherId': {'type': 'string'}},
+                                                  'required': ['RelationUnitsWatcherId',
+                                                               'Changes',
+                                                               'Error'],
+                                                  'type': 'object'},
+                     'UnitSettings': {'additionalProperties': False,
+                                      'properties': {'Version': {'type': 'integer'}},
+                                      'required': ['Version'],
+                                      'type': 'object'},
+                     'caveat': {'additionalProperties': False,
+                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
+                                               'location': {'$ref': '#/definitions/packet'},
+                                               'verificationId': {'$ref': '#/definitions/packet'}},
+                                'required': ['location',
+                                             'caveatId',
+                                             'verificationId'],
+                                'type': 'object'},
+                     'packet': {'additionalProperties': False,
+                                'properties': {'headerLen': {'type': 'integer'},
+                                               'start': {'type': 'integer'},
+                                               'totalLen': {'type': 'integer'}},
+                                'required': ['start', 'totalLen', 'headerLen'],
+                                'type': 'object'}},
+     'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationUnitsWatchResult'}},
+                             'type': 'object'},
+                    'Stop': {'type': 'object'}},
+     'type': 'object'}
+    
 
-    @ReturnMapping(None)
-    async def Set(self, options, servicename):
-        '''
-        options : typing.Mapping[str, str]
-        servicename : str
-        Returns -> None
+    @ReturnMapping(RelationUnitsWatchResult)
+    async def Next(self):
         '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='Set', Version=3, Params=params)
-        params['Options'] = options
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
 
-
-    @ReturnMapping(None)
-    async def SetCharm(self, charmurl, cs_channel, forceseries, forceunits, resourceids, servicename):
-        '''
-        charmurl : str
-        cs_channel : str
-        forceseries : bool
-        forceunits : bool
-        resourceids : typing.Mapping[str, str]
-        servicename : str
-        Returns -> None
+        Returns -> typing.Union[_ForwardRef('RelationUnitsChange'), _ForwardRef('Error'), str]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='SetCharm', Version=3, Params=params)
-        params['charmurl'] = charmurl
-        params['cs-channel'] = cs_channel
-        params['forceseries'] = forceseries
-        params['forceunits'] = forceunits
-        params['resourceids'] = resourceids
-        params['servicename'] = servicename
+        msg = dict(Type='RelationUnitsWatcher', Request='Next', Version=1, Params=params)
+
         reply = await self.rpc(msg)
         return reply
 
 
 
     @ReturnMapping(None)
-    async def SetConstraints(self, constraints, servicename):
+    async def Stop(self):
         '''
-        constraints : Value
-        servicename : str
+
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='SetConstraints', Version=3, Params=params)
-        params['Constraints'] = constraints
-        params['ServiceName'] = servicename
-        reply = await self.rpc(msg)
-        return reply
-
-
+        msg = dict(Type='RelationUnitsWatcher', Request='Stop', Version=1, Params=params)
 
-    @ReturnMapping(ErrorResults)
-    async def SetMetricCredentials(self, creds):
-        '''
-        creds : typing.Sequence[~ServiceMetricCredential]
-        Returns -> typing.Sequence[~ErrorResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Service', Request='SetMetricCredentials', Version=3, Params=params)
-        params['Creds'] = creds
         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 Unexpose(self, servicename):
+    async def ResumeTransactions(self):
         '''
-        servicename : str
+
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='Unexpose', Version=3, Params=params)
-        params['ServiceName'] = servicename
+        msg = dict(Type='Resumer', Request='ResumeTransactions', Version=2, Params=params)
+
         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'},
+                                                  'MacaroonPath': {'type': 'string'}},
+                                   'type': 'object'},
+                     'Macaroon': {'additionalProperties': False,
+                                  'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
+                                                             'type': 'array'},
+                                                 'data': {'items': {'type': 'integer'},
+                                                          'type': 'array'},
+                                                 'id': {'$ref': '#/definitions/packet'},
+                                                 'location': {'$ref': '#/definitions/packet'},
+                                                 'sig': {'items': {'type': 'integer'},
+                                                         'type': 'array'}},
+                                  'required': ['data',
+                                               'location',
+                                               'id',
+                                               'caveats',
+                                               'sig'],
+                                  'type': 'object'},
+                     'NotifyWatchResult': {'additionalProperties': False,
+                                           'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                          'NotifyWatcherId': {'type': 'string'}},
+                                           'required': ['NotifyWatcherId', 'Error'],
+                                           'type': 'object'},
+                     'NotifyWatchResults': {'additionalProperties': False,
+                                            'properties': {'Results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+                                                                       'type': 'array'}},
+                                            'required': ['Results'],
+                                            'type': 'object'},
+                     'RetryStrategy': {'additionalProperties': False,
+                                       'properties': {'JitterRetryTime': {'type': 'boolean'},
+                                                      'MaxRetryTime': {'type': 'integer'},
+                                                      'MinRetryTime': {'type': 'integer'},
+                                                      'RetryTimeFactor': {'type': 'integer'},
+                                                      'ShouldRetry': {'type': 'boolean'}},
+                                       'required': ['ShouldRetry',
+                                                    'MinRetryTime',
+                                                    'MaxRetryTime',
+                                                    'JitterRetryTime',
+                                                    'RetryTimeFactor'],
+                                       'type': 'object'},
+                     'RetryStrategyResult': {'additionalProperties': False,
+                                             'properties': {'Error': {'$ref': '#/definitions/Error'},
+                                                            'Result': {'$ref': '#/definitions/RetryStrategy'}},
+                                             'required': ['Error', 'Result'],
+                                             'type': 'object'},
+                     'RetryStrategyResults': {'additionalProperties': False,
+                                              'properties': {'Results': {'items': {'$ref': '#/definitions/RetryStrategyResult'},
+                                                                         'type': 'array'}},
+                                              'required': ['Results'],
+                                              'type': 'object'},
+                     'caveat': {'additionalProperties': False,
+                                'properties': {'caveatId': {'$ref': '#/definitions/packet'},
+                                               'location': {'$ref': '#/definitions/packet'},
+                                               'verificationId': {'$ref': '#/definitions/packet'}},
+                                'required': ['location',
+                                             'caveatId',
+                                             'verificationId'],
+                                'type': 'object'},
+                     'packet': {'additionalProperties': False,
+                                'properties': {'headerLen': {'type': 'integer'},
+                                               'start': {'type': 'integer'},
+                                               'totalLen': {'type': 'integer'}},
+                                'required': ['start', 'totalLen', 'headerLen'],
+                                '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(None)
-    async def Unset(self, options, servicename):
+    @ReturnMapping(RetryStrategyResults)
+    async def RetryStrategy(self, entities):
         '''
-        options : typing.Sequence[str]
-        servicename : str
-        Returns -> None
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~RetryStrategyResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='Unset', Version=3, Params=params)
-        params['Options'] = options
-        params['ServiceName'] = servicename
+        msg = dict(Type='RetryStrategy', Request='RetryStrategy', Version=1, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(None)
-    async def Update(self, charmurl, constraints, forcecharmurl, forceseries, minunits, servicename, settingsstrings, settingsyaml):
+    @ReturnMapping(NotifyWatchResults)
+    async def WatchRetryStrategy(self, entities):
         '''
-        charmurl : str
-        constraints : Value
-        forcecharmurl : bool
-        forceseries : bool
-        minunits : int
-        servicename : str
-        settingsstrings : typing.Mapping[str, str]
-        settingsyaml : str
-        Returns -> None
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~NotifyWatchResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Service', Request='Update', Version=3, Params=params)
-        params['CharmUrl'] = charmurl
-        params['Constraints'] = constraints
-        params['ForceCharmUrl'] = forcecharmurl
-        params['ForceSeries'] = forceseries
-        params['MinUnits'] = minunits
-        params['ServiceName'] = servicename
-        params['SettingsStrings'] = settingsstrings
-        params['SettingsYAML'] = settingsyaml
+        msg = dict(Type='RetryStrategy', Request='WatchRetryStrategy', Version=1, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
-class ServiceScaler(Type):
-    name = 'ServiceScaler'
+class SSHClientFacade(Type):
+    name = 'SSHClient'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
                                   'properties': {'Entities': {'items': {'$ref': '#/definitions/Entity'},
@@ -15609,15 +15672,6 @@ class ServiceScaler(Type):
                                    'properties': {'Macaroon': {'$ref': '#/definitions/Macaroon'},
                                                   'MacaroonPath': {'type': 'string'}},
                                    'type': 'object'},
-                     'ErrorResult': {'additionalProperties': False,
-                                     'properties': {'Error': {'$ref': '#/definitions/Error'}},
-                                     'required': ['Error'],
-                                     'type': 'object'},
-                     'ErrorResults': {'additionalProperties': False,
-                                      'properties': {'Results': {'items': {'$ref': '#/definitions/ErrorResult'},
-                                                                 'type': 'array'}},
-                                      'required': ['Results'],
-                                      'type': 'object'},
                      'Macaroon': {'additionalProperties': False,
                                   'properties': {'caveats': {'items': {'$ref': '#/definitions/caveat'},
                                                              'type': 'array'},
@@ -15633,15 +15687,29 @@ class ServiceScaler(Type):
                                                'caveats',
                                                'sig'],
                                   'type': 'object'},
-                     'StringsWatchResult': {'additionalProperties': False,
-                                            'properties': {'Changes': {'items': {'type': 'string'},
-                                                                       'type': 'array'},
-                                                           'Error': {'$ref': '#/definitions/Error'},
-                                                           'StringsWatcherId': {'type': 'string'}},
-                                            'required': ['StringsWatcherId',
-                                                         'Changes',
-                                                         'Error'],
-                                            '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'},
                      'caveat': {'additionalProperties': False,
                                 'properties': {'caveatId': {'$ref': '#/definitions/packet'},
                                                'location': {'$ref': '#/definitions/packet'},
@@ -15656,44 +15724,80 @@ class ServiceScaler(Type):
                                                'totalLen': {'type': 'integer'}},
                                 'required': ['start', 'totalLen', 'headerLen'],
                                 'type': 'object'}},
-     'properties': {'Rescale': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                               'Result': {'$ref': '#/definitions/ErrorResults'}},
-                                'type': 'object'},
-                    'Watch': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
-                              '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(ErrorResults)
-    async def Rescale(self, entities):
+    @ReturnMapping(SSHAddressResults)
+    async def PrivateAddress(self, entities):
         '''
         entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ErrorResult]
+        Returns -> typing.Sequence[~SSHAddressResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='ServiceScaler', Request='Rescale', Version=1, Params=params)
+        msg = dict(Type='SSHClient', Request='PrivateAddress', Version=1, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringsWatchResult)
-    async def Watch(self):
+    @ReturnMapping(SSHProxyResult)
+    async def Proxy(self):
         '''
 
-        Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error')]
+        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[~Entity]
+        Returns -> typing.Sequence[~SSHAddressResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='ServiceScaler', Request='Watch', Version=1, Params=params)
+        msg = dict(Type='SSHClient', Request='PublicAddress', Version=1, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
 
+
+
+    @ReturnMapping(SSHPublicKeysResults)
+    async def PublicKeys(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~SSHPublicKeysResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='SSHClient', Request='PublicKeys', Version=1, Params=params)
+        params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
-class Singular(Type):
+class SingularFacade(Type):
     name = 'Singular'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -15804,7 +15908,7 @@ class Singular(Type):
         return reply
 
 
-class Spaces(Type):
+class SpacesFacade(Type):
     name = 'Spaces'
     version = 2
     schema =     {'definitions': {'CreateSpaceParams': {'additionalProperties': False,
@@ -15938,12 +16042,14 @@ class Spaces(Type):
         return reply
 
 
-class StatusHistory(Type):
+class StatusHistoryFacade(Type):
     name = 'StatusHistory'
     version = 2
     schema =     {'definitions': {'StatusHistoryPruneArgs': {'additionalProperties': False,
-                                                'properties': {'MaxLogsPerEntity': {'type': 'integer'}},
-                                                'required': ['MaxLogsPerEntity'],
+                                                'properties': {'MaxHistoryMB': {'type': 'integer'},
+                                                               'MaxHistoryTime': {'type': 'integer'}},
+                                                'required': ['MaxHistoryTime',
+                                                             'MaxHistoryMB'],
                                                 'type': 'object'}},
      'properties': {'Prune': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryPruneArgs'}},
                               'type': 'object'}},
@@ -15951,20 +16057,22 @@ class StatusHistory(Type):
     
 
     @ReturnMapping(None)
-    async def Prune(self, maxlogsperentity):
+    async def Prune(self, maxhistorymb, maxhistorytime):
         '''
-        maxlogsperentity : int
+        maxhistorymb : int
+        maxhistorytime : int
         Returns -> None
         '''
         # map input types to rpc msg
         params = dict()
         msg = dict(Type='StatusHistory', Request='Prune', Version=2, Params=params)
-        params['MaxLogsPerEntity'] = maxlogsperentity
+        params['MaxHistoryMB'] = maxhistorymb
+        params['MaxHistoryTime'] = maxhistorytime
         reply = await self.rpc(msg)
         return reply
 
 
-class Storage(Type):
+class StorageFacade(Type):
     name = 'Storage'
     version = 2
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -16337,7 +16445,7 @@ class Storage(Type):
         return reply
 
 
-class StorageProvisioner(Type):
+class StorageProvisionerFacade(Type):
     name = 'StorageProvisioner'
     version = 2
     schema =     {'definitions': {'BlockDevice': {'additionalProperties': False,
@@ -17234,7 +17342,7 @@ class StorageProvisioner(Type):
         return reply
 
 
-class StringsWatcher(Type):
+class StringsWatcherFacade(Type):
     name = 'StringsWatcher'
     version = 1
     schema =     {'definitions': {'Error': {'additionalProperties': False,
@@ -17320,7 +17428,7 @@ class StringsWatcher(Type):
         return reply
 
 
-class Subnets(Type):
+class SubnetsFacade(Type):
     name = 'Subnets'
     version = 2
     schema =     {'definitions': {'AddSubnetParams': {'additionalProperties': False,
@@ -17507,7 +17615,7 @@ class Subnets(Type):
         return reply
 
 
-class Undertaker(Type):
+class UndertakerFacade(Type):
     name = 'Undertaker'
     version = 1
     schema =     {'definitions': {'EntityStatusArgs': {'additionalProperties': False,
@@ -17729,7 +17837,7 @@ class Undertaker(Type):
         return reply
 
 
-class UnitAssigner(Type):
+class UnitAssignerFacade(Type):
     name = 'UnitAssigner'
     version = 1
     schema =     {'definitions': {'Entities': {'additionalProperties': False,
@@ -17870,9 +17978,9 @@ class UnitAssigner(Type):
         return reply
 
 
-class Uniter(Type):
+class UniterFacade(Type):
     name = 'Uniter'
-    version = 3
+    version = 4
     schema =     {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
                                             'properties': {'Servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
                                                                                  'type': 'array'},
@@ -17927,6 +18035,20 @@ class Uniter(Type):
                                                 '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',
+                                                              'Error'],
+                                                 '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'}},
@@ -17964,9 +18086,9 @@ class Uniter(Type):
                                                'required': ['Results'],
                                                'type': 'object'},
                      'Endpoint': {'additionalProperties': False,
-                                  'properties': {'Relation': {'$ref': '#/definitions/Relation'},
-                                                 'ServiceName': {'type': 'string'}},
-                                  'required': ['ServiceName', 'Relation'],
+                                  'properties': {'ApplicationName': {'type': 'string'},
+                                                 'Relation': {'$ref': '#/definitions/Relation'}},
+                                  'required': ['ApplicationName', 'Relation'],
                                   'type': 'object'},
                      'Entities': {'additionalProperties': False,
                                   'properties': {'Entities': {'items': {'$ref': '#/definitions/Entity'},
@@ -18110,10 +18232,10 @@ class Uniter(Type):
                                                            'required': ['Params'],
                                                            'type': 'object'},
                      'MergeLeadershipSettingsParam': {'additionalProperties': False,
-                                                      'properties': {'ServiceTag': {'type': 'string'},
+                                                      'properties': {'ApplicationTag': {'type': 'string'},
                                                                      'Settings': {'patternProperties': {'.*': {'type': 'string'}},
                                                                                   'type': 'object'}},
-                                                      'required': ['ServiceTag',
+                                                      'required': ['ApplicationTag',
                                                                    'Settings'],
                                                       'type': 'object'},
                      'MeterStatusResult': {'additionalProperties': False,
@@ -18325,20 +18447,6 @@ class Uniter(Type):
                                                                         'type': 'array'}},
                                              'required': ['Results'],
                                              'type': 'object'},
-                     'ServiceStatusResult': {'additionalProperties': False,
-                                             'properties': {'Error': {'$ref': '#/definitions/Error'},
-                                                            'Service': {'$ref': '#/definitions/StatusResult'},
-                                                            'Units': {'patternProperties': {'.*': {'$ref': '#/definitions/StatusResult'}},
-                                                                      'type': 'object'}},
-                                             'required': ['Service',
-                                                          'Units',
-                                                          'Error'],
-                                             'type': 'object'},
-                     'ServiceStatusResults': {'additionalProperties': False,
-                                              'properties': {'Results': {'items': {'$ref': '#/definitions/ServiceStatusResult'},
-                                                                         'type': 'array'}},
-                                              'required': ['Results'],
-                                              'type': 'object'},
                      'SetStatus': {'additionalProperties': False,
                                    'properties': {'Entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
                                                                'type': 'array'}},
@@ -18541,6 +18649,12 @@ class Uniter(Type):
                     'AllMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
                                                        'Result': {'$ref': '#/definitions/MachinePortsResults'}},
                                         'type': 'object'},
+                    'ApplicationOwner': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+                                                        'Result': {'$ref': '#/definitions/StringResults'}},
+                                         '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'},
@@ -18653,21 +18767,15 @@ class Uniter(Type):
                     'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
                                                 'Result': {'$ref': '#/definitions/ResolvedModeResults'}},
                                  'type': 'object'},
-                    'ServiceOwner': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                    'Result': {'$ref': '#/definitions/StringResults'}},
-                                     'type': 'object'},
-                    'ServiceStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                     'Result': {'$ref': '#/definitions/ServiceStatusResults'}},
-                                      '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'},
-                    'SetServiceStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
-                                                        'Result': {'$ref': '#/definitions/ErrorResults'}},
-                                         'type': 'object'},
                     'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
                                                  'Result': {'$ref': '#/definitions/ErrorResults'}},
                                   'type': 'object'},
@@ -18697,6 +18805,9 @@ class Uniter(Type):
                     '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'},
@@ -18711,9 +18822,6 @@ class Uniter(Type):
                     'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
                                                           'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}},
                                            'type': 'object'},
-                    'WatchServiceRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
-                                                             'Result': {'$ref': '#/definitions/StringsWatchResults'}},
-                                              'type': 'object'},
                     'WatchStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'},
                                                                'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
                                                 'type': 'object'},
@@ -18734,7 +18842,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='APIAddresses', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='APIAddresses', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -18749,7 +18857,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='APIHostPorts', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='APIHostPorts', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -18764,7 +18872,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Actions', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Actions', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18779,7 +18887,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='AddMetricBatches', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='AddMetricBatches', Version=4, Params=params)
         params['Batches'] = batches
         reply = await self.rpc(msg)
         return reply
@@ -18794,7 +18902,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='AddUnitStorage', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='AddUnitStorage', Version=4, Params=params)
         params['storages'] = storages
         reply = await self.rpc(msg)
         return reply
@@ -18809,7 +18917,37 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='AllMachinePorts', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='AllMachinePorts', Version=4, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringResults)
+    async def ApplicationOwner(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~StringResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Uniter', Request='ApplicationOwner', Version=4, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(ApplicationStatusResults)
+    async def ApplicationStatus(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~ApplicationStatusResult]
+        '''
+        # map input types to rpc msg
+        params = dict()
+        msg = dict(Type='Uniter', Request='ApplicationStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18824,7 +18962,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='AssignedMachine', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='AssignedMachine', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18839,7 +18977,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='AvailabilityZone', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='AvailabilityZone', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18854,7 +18992,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='BeginActions', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='BeginActions', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18869,7 +19007,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='CACert', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='CACert', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -18884,7 +19022,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='CharmArchiveSha256', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='CharmArchiveSha256', Version=4, Params=params)
         params['URLs'] = urls
         reply = await self.rpc(msg)
         return reply
@@ -18899,7 +19037,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='CharmModifiedVersion', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='CharmModifiedVersion', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18914,7 +19052,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='CharmURL', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='CharmURL', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18929,7 +19067,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ClearResolved', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ClearResolved', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18944,7 +19082,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ClosePorts', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ClosePorts', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18959,7 +19097,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ConfigSettings', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ConfigSettings', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -18974,7 +19112,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='CurrentModel', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='CurrentModel', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -18989,7 +19127,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Destroy', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Destroy', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19004,7 +19142,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='DestroyAllSubordinates', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='DestroyAllSubordinates', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19019,7 +19157,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='DestroyUnitStorageAttachments', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='DestroyUnitStorageAttachments', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19034,7 +19172,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='EnsureDead', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='EnsureDead', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19049,7 +19187,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='EnterScope', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='EnterScope', Version=4, Params=params)
         params['RelationUnits'] = relationunits
         reply = await self.rpc(msg)
         return reply
@@ -19064,7 +19202,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='FinishActions', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='FinishActions', Version=4, Params=params)
         params['results'] = results
         reply = await self.rpc(msg)
         return reply
@@ -19079,7 +19217,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='GetMeterStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='GetMeterStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19094,7 +19232,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='GetPrincipal', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='GetPrincipal', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19109,7 +19247,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='HasSubordinates', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='HasSubordinates', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19124,7 +19262,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='JoinedRelations', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='JoinedRelations', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19139,7 +19277,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='LeaveScope', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='LeaveScope', Version=4, Params=params)
         params['RelationUnits'] = relationunits
         reply = await self.rpc(msg)
         return reply
@@ -19154,7 +19292,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Life', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Life', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19169,7 +19307,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Merge', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Merge', Version=4, Params=params)
         params['Params'] = params
         reply = await self.rpc(msg)
         return reply
@@ -19184,7 +19322,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ModelConfig', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ModelConfig', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -19199,7 +19337,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ModelUUID', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ModelUUID', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -19214,7 +19352,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='NetworkConfig', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='NetworkConfig', Version=4, Params=params)
         params['Args'] = args
         reply = await self.rpc(msg)
         return reply
@@ -19229,7 +19367,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='OpenPorts', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='OpenPorts', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19244,7 +19382,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='PrivateAddress', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='PrivateAddress', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19259,7 +19397,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ProviderType', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ProviderType', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -19274,7 +19412,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='PublicAddress', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='PublicAddress', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19289,7 +19427,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Read', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Read', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19304,7 +19442,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ReadRemoteSettings', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ReadRemoteSettings', Version=4, Params=params)
         params['RelationUnitPairs'] = relationunitpairs
         reply = await self.rpc(msg)
         return reply
@@ -19319,7 +19457,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='ReadSettings', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='ReadSettings', Version=4, Params=params)
         params['RelationUnits'] = relationunits
         reply = await self.rpc(msg)
         return reply
@@ -19334,7 +19472,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Relation', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Relation', Version=4, Params=params)
         params['RelationUnits'] = relationunits
         reply = await self.rpc(msg)
         return reply
@@ -19349,7 +19487,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='RelationById', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='RelationById', Version=4, Params=params)
         params['RelationIds'] = relationids
         reply = await self.rpc(msg)
         return reply
@@ -19364,7 +19502,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='RemoveStorageAttachments', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='RemoveStorageAttachments', Version=4, Params=params)
         params['ids'] = ids
         reply = await self.rpc(msg)
         return reply
@@ -19379,7 +19517,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='RequestReboot', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='RequestReboot', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19394,37 +19532,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Resolved', Version=3, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(StringResults)
-    async def ServiceOwner(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~StringResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Uniter', Request='ServiceOwner', Version=3, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
-    @ReturnMapping(ServiceStatusResults)
-    async def ServiceStatus(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~ServiceStatusResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Uniter', Request='ServiceStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Resolved', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19439,7 +19547,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='SetAgentStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='SetAgentStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19447,14 +19555,14 @@ class Uniter(Type):
 
 
     @ReturnMapping(ErrorResults)
-    async def SetCharmURL(self, entities):
+    async def SetApplicationStatus(self, entities):
         '''
-        entities : typing.Sequence[~EntityCharmURL]
+        entities : typing.Sequence[~EntityStatusArgs]
         Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='SetCharmURL', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='SetApplicationStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19462,14 +19570,14 @@ class Uniter(Type):
 
 
     @ReturnMapping(ErrorResults)
-    async def SetServiceStatus(self, entities):
+    async def SetCharmURL(self, entities):
         '''
-        entities : typing.Sequence[~EntityStatusArgs]
+        entities : typing.Sequence[~EntityCharmURL]
         Returns -> typing.Sequence[~ErrorResult]
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='SetServiceStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='SetCharmURL', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19484,7 +19592,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='SetStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='SetStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19499,7 +19607,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='SetUnitStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='SetUnitStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19514,7 +19622,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='StorageAttachmentLife', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='StorageAttachmentLife', Version=4, Params=params)
         params['ids'] = ids
         reply = await self.rpc(msg)
         return reply
@@ -19529,7 +19637,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='StorageAttachments', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='StorageAttachments', Version=4, Params=params)
         params['ids'] = ids
         reply = await self.rpc(msg)
         return reply
@@ -19544,7 +19652,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='UnitStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='UnitStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19559,7 +19667,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='UnitStorageAttachments', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='UnitStorageAttachments', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19574,7 +19682,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='UpdateSettings', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='UpdateSettings', Version=4, Params=params)
         params['RelationUnits'] = relationunits
         reply = await self.rpc(msg)
         return reply
@@ -19589,7 +19697,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='Watch', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='Watch', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19604,7 +19712,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchAPIHostPorts', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchAPIHostPorts', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -19619,7 +19727,22 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchActionNotifications', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchActionNotifications', Version=4, Params=params)
+        params['Entities'] = entities
+        reply = await self.rpc(msg)
+        return reply
+
+
+
+    @ReturnMapping(StringsWatchResults)
+    async def WatchApplicationRelations(self, entities):
+        '''
+        entities : typing.Sequence[~Entity]
+        Returns -> typing.Sequence[~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
@@ -19634,7 +19757,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchConfigSettings', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchConfigSettings', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19649,7 +19772,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchForModelConfigChanges', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchForModelConfigChanges', Version=4, Params=params)
 
         reply = await self.rpc(msg)
         return reply
@@ -19664,7 +19787,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchLeadershipSettings', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchLeadershipSettings', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19679,7 +19802,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchMeterStatus', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchMeterStatus', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19694,28 +19817,13 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchRelationUnits', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchRelationUnits', Version=4, Params=params)
         params['RelationUnits'] = relationunits
         reply = await self.rpc(msg)
         return reply
 
 
 
-    @ReturnMapping(StringsWatchResults)
-    async def WatchServiceRelations(self, entities):
-        '''
-        entities : typing.Sequence[~Entity]
-        Returns -> typing.Sequence[~StringsWatchResult]
-        '''
-        # map input types to rpc msg
-        params = dict()
-        msg = dict(Type='Uniter', Request='WatchServiceRelations', Version=3, Params=params)
-        params['Entities'] = entities
-        reply = await self.rpc(msg)
-        return reply
-
-
-
     @ReturnMapping(NotifyWatchResults)
     async def WatchStorageAttachments(self, ids):
         '''
@@ -19724,7 +19832,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchStorageAttachments', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchStorageAttachments', Version=4, Params=params)
         params['ids'] = ids
         reply = await self.rpc(msg)
         return reply
@@ -19739,7 +19847,7 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchUnitAddresses', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchUnitAddresses', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
@@ -19754,13 +19862,13 @@ class Uniter(Type):
         '''
         # map input types to rpc msg
         params = dict()
-        msg = dict(Type='Uniter', Request='WatchUnitStorageAttachments', Version=3, Params=params)
+        msg = dict(Type='Uniter', Request='WatchUnitStorageAttachments', Version=4, Params=params)
         params['Entities'] = entities
         reply = await self.rpc(msg)
         return reply
 
 
-class Upgrader(Type):
+class UpgraderFacade(Type):
     name = 'Upgrader'
     version = 1
     schema =     {'definitions': {'Binary': {'additionalProperties': False,
@@ -19967,7 +20075,7 @@ class Upgrader(Type):
         return reply
 
 
-class UserManager(Type):
+class UserManagerFacade(Type):
     name = 'UserManager'
     version = 1
     schema =     {'definitions': {'AddUser': {'additionalProperties': False,
@@ -20216,7 +20324,7 @@ class UserManager(Type):
         return reply
 
 
-class VolumeAttachmentsWatcher(Type):
+class VolumeAttachmentsWatcherFacade(Type):
     name = 'VolumeAttachmentsWatcher'
     version = 2
     schema =     {'definitions': {'Error': {'additionalProperties': False,
index 1a9e8e9..56f9e18 100644 (file)
@@ -28,7 +28,13 @@ class Connection:
         client = await Connection.connect_current()
 
     """
-    def __init__(self):
+    def __init__(self, endpoint, uuid, username, password, cacert=None):
+        self.endpoint = endpoint
+        self.uuid = uuid
+        self.username = username
+        self.password = password
+        self.cacert = cacert
+
         self.__request_id__ = 0
         self.addr = None
         self.ws = None
@@ -70,14 +76,28 @@ class Connection:
             raise RuntimeError(result)
         return result
 
+    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,
+        )
+
     @classmethod
     async def connect(cls, endpoint, uuid, username, password, cacert=None):
         url = "wss://{}/model/{}/api".format(endpoint, uuid)
-        client = cls()
+        client = cls(endpoint, uuid, username, password, cacert)
         await client.open(url, cacert)
         server_info = await client.login(username, password)
         client.build_facades(server_info['facades'])
         log.info("Driver connected to juju %s", endpoint)
+
         return client
 
     @classmethod
index 8e3c7eb..41166c0 100644 (file)
@@ -395,7 +395,7 @@ def buildFacade(schema):
                                           version=schema.version,
                                           schema=schema))
     source = """
-class {name}(Type):
+class {name}Facade(Type):
     name = '{name}'
     version = {version}
     schema = {schema}
@@ -428,7 +428,11 @@ class Type:
         for k, v in (data or {}).items():
             d[cls._toPy.get(k, k)] = v
 
-        return cls(**d)
+        try:
+            return cls(**d)
+        except TypeError:
+            print(cls)
+            raise
 
     def serialize(self):
         d = {}
diff --git a/juju/client/schemas-20160608.json b/juju/client/schemas-20160608.json
new file mode 100644 (file)
index 0000000..2ec58a4
--- /dev/null
@@ -0,0 +1,25305 @@
+[
+  {
+    "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": {
+            "ActionSpecs": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ActionSpec"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ActionSpecs"
+          ]
+        },
+        "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": {
+            "ApplicationTag": {
+              "type": "string"
+            },
+            "actions": {
+              "$ref": "#/definitions/Actions"
+            },
+            "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"
+            },
+            "MacaroonPath": {
+              "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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",
+            "Machines",
+            "Applications",
+            "Units"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Addresser",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CanDeallocateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/BoolResult"
+            }
+          }
+        },
+        "CleanupIPAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ErrorResult"
+            }
+          }
+        },
+        "WatchIPAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/EntitiesWatchResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "BoolResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "EntitiesWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "EntityWatcherId": {
+              "type": "string"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "EntityWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "Error": {
+          "type": "object",
+          "properties": {
+            "Code": {
+              "type": "string"
+            },
+            "Info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "Message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Message",
+            "Code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "Macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Agent",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "ClearReboot": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AgentGetEntitiesResult": {
+          "type": "object",
+          "properties": {
+            "ContainerType": {
+              "type": "string"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Jobs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Life",
+            "Jobs",
+            "ContainerType",
+            "Error"
+          ]
+        },
+        "AgentGetEntitiesResults": {
+          "type": "object",
+          "properties": {
+            "Entities": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/AgentGetEntitiesResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Entities"
+          ]
+        },
+        "Entities": {
+          "type": "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Config"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "StateServingInfo": {
+          "type": "object",
+          "properties": {
+            "APIPort": {
+              "type": "integer"
+            },
+            "CAPrivateKey": {
+              "type": "string"
+            },
+            "Cert": {
+              "type": "string"
+            },
+            "PrivateKey": {
+              "type": "string"
+            },
+            "SharedSecret": {
+              "type": "string"
+            },
+            "StatePort": {
+              "type": "integer"
+            },
+            "SystemIdentity": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "APIPort",
+            "StatePort",
+            "Cert",
+            "PrivateKey",
+            "CAPrivateKey",
+            "SharedSecret",
+            "SystemIdentity"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+                }
+              }
+            },
+            "EntityTag": {
+              "type": "string"
+            },
+            "Error": {
+              "$ref": "#/definitions/ErrorResult"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "EntityTag",
+            "Annotations",
+            "Error"
+          ]
+        },
+        "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"
+                }
+              }
+            },
+            "EntityTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "EntityTag",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Application",
+    "Version": 1,
+    "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": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "NumUnits": {
+              "type": "integer"
+            },
+            "Placement": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Placement"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "NumUnits",
+            "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/Relation"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Endpoints"
+          ]
+        },
+        "ApplicationCharmRelations": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName"
+          ]
+        },
+        "ApplicationCharmRelationsResults": {
+          "type": "object",
+          "properties": {
+            "CharmRelations": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CharmRelations"
+          ]
+        },
+        "ApplicationDeploy": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Channel": {
+              "type": "string"
+            },
+            "CharmUrl": {
+              "type": "string"
+            },
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "ConfigYAML": {
+              "type": "string"
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "EndpointBindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "NumUnits": {
+              "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": [
+            "ApplicationName",
+            "Series",
+            "CharmUrl",
+            "Channel",
+            "NumUnits",
+            "Config",
+            "ConfigYAML",
+            "Constraints",
+            "Placement",
+            "Storage",
+            "EndpointBindings",
+            "Resources"
+          ]
+        },
+        "ApplicationDestroy": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName"
+          ]
+        },
+        "ApplicationExpose": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName"
+          ]
+        },
+        "ApplicationGet": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName"
+          ]
+        },
+        "ApplicationGetResults": {
+          "type": "object",
+          "properties": {
+            "Application": {
+              "type": "string"
+            },
+            "Charm": {
+              "type": "string"
+            },
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Application",
+            "Charm",
+            "Config",
+            "Constraints"
+          ]
+        },
+        "ApplicationMetricCredential": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "MetricCredentials": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "MetricCredentials"
+          ]
+        },
+        "ApplicationMetricCredentials": {
+          "type": "object",
+          "properties": {
+            "Creds": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ApplicationMetricCredential"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Creds"
+          ]
+        },
+        "ApplicationSet": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Options": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "Options"
+          ]
+        },
+        "ApplicationSetCharm": {
+          "type": "object",
+          "properties": {
+            "applicationname": {
+              "type": "string"
+            },
+            "charmurl": {
+              "type": "string"
+            },
+            "cs-channel": {
+              "type": "string"
+            },
+            "forceseries": {
+              "type": "boolean"
+            },
+            "forceunits": {
+              "type": "boolean"
+            },
+            "resourceids": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "applicationname",
+            "charmurl",
+            "cs-channel",
+            "forceunits",
+            "forceseries",
+            "resourceids"
+          ]
+        },
+        "ApplicationUnexpose": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName"
+          ]
+        },
+        "ApplicationUnset": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Options": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "Options"
+          ]
+        },
+        "ApplicationUpdate": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "CharmUrl": {
+              "type": "string"
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "ForceCharmUrl": {
+              "type": "boolean"
+            },
+            "ForceSeries": {
+              "type": "boolean"
+            },
+            "MinUnits": {
+              "type": "integer"
+            },
+            "SettingsStrings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "SettingsYAML": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "CharmUrl",
+            "ForceCharmUrl",
+            "ForceSeries",
+            "MinUnits",
+            "SettingsStrings",
+            "SettingsYAML",
+            "Constraints"
+          ]
+        },
+        "ApplicationsDeploy": {
+          "type": "object",
+          "properties": {
+            "Applications": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ApplicationDeploy"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Applications"
+          ]
+        },
+        "Constraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "DestroyApplicationUnits": {
+          "type": "object",
+          "properties": {
+            "UnitNames": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UnitNames"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "GetApplicationConstraints": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName"
+          ]
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Constraints"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "Placement": {
+          "type": "object",
+          "properties": {
+            "Directive": {
+              "type": "string"
+            },
+            "Scope": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Scope",
+            "Directive"
+          ]
+        },
+        "Relation": {
+          "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"
+          ]
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "Constraints"
+          ]
+        },
+        "StringResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "Value": {
+          "type": "object",
+          "properties": {
+            "arch": {
+              "type": "string"
+            },
+            "container": {
+              "type": "string"
+            },
+            "cpu-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
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "StringsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "CACert": {
+              "type": "string"
+            },
+            "CAPrivateKey": {
+              "type": "string"
+            },
+            "Checksum": {
+              "type": "string"
+            },
+            "ChecksumFormat": {
+              "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",
+            "ChecksumFormat",
+            "Size",
+            "Stored",
+            "Started",
+            "Finished",
+            "Notes",
+            "Model",
+            "Machine",
+            "Hostname",
+            "Version",
+            "Series",
+            "CACert",
+            "CAPrivateKey"
+          ]
+        },
+        "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": {
+            "BackupId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "BackupId"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Charms",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CharmInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/CharmInfo"
+            }
+          }
+        },
+        "IsMetered": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CharmInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/IsMeteredResult"
+            }
+          }
+        },
+        "List": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CharmsList"
+            },
+            "Result": {
+              "$ref": "#/definitions/CharmsListResult"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "CharmURL": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CharmURL"
+          ]
+        },
+        "CharmsList": {
+          "type": "object",
+          "properties": {
+            "Names": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Names"
+          ]
+        },
+        "CharmsListResult": {
+          "type": "object",
+          "properties": {
+            "CharmURLs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CharmURLs"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          }
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/CharmInfo"
+            },
+            "Result": {
+              "$ref": "#/definitions/CharmInfo"
+            }
+          }
+        },
+        "DestroyMachines": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyMachines"
+            }
+          }
+        },
+        "DestroyModel": {
+          "type": "object"
+        },
+        "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/GetBundleChangesParams"
+            },
+            "Result": {
+              "$ref": "#/definitions/GetBundleChangesResults"
+            }
+          }
+        },
+        "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"
+            },
+            "CharmStoreMacaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "URL": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "URL",
+            "Channel",
+            "CharmStoreMacaroon"
+          ]
+        },
+        "AddMachineParams": {
+          "type": "object",
+          "properties": {
+            "Addrs": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Address"
+              }
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "ContainerType": {
+              "type": "string"
+            },
+            "Disks": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Constraints"
+              }
+            },
+            "HardwareCharacteristics": {
+              "$ref": "#/definitions/HardwareCharacteristics"
+            },
+            "InstanceId": {
+              "type": "string"
+            },
+            "Jobs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Nonce": {
+              "type": "string"
+            },
+            "ParentId": {
+              "type": "string"
+            },
+            "Placement": {
+              "$ref": "#/definitions/Placement"
+            },
+            "Series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Series",
+            "Constraints",
+            "Jobs",
+            "Disks",
+            "Placement",
+            "ParentId",
+            "ContainerType",
+            "InstanceId",
+            "Nonce",
+            "HardwareCharacteristics",
+            "Addrs"
+          ]
+        },
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "MachineParams": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/AddMachineParams"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineParams"
+          ]
+        },
+        "AddMachinesResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Machine": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Machine",
+            "Error"
+          ]
+        },
+        "AddMachinesResults": {
+          "type": "object",
+          "properties": {
+            "Machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/AddMachinesResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Machines"
+          ]
+        },
+        "Address": {
+          "type": "object",
+          "properties": {
+            "Scope": {
+              "type": "string"
+            },
+            "SpaceName": {
+              "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": {
+            "AllWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "AllWatcherId"
+          ]
+        },
+        "ApplicationStatus": {
+          "type": "object",
+          "properties": {
+            "CanUpgradeTo": {
+              "type": "string"
+            },
+            "Charm": {
+              "type": "string"
+            },
+            "Err": {
+              "type": "object",
+              "additionalProperties": true
+            },
+            "Exposed": {
+              "type": "boolean"
+            },
+            "Life": {
+              "type": "string"
+            },
+            "MeterStatuses": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MeterStatus"
+                }
+              }
+            },
+            "Relations": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "array",
+                  "items": {
+                    "type": "string"
+                  }
+                }
+              }
+            },
+            "Status": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "SubordinateTo": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Units": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/UnitStatus"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Err",
+            "Charm",
+            "Exposed",
+            "Life",
+            "Relations",
+            "CanUpgradeTo",
+            "SubordinateTo",
+            "Units",
+            "MeterStatuses",
+            "Status"
+          ]
+        },
+        "Binary": {
+          "type": "object",
+          "properties": {
+            "Arch": {
+              "type": "string"
+            },
+            "Number": {
+              "$ref": "#/definitions/Number"
+            },
+            "Series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Number",
+            "Series",
+            "Arch"
+          ]
+        },
+        "BundleChangesChange": {
+          "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"
+          ]
+        },
+        "CharmInfo": {
+          "type": "object",
+          "properties": {
+            "CharmURL": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CharmURL"
+          ]
+        },
+        "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"
+            },
+            "MachineNames": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineNames",
+            "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",
+            "Err"
+          ]
+        },
+        "EndpointStatus": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Name": {
+              "type": "string"
+            },
+            "Role": {
+              "type": "string"
+            },
+            "Subordinate": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "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",
+            "Data",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "FindToolsParams": {
+          "type": "object",
+          "properties": {
+            "Arch": {
+              "type": "string"
+            },
+            "MajorVersion": {
+              "type": "integer"
+            },
+            "MinorVersion": {
+              "type": "integer"
+            },
+            "Number": {
+              "$ref": "#/definitions/Number"
+            },
+            "Series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Number",
+            "MajorVersion",
+            "MinorVersion",
+            "Arch",
+            "Series"
+          ]
+        },
+        "FindToolsResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "List": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Tools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "List",
+            "Error"
+          ]
+        },
+        "FullStatus": {
+          "type": "object",
+          "properties": {
+            "Applications": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/ApplicationStatus"
+                }
+              }
+            },
+            "AvailableVersion": {
+              "type": "string"
+            },
+            "Machines": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "ModelName": {
+              "type": "string"
+            },
+            "Relations": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationStatus"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ModelName",
+            "AvailableVersion",
+            "Machines",
+            "Applications",
+            "Relations"
+          ]
+        },
+        "GetBundleChangesParams": {
+          "type": "object",
+          "properties": {
+            "yaml": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "yaml"
+          ]
+        },
+        "GetBundleChangesResults": {
+          "type": "object",
+          "properties": {
+            "changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BundleChangesChange"
+              }
+            },
+            "errors": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "GetConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Constraints"
+          ]
+        },
+        "HardwareCharacteristics": {
+          "type": "object",
+          "properties": {
+            "Arch": {
+              "type": "string"
+            },
+            "AvailabilityZone": {
+              "type": "string"
+            },
+            "CpuCores": {
+              "type": "integer"
+            },
+            "CpuPower": {
+              "type": "integer"
+            },
+            "Mem": {
+              "type": "integer"
+            },
+            "RootDisk": {
+              "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachineStatus": {
+          "type": "object",
+          "properties": {
+            "AgentStatus": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "Containers": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/MachineStatus"
+                }
+              }
+            },
+            "DNSName": {
+              "type": "string"
+            },
+            "Hardware": {
+              "type": "string"
+            },
+            "HasVote": {
+              "type": "boolean"
+            },
+            "Id": {
+              "type": "string"
+            },
+            "InstanceId": {
+              "type": "string"
+            },
+            "InstanceStatus": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "Jobs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Series": {
+              "type": "string"
+            },
+            "WantsVote": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "AgentStatus",
+            "InstanceStatus",
+            "DNSName",
+            "InstanceId",
+            "Series",
+            "Id",
+            "Containers",
+            "Hardware",
+            "Jobs",
+            "HasVote",
+            "WantsVote"
+          ]
+        },
+        "MeterStatus": {
+          "type": "object",
+          "properties": {
+            "Color": {
+              "type": "string"
+            },
+            "Message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Color",
+            "Message"
+          ]
+        },
+        "ModelConfigResults": {
+          "type": "object",
+          "properties": {
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Config"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "Cloud": {
+              "type": "string"
+            },
+            "DefaultSeries": {
+              "type": "string"
+            },
+            "Life": {
+              "type": "string"
+            },
+            "Name": {
+              "type": "string"
+            },
+            "OwnerTag": {
+              "type": "string"
+            },
+            "ProviderType": {
+              "type": "string"
+            },
+            "ServerUUID": {
+              "type": "string"
+            },
+            "Status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "UUID": {
+              "type": "string"
+            },
+            "Users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Name",
+            "UUID",
+            "ServerUUID",
+            "ProviderType",
+            "DefaultSeries",
+            "Cloud",
+            "OwnerTag",
+            "Life",
+            "Status",
+            "Users"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ModelUserInfo": {
+          "type": "object",
+          "properties": {
+            "access": {
+              "type": "string"
+            },
+            "displayname": {
+              "type": "string"
+            },
+            "lastconnection": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "user": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "user",
+            "displayname",
+            "lastconnection",
+            "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": {
+            "PrivateAddress": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "PrivateAddress"
+          ]
+        },
+        "ProvisioningScriptParams": {
+          "type": "object",
+          "properties": {
+            "DataDir": {
+              "type": "string"
+            },
+            "DisablePackageCommands": {
+              "type": "boolean"
+            },
+            "MachineId": {
+              "type": "string"
+            },
+            "Nonce": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineId",
+            "Nonce",
+            "DataDir",
+            "DisablePackageCommands"
+          ]
+        },
+        "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": {
+            "PublicAddress": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "PublicAddress"
+          ]
+        },
+        "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": {
+              "$ref": "#/definitions/URL"
+            }
+          },
+          "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": {
+                "$ref": "#/definitions/URL"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "References"
+          ]
+        },
+        "Resolved": {
+          "type": "object",
+          "properties": {
+            "Retry": {
+              "type": "boolean"
+            },
+            "UnitName": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UnitName",
+            "Retry"
+          ]
+        },
+        "SetConstraints": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "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"
+          ]
+        },
+        "URL": {
+          "type": "object",
+          "properties": {
+            "Channel": {
+              "type": "string"
+            },
+            "Name": {
+              "type": "string"
+            },
+            "Revision": {
+              "type": "integer"
+            },
+            "Schema": {
+              "type": "string"
+            },
+            "Series": {
+              "type": "string"
+            },
+            "User": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Schema",
+            "User",
+            "Name",
+            "Revision",
+            "Series",
+            "Channel"
+          ]
+        },
+        "UnitStatus": {
+          "type": "object",
+          "properties": {
+            "AgentStatus": {
+              "$ref": "#/definitions/DetailedStatus"
+            },
+            "Charm": {
+              "type": "string"
+            },
+            "Machine": {
+              "type": "string"
+            },
+            "OpenedPorts": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "PublicAddress": {
+              "type": "string"
+            },
+            "Subordinates": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/UnitStatus"
+                }
+              }
+            },
+            "WorkloadStatus": {
+              "$ref": "#/definitions/DetailedStatus"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "AgentStatus",
+            "WorkloadStatus",
+            "Machine",
+            "OpenedPorts",
+            "PublicAddress",
+            "Charm",
+            "Subordinates"
+          ]
+        },
+        "Value": {
+          "type": "object",
+          "properties": {
+            "arch": {
+              "type": "string"
+            },
+            "container": {
+              "type": "string"
+            },
+            "cpu-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
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Controller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "DestroyController": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/DestroyControllerArgs"
+            }
+          }
+        },
+        "InitiateModelMigration": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/InitiateModelMigrationArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/InitiateModelMigrationResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "RemoveBlocks": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/RemoveBlocksArgs"
+            }
+          }
+        },
+        "WatchAllModels": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/AllWatcherId"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "AllWatcherId": {
+          "type": "object",
+          "properties": {
+            "AllWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "AllWatcherId"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "InitiateModelMigrationArgs": {
+          "type": "object",
+          "properties": {
+            "specs": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelMigrationSpec"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "specs"
+          ]
+        },
+        "InitiateModelMigrationResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "id": {
+              "type": "string"
+            },
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "error",
+            "id"
+          ]
+        },
+        "InitiateModelMigrationResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/InitiateModelMigrationResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "Model": {
+          "type": "object",
+          "properties": {
+            "Name": {
+              "type": "string"
+            },
+            "OwnerTag": {
+              "type": "string"
+            },
+            "UUID": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Name",
+            "UUID",
+            "OwnerTag"
+          ]
+        },
+        "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": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Config"
+          ]
+        },
+        "ModelMigrationSpec": {
+          "type": "object",
+          "properties": {
+            "model-tag": {
+              "type": "string"
+            },
+            "target-info": {
+              "$ref": "#/definitions/ModelMigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info"
+          ]
+        },
+        "ModelMigrationTargetInfo": {
+          "type": "object",
+          "properties": {
+            "addrs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "auth-tag": {
+              "type": "string"
+            },
+            "ca-cert": {
+              "type": "string"
+            },
+            "controller-tag": {
+              "type": "string"
+            },
+            "password": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "controller-tag",
+            "addrs",
+            "ca-cert",
+            "auth-tag",
+            "password"
+          ]
+        },
+        "ModelStatus": {
+          "type": "object",
+          "properties": {
+            "application-count": {
+              "type": "integer"
+            },
+            "hosted-machine-count": {
+              "type": "integer"
+            },
+            "life": {
+              "type": "string"
+            },
+            "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"
+          ]
+        },
+        "RemoveBlocksArgs": {
+          "type": "object",
+          "properties": {
+            "all": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "all"
+          ]
+        },
+        "UserModel": {
+          "type": "object",
+          "properties": {
+            "LastConnection": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "Model": {
+              "$ref": "#/definitions/Model"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Model",
+            "LastConnection"
+          ]
+        },
+        "UserModelList": {
+          "type": "object",
+          "properties": {
+            "UserModels": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UserModel"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UserModels"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          }
+        },
+        "StateAddresses": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/StringsResult"
+            }
+          }
+        },
+        "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"
+            },
+            "SpaceName": {
+              "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": {
+            "APIAddresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "StateAddresses": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StateAddresses",
+            "APIAddresses"
+          ]
+        },
+        "Entities": {
+          "type": "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "StringResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringsResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "StringsWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "SpaceTag": {
+              "type": "string"
+            },
+            "SubnetProviderId": {
+              "type": "string"
+            },
+            "SubnetTag": {
+              "type": "string"
+            },
+            "Zones": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "SpaceTag"
+          ]
+        },
+        "AddSubnetsParams": {
+          "type": "object",
+          "properties": {
+            "Subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/AddSubnetParams"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Subnets"
+          ]
+        },
+        "CreateSpaceParams": {
+          "type": "object",
+          "properties": {
+            "ProviderId": {
+              "type": "string"
+            },
+            "Public": {
+              "type": "boolean"
+            },
+            "SpaceTag": {
+              "type": "string"
+            },
+            "SubnetTags": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "SubnetTags",
+            "SpaceTag",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "Subnets": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Subnet"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Name",
+            "ProviderId",
+            "Subnets"
+          ]
+        },
+        "Subnet": {
+          "type": "object",
+          "properties": {
+            "CIDR": {
+              "type": "string"
+            },
+            "Life": {
+              "type": "string"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "SpaceTag": {
+              "type": "string"
+            },
+            "StaticRangeHighIP": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "StaticRangeLowIP": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "Status": {
+              "type": "string"
+            },
+            "VLANTag": {
+              "type": "integer"
+            },
+            "Zones": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CIDR",
+            "VLANTag",
+            "Life",
+            "SpaceTag",
+            "Zones"
+          ]
+        },
+        "SubnetsFilters": {
+          "type": "object",
+          "properties": {
+            "SpaceTag": {
+              "type": "string"
+            },
+            "Zone": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachineBlockDevices": {
+          "type": "object",
+          "properties": {
+            "blockdevices": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/BlockDevice"
+              }
+            },
+            "machine": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machine"
+          ]
+        },
+        "SetMachineBlockDevices": {
+          "type": "object",
+          "properties": {
+            "machineblockdevices": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineBlockDevices"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machineblockdevices"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+              }
+            },
+            "EntityWatcherId": {
+              "type": "string"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "EntityWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "Error": {
+          "type": "object",
+          "properties": {
+            "Code": {
+              "type": "string"
+            },
+            "Info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "Message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Message",
+            "Code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "Macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachmenttag": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machinetag",
+            "attachmenttag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "MachineStorageIdsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineStorageIdsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Firewaller",
+    "Version": 3,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "GetAssignedMachine": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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": [
+            "Error",
+            "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"
+          ]
+        },
+        "Error": {
+          "type": "object",
+          "properties": {
+            "Code": {
+              "type": "string"
+            },
+            "Info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "Message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Message",
+            "Code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "Macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "LifeResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Life",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachinePortRange": {
+          "type": "object",
+          "properties": {
+            "PortRange": {
+              "$ref": "#/definitions/PortRange"
+            },
+            "RelationTag": {
+              "type": "string"
+            },
+            "UnitTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UnitTag",
+            "RelationTag",
+            "PortRange"
+          ]
+        },
+        "MachinePorts": {
+          "type": "object",
+          "properties": {
+            "MachineTag": {
+              "type": "string"
+            },
+            "SubnetTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineTag",
+            "SubnetTag"
+          ]
+        },
+        "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": [
+            "Error",
+            "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"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "NotifyWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NotifyWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "PortRange": {
+          "type": "object",
+          "properties": {
+            "FromPort": {
+              "type": "integer"
+            },
+            "Protocol": {
+              "type": "string"
+            },
+            "ToPort": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "FromPort",
+            "ToPort",
+            "Protocol"
+          ]
+        },
+        "StringResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "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"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "StringsWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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",
+            "Error"
+          ]
+        },
+        "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": {
+            "ModelTag": {
+              "type": "string"
+            },
+            "constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "num-controllers": {
+              "type": "integer"
+            },
+            "placement": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ModelTag",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "HAMember": {
+          "type": "object",
+          "properties": {
+            "PublicAddress": {
+              "$ref": "#/definitions/Address"
+            },
+            "Series": {
+              "type": "string"
+            },
+            "Tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Tag",
+            "PublicAddress",
+            "Series"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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": {
+            "Master": {
+              "$ref": "#/definitions/HAMember"
+            },
+            "Members": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/HAMember"
+              }
+            },
+            "RsMembers": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Member"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RsMembers",
+            "Master",
+            "Members"
+          ]
+        },
+        "ResumeReplicationParams": {
+          "type": "object",
+          "properties": {
+            "Members": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Member"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Members"
+          ]
+        },
+        "UpgradeMongoParams": {
+          "type": "object",
+          "properties": {
+            "Target": {
+              "$ref": "#/definitions/Version"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Target"
+          ]
+        },
+        "Value": {
+          "type": "object",
+          "properties": {
+            "arch": {
+              "type": "string"
+            },
+            "container": {
+              "type": "string"
+            },
+            "cpu-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
+        },
+        "Version": {
+          "type": "object",
+          "properties": {
+            "Major": {
+              "type": "integer"
+            },
+            "Minor": {
+              "type": "integer"
+            },
+            "Patch": {
+              "type": "string"
+            },
+            "StorageEngine": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Major",
+            "Minor",
+            "Patch",
+            "StorageEngine"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "SpaceName": {
+              "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": [
+            "Error",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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": [
+            "Error",
+            "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": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "SetMachinesAddresses": {
+          "type": "object",
+          "properties": {
+            "MachineAddresses": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineAddresses"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineAddresses"
+          ]
+        },
+        "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": [
+            "Error",
+            "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": [
+            "Error",
+            "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"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "ModifyUserSSHKeys": {
+          "type": "object",
+          "properties": {
+            "Keys": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "User": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "User",
+            "Keys"
+          ]
+        },
+        "StringsResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringsResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringsResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "ApplicationTag": {
+              "type": "string"
+            },
+            "DurationSeconds": {
+              "type": "number"
+            },
+            "UnitTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationTag",
+            "UnitTag",
+            "DurationSeconds"
+          ]
+        },
+        "Error": {
+          "type": "object",
+          "properties": {
+            "Code": {
+              "type": "string"
+            },
+            "Info": {
+              "$ref": "#/definitions/ErrorInfo"
+            },
+            "Message": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Message",
+            "Code"
+          ]
+        },
+        "ErrorInfo": {
+          "type": "object",
+          "properties": {
+            "Macaroon": {
+              "$ref": "#/definitions/Macaroon"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "LifeResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Life",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "NotifyWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NotifyWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "actiontag": {
+              "type": "string"
+            },
+            "message": {
+              "type": "string"
+            },
+            "results": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "actiontag",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "StringsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "StringsWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "Addrs": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Address"
+              }
+            },
+            "Constraints": {
+              "$ref": "#/definitions/Value"
+            },
+            "ContainerType": {
+              "type": "string"
+            },
+            "Disks": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Constraints"
+              }
+            },
+            "HardwareCharacteristics": {
+              "$ref": "#/definitions/HardwareCharacteristics"
+            },
+            "InstanceId": {
+              "type": "string"
+            },
+            "Jobs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Nonce": {
+              "type": "string"
+            },
+            "ParentId": {
+              "type": "string"
+            },
+            "Placement": {
+              "$ref": "#/definitions/Placement"
+            },
+            "Series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Series",
+            "Constraints",
+            "Jobs",
+            "Disks",
+            "Placement",
+            "ParentId",
+            "ContainerType",
+            "InstanceId",
+            "Nonce",
+            "HardwareCharacteristics",
+            "Addrs"
+          ]
+        },
+        "AddMachines": {
+          "type": "object",
+          "properties": {
+            "MachineParams": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/AddMachineParams"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineParams"
+          ]
+        },
+        "AddMachinesResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Machine": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Machine",
+            "Error"
+          ]
+        },
+        "AddMachinesResults": {
+          "type": "object",
+          "properties": {
+            "Machines": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/AddMachinesResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Machines"
+          ]
+        },
+        "Address": {
+          "type": "object",
+          "properties": {
+            "Scope": {
+              "type": "string"
+            },
+            "SpaceName": {
+              "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "HardwareCharacteristics": {
+          "type": "object",
+          "properties": {
+            "Arch": {
+              "type": "string"
+            },
+            "AvailabilityZone": {
+              "type": "string"
+            },
+            "CpuCores": {
+              "type": "integer"
+            },
+            "CpuPower": {
+              "type": "integer"
+            },
+            "Mem": {
+              "type": "integer"
+            },
+            "RootDisk": {
+              "type": "integer"
+            },
+            "Tags": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+            },
+            "cpu-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
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "SpaceName": {
+              "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+            "Error"
+          ]
+        },
+        "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",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+            },
+            "ConfigType": {
+              "type": "string"
+            },
+            "DNSSearchDomains": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "DNSServers": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "DeviceIndex": {
+              "type": "integer"
+            },
+            "Disabled": {
+              "type": "boolean"
+            },
+            "GatewayAddress": {
+              "type": "string"
+            },
+            "InterfaceName": {
+              "type": "string"
+            },
+            "InterfaceType": {
+              "type": "string"
+            },
+            "MACAddress": {
+              "type": "string"
+            },
+            "MTU": {
+              "type": "integer"
+            },
+            "NoAutoStart": {
+              "type": "boolean"
+            },
+            "ParentInterfaceName": {
+              "type": "string"
+            },
+            "ProviderAddressId": {
+              "type": "string"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "ProviderSpaceId": {
+              "type": "string"
+            },
+            "ProviderSubnetId": {
+              "type": "string"
+            },
+            "ProviderVLANId": {
+              "type": "string"
+            },
+            "VLANTag": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceIndex",
+            "MACAddress",
+            "CIDR",
+            "MTU",
+            "ProviderId",
+            "ProviderSubnetId",
+            "ProviderSpaceId",
+            "ProviderAddressId",
+            "ProviderVLANId",
+            "VLANTag",
+            "InterfaceName",
+            "ParentInterfaceName",
+            "InterfaceType",
+            "Disabled"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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": {
+            "MachineAddresses": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineAddresses"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineAddresses"
+          ]
+        },
+        "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": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringsResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MeterStatusResult": {
+          "type": "object",
+          "properties": {
+            "Code": {
+              "type": "string"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Info": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Code",
+            "Info",
+            "Error"
+          ]
+        },
+        "MeterStatusResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MeterStatusResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "NotifyWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NotifyWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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": {
+            "CharmURL": {
+              "type": "string"
+            },
+            "Created": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "Metrics": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Metric"
+              }
+            },
+            "UUID": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UUID",
+            "CharmURL",
+            "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"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+            },
+            "value": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "time",
+            "key",
+            "value"
+          ]
+        },
+        "MetricResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityMetrics"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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,
+          "required": [
+            "phase",
+            "Error"
+          ]
+        },
+        "PhaseResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/PhaseResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MigrationMaster",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Export": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/SerializedModel"
+            }
+          }
+        },
+        "GetMigrationStatus": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/FullMigrationStatus"
+            }
+          }
+        },
+        "SetPhase": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SetMigrationPhaseArgs"
+            }
+          }
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "FullMigrationStatus": {
+          "type": "object",
+          "properties": {
+            "attempt": {
+              "type": "integer"
+            },
+            "phase": {
+              "type": "string"
+            },
+            "spec": {
+              "$ref": "#/definitions/ModelMigrationSpec"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "spec",
+            "attempt",
+            "phase"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "ModelMigrationSpec": {
+          "type": "object",
+          "properties": {
+            "model-tag": {
+              "type": "string"
+            },
+            "target-info": {
+              "$ref": "#/definitions/ModelMigrationTargetInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag",
+            "target-info"
+          ]
+        },
+        "ModelMigrationTargetInfo": {
+          "type": "object",
+          "properties": {
+            "addrs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "auth-tag": {
+              "type": "string"
+            },
+            "ca-cert": {
+              "type": "string"
+            },
+            "controller-tag": {
+              "type": "string"
+            },
+            "password": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "controller-tag",
+            "addrs",
+            "ca-cert",
+            "auth-tag",
+            "password"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "SerializedModel": {
+          "type": "object",
+          "properties": {
+            "bytes": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes"
+          ]
+        },
+        "SetMigrationPhaseArgs": {
+          "type": "object",
+          "properties": {
+            "phase": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "phase"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "MigrationMinion",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "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": [
+            "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"
+            }
+          }
+        },
+        "Import": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/SerializedModel"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "ModelArgs": {
+          "type": "object",
+          "properties": {
+            "model-tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "model-tag"
+          ]
+        },
+        "SerializedModel": {
+          "type": "object",
+          "properties": {
+            "bytes": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "bytes"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "ModelManager",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "ConfigSkeleton": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelSkeletonConfigArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "CreateModel": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModelCreateArgs"
+            },
+            "Result": {
+              "$ref": "#/definitions/Model"
+            }
+          }
+        },
+        "ListModels": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entity"
+            },
+            "Result": {
+              "$ref": "#/definitions/UserModelList"
+            }
+          }
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ModelInfoResults"
+            }
+          }
+        },
+        "ModifyModelAccess": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/ModifyModelAccessRequest"
+            },
+            "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",
+            "Data",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "Model": {
+          "type": "object",
+          "properties": {
+            "Name": {
+              "type": "string"
+            },
+            "OwnerTag": {
+              "type": "string"
+            },
+            "UUID": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Name",
+            "UUID",
+            "OwnerTag"
+          ]
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Config"
+          ]
+        },
+        "ModelCreateArgs": {
+          "type": "object",
+          "properties": {
+            "Account": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "OwnerTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "OwnerTag",
+            "Account",
+            "Config"
+          ]
+        },
+        "ModelInfo": {
+          "type": "object",
+          "properties": {
+            "Cloud": {
+              "type": "string"
+            },
+            "DefaultSeries": {
+              "type": "string"
+            },
+            "Life": {
+              "type": "string"
+            },
+            "Name": {
+              "type": "string"
+            },
+            "OwnerTag": {
+              "type": "string"
+            },
+            "ProviderType": {
+              "type": "string"
+            },
+            "ServerUUID": {
+              "type": "string"
+            },
+            "Status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "UUID": {
+              "type": "string"
+            },
+            "Users": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ModelUserInfo"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Name",
+            "UUID",
+            "ServerUUID",
+            "ProviderType",
+            "DefaultSeries",
+            "Cloud",
+            "OwnerTag",
+            "Life",
+            "Status",
+            "Users"
+          ]
+        },
+        "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"
+          ]
+        },
+        "ModelSkeletonConfigArgs": {
+          "type": "object",
+          "properties": {
+            "Provider": {
+              "type": "string"
+            },
+            "Region": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Provider",
+            "Region"
+          ]
+        },
+        "ModelUserInfo": {
+          "type": "object",
+          "properties": {
+            "access": {
+              "type": "string"
+            },
+            "displayname": {
+              "type": "string"
+            },
+            "lastconnection": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "user": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "user",
+            "displayname",
+            "lastconnection",
+            "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"
+          ]
+        },
+        "UserModel": {
+          "type": "object",
+          "properties": {
+            "LastConnection": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "Model": {
+              "$ref": "#/definitions/Model"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Model",
+            "LastConnection"
+          ]
+        },
+        "UserModelList": {
+          "type": "object",
+          "properties": {
+            "UserModels": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/UserModel"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UserModels"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "NotifyWatcher",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Next": {
+          "type": "object"
+        },
+        "Stop": {
+          "type": "object"
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            },
+            "SpaceName": {
+              "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": [
+            "Error",
+            "Constraints"
+          ]
+        },
+        "ConstraintsResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConstraintsResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "ContainerConfig": {
+          "type": "object",
+          "properties": {
+            "AllowLXCLoopMounts": {
+              "type": "boolean"
+            },
+            "AptMirror": {
+              "type": "string"
+            },
+            "AptProxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "AuthorizedKeys": {
+              "type": "string"
+            },
+            "ProviderType": {
+              "type": "string"
+            },
+            "Proxy": {
+              "$ref": "#/definitions/Settings"
+            },
+            "SSLHostnameVerification": {
+              "type": "boolean"
+            },
+            "UpdateBehavior": {
+              "$ref": "#/definitions/UpdateBehavior"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ProviderType",
+            "AuthorizedKeys",
+            "SSLHostnameVerification",
+            "Proxy",
+            "AptProxy",
+            "AptMirror",
+            "AllowLXCLoopMounts",
+            "UpdateBehavior"
+          ]
+        },
+        "ContainerManagerConfig": {
+          "type": "object",
+          "properties": {
+            "ManagerConfig": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ManagerConfig"
+          ]
+        },
+        "ContainerManagerConfigParams": {
+          "type": "object",
+          "properties": {
+            "Type": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Type"
+          ]
+        },
+        "DistributionGroupResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "FindToolsParams": {
+          "type": "object",
+          "properties": {
+            "Arch": {
+              "type": "string"
+            },
+            "MajorVersion": {
+              "type": "integer"
+            },
+            "MinorVersion": {
+              "type": "integer"
+            },
+            "Number": {
+              "$ref": "#/definitions/Number"
+            },
+            "Series": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Number",
+            "MajorVersion",
+            "MinorVersion",
+            "Arch",
+            "Series"
+          ]
+        },
+        "FindToolsResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "List": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Tools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "List",
+            "Error"
+          ]
+        },
+        "HardwareCharacteristics": {
+          "type": "object",
+          "properties": {
+            "Arch": {
+              "type": "string"
+            },
+            "AvailabilityZone": {
+              "type": "string"
+            },
+            "CpuCores": {
+              "type": "integer"
+            },
+            "CpuPower": {
+              "type": "integer"
+            },
+            "Mem": {
+              "type": "integer"
+            },
+            "RootDisk": {
+              "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"
+            },
+            "InstanceId": {
+              "type": "string"
+            },
+            "NetworkConfig": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            },
+            "Nonce": {
+              "type": "string"
+            },
+            "Tag": {
+              "type": "string"
+            },
+            "VolumeAttachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "Volumes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Volume"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Tag",
+            "InstanceId",
+            "Nonce",
+            "Characteristics",
+            "Volumes",
+            "VolumeAttachments",
+            "NetworkConfig"
+          ]
+        },
+        "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",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachineContainers": {
+          "type": "object",
+          "properties": {
+            "ContainerTypes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "MachineTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineTag",
+            "ContainerTypes"
+          ]
+        },
+        "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": [
+            "Error",
+            "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"
+            },
+            "ConfigType": {
+              "type": "string"
+            },
+            "DNSSearchDomains": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "DNSServers": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "DeviceIndex": {
+              "type": "integer"
+            },
+            "Disabled": {
+              "type": "boolean"
+            },
+            "GatewayAddress": {
+              "type": "string"
+            },
+            "InterfaceName": {
+              "type": "string"
+            },
+            "InterfaceType": {
+              "type": "string"
+            },
+            "MACAddress": {
+              "type": "string"
+            },
+            "MTU": {
+              "type": "integer"
+            },
+            "NoAutoStart": {
+              "type": "boolean"
+            },
+            "ParentInterfaceName": {
+              "type": "string"
+            },
+            "ProviderAddressId": {
+              "type": "string"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "ProviderSpaceId": {
+              "type": "string"
+            },
+            "ProviderSubnetId": {
+              "type": "string"
+            },
+            "ProviderVLANId": {
+              "type": "string"
+            },
+            "VLANTag": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceIndex",
+            "MACAddress",
+            "CIDR",
+            "MTU",
+            "ProviderId",
+            "ProviderSubnetId",
+            "ProviderSpaceId",
+            "ProviderAddressId",
+            "ProviderVLANId",
+            "VLANTag",
+            "InterfaceName",
+            "ParentInterfaceName",
+            "InterfaceType",
+            "Disabled"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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"
+            },
+            "EndpointBindings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "ImageMetadata": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/CloudImageMetadata"
+              }
+            },
+            "Jobs": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Placement": {
+              "type": "string"
+            },
+            "Series": {
+              "type": "string"
+            },
+            "SubnetsToZones": {
+              "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",
+            "Volumes",
+            "Tags",
+            "SubnetsToZones",
+            "ImageMetadata",
+            "EndpointBindings"
+          ]
+        },
+        "ProvisioningInfoResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "$ref": "#/definitions/ProvisioningInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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": [
+            "Error",
+            "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": [
+            "Error",
+            "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,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "StringsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "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": {
+            "DisableSSLHostnameVerification": {
+              "type": "boolean"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "ToolsList": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Tools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ToolsList",
+            "DisableSSLHostnameVerification",
+            "Error"
+          ]
+        },
+        "ToolsResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ToolsResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "UpdateBehavior": {
+          "type": "object",
+          "properties": {
+            "EnableOSRefreshUpdate": {
+              "type": "boolean"
+            },
+            "EnableOSUpgrade": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "EnableOSRefreshUpdate",
+            "EnableOSUpgrade"
+          ]
+        },
+        "Value": {
+          "type": "object",
+          "properties": {
+            "arch": {
+              "type": "string"
+            },
+            "container": {
+              "type": "string"
+            },
+            "cpu-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"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "info"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "busaddress": {
+              "type": "string"
+            },
+            "devicelink": {
+              "type": "string"
+            },
+            "devicename": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeAttachmentParams": {
+          "type": "object",
+          "properties": {
+            "instanceid": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            },
+            "provider": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            },
+            "volumeid": {
+              "type": "string"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "machinetag",
+            "provider"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardwareid": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volumeid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumeid",
+            "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"
+                }
+              }
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "size",
+            "provider"
+          ]
+        },
+        "WatchContainer": {
+          "type": "object",
+          "properties": {
+            "ContainerType": {
+              "type": "string"
+            },
+            "MachineTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineTag",
+            "ContainerType"
+          ]
+        },
+        "WatchContainers": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/WatchContainer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Params"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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"
+            },
+            "NoProxy": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "HTTP",
+            "HTTPS",
+            "FTP",
+            "NoProxy"
+          ]
+        },
+        "ProxyConfigResult": {
+          "type": "object",
+          "properties": {
+            "APTProxySettings": {
+              "$ref": "#/definitions/ProxyConfig"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "ProxySettings": {
+              "$ref": "#/definitions/ProxyConfig"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ProxySettings",
+            "APTProxySettings"
+          ]
+        },
+        "ProxyConfigResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ProxyConfigResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "RelationUnitsChange": {
+          "type": "object",
+          "properties": {
+            "Changed": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/UnitSettings"
+                }
+              }
+            },
+            "Departed": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Changed",
+            "Departed"
+          ]
+        },
+        "RelationUnitsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "$ref": "#/definitions/RelationUnitsChange"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "RelationUnitsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RelationUnitsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "UnitSettings": {
+          "type": "object",
+          "properties": {
+            "Version": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Version"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "NotifyWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NotifyWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "RetryStrategy": {
+          "type": "object",
+          "properties": {
+            "JitterRetryTime": {
+              "type": "boolean"
+            },
+            "MaxRetryTime": {
+              "type": "integer"
+            },
+            "MinRetryTime": {
+              "type": "integer"
+            },
+            "RetryTimeFactor": {
+              "type": "integer"
+            },
+            "ShouldRetry": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ShouldRetry",
+            "MinRetryTime",
+            "MaxRetryTime",
+            "JitterRetryTime",
+            "RetryTimeFactor"
+          ]
+        },
+        "RetryStrategyResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "$ref": "#/definitions/RetryStrategy"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "RetryStrategyResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RetryStrategyResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "SingularClaim": {
+          "type": "object",
+          "properties": {
+            "ControllerTag": {
+              "type": "string"
+            },
+            "Duration": {
+              "type": "integer"
+            },
+            "ModelTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ModelTag",
+            "ControllerTag",
+            "Duration"
+          ]
+        },
+        "SingularClaims": {
+          "type": "object",
+          "properties": {
+            "Claims": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/SingularClaim"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Claims"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "ProviderId": {
+              "type": "string"
+            },
+            "Public": {
+              "type": "boolean"
+            },
+            "SpaceTag": {
+              "type": "string"
+            },
+            "SubnetTags": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "SubnetTags",
+            "SpaceTag",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "SpaceTag": {
+              "type": "string"
+            },
+            "StaticRangeHighIP": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "StaticRangeLowIP": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "Status": {
+              "type": "string"
+            },
+            "VLANTag": {
+              "type": "integer"
+            },
+            "Zones": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CIDR",
+            "VLANTag",
+            "Life",
+            "SpaceTag",
+            "Zones"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StatusHistory",
+    "Version": 2,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "Prune": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/StatusHistoryPruneArgs"
+            }
+          }
+        }
+      },
+      "definitions": {
+        "StatusHistoryPruneArgs": {
+          "type": "object",
+          "properties": {
+            "MaxHistoryMB": {
+              "type": "integer"
+            },
+            "MaxHistoryTime": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MaxHistoryTime",
+            "MaxHistoryMB"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "Storage",
+    "Version": 2,
+    "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",
+            "Data",
+            "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "FilesystemAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "mountpoint": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "FilesystemDetails": {
+          "type": "object",
+          "properties": {
+            "filesystemtag": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/FilesystemInfo"
+            },
+            "machineattachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/FilesystemAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemtag",
+            "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": {
+            "filesystemid": {
+              "type": "string"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemid",
+            "size"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "StorageAddParams": {
+          "type": "object",
+          "properties": {
+            "StorageName": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "StorageName",
+            "storage"
+          ]
+        },
+        "StorageAttachmentDetails": {
+          "type": "object",
+          "properties": {
+            "location": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            },
+            "storagetag": {
+              "type": "string"
+            },
+            "unittag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storagetag",
+            "unittag",
+            "machinetag"
+          ]
+        },
+        "StorageConstraints": {
+          "type": "object",
+          "properties": {
+            "Count": {
+              "type": "integer"
+            },
+            "Pool": {
+              "type": "string"
+            },
+            "Size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "StorageDetails": {
+          "type": "object",
+          "properties": {
+            "Persistent": {
+              "type": "boolean"
+            },
+            "attachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/StorageAttachmentDetails"
+                }
+              }
+            },
+            "kind": {
+              "type": "integer"
+            },
+            "ownertag": {
+              "type": "string"
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storagetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storagetag",
+            "ownertag",
+            "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"
+            },
+            "storagepools": {
+              "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": {
+            "busaddress": {
+              "type": "string"
+            },
+            "devicelink": {
+              "type": "string"
+            },
+            "devicename": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeDetails": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "machineattachments": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/VolumeAttachmentInfo"
+                }
+              }
+            },
+            "status": {
+              "$ref": "#/definitions/EntityStatus"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageDetails"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "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": {
+            "hardwareid": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volumeid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumeid",
+            "size",
+            "persistent"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "StorageProvisioner",
+    "Version": 2,
+    "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"
+            }
+          }
+        },
+        "ModelConfig": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/ModelConfigResult"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "WatchForModelConfigChanges": {
+          "type": "object",
+          "properties": {
+            "Result": {
+              "$ref": "#/definitions/NotifyWatchResult"
+            }
+          }
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Filesystem": {
+          "type": "object",
+          "properties": {
+            "filesystemtag": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/FilesystemInfo"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemtag",
+            "info"
+          ]
+        },
+        "FilesystemAttachment": {
+          "type": "object",
+          "properties": {
+            "filesystemtag": {
+              "type": "string"
+            },
+            "info": {
+              "$ref": "#/definitions/FilesystemAttachmentInfo"
+            },
+            "machinetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemtag",
+            "machinetag",
+            "info"
+          ]
+        },
+        "FilesystemAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "mountpoint": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "FilesystemAttachmentParams": {
+          "type": "object",
+          "properties": {
+            "filesystemid": {
+              "type": "string"
+            },
+            "filesystemtag": {
+              "type": "string"
+            },
+            "instanceid": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            },
+            "mountpoint": {
+              "type": "string"
+            },
+            "provider": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemtag",
+            "machinetag",
+            "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": {
+            "filesystemattachments": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/FilesystemAttachment"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemattachments"
+          ]
+        },
+        "FilesystemInfo": {
+          "type": "object",
+          "properties": {
+            "filesystemid": {
+              "type": "string"
+            },
+            "size": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemid",
+            "size"
+          ]
+        },
+        "FilesystemParams": {
+          "type": "object",
+          "properties": {
+            "attachment": {
+              "$ref": "#/definitions/FilesystemAttachmentParams"
+            },
+            "attributes": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "filesystemtag": {
+              "type": "string"
+            },
+            "provider": {
+              "type": "string"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "tags": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "filesystemtag",
+            "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",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachmenttag": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machinetag",
+            "attachmenttag"
+          ]
+        },
+        "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"
+            },
+            "MachineStorageIdsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineStorageIdsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "MachineStorageIdsWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageIdsWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Config"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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": [
+            "Error",
+            "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"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "StringsWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Volume": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeInfo"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "info"
+          ]
+        },
+        "VolumeAttachment": {
+          "type": "object",
+          "properties": {
+            "info": {
+              "$ref": "#/definitions/VolumeAttachmentInfo"
+            },
+            "machinetag": {
+              "type": "string"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "machinetag",
+            "info"
+          ]
+        },
+        "VolumeAttachmentInfo": {
+          "type": "object",
+          "properties": {
+            "busaddress": {
+              "type": "string"
+            },
+            "devicelink": {
+              "type": "string"
+            },
+            "devicename": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            }
+          },
+          "additionalProperties": false
+        },
+        "VolumeAttachmentParams": {
+          "type": "object",
+          "properties": {
+            "instanceid": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            },
+            "provider": {
+              "type": "string"
+            },
+            "read-only": {
+              "type": "boolean"
+            },
+            "volumeid": {
+              "type": "string"
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "machinetag",
+            "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": {
+            "volumeattachments": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/VolumeAttachment"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumeattachments"
+          ]
+        },
+        "VolumeInfo": {
+          "type": "object",
+          "properties": {
+            "hardwareid": {
+              "type": "string"
+            },
+            "persistent": {
+              "type": "boolean"
+            },
+            "size": {
+              "type": "integer"
+            },
+            "volumeid": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumeid",
+            "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"
+                }
+              }
+            },
+            "volumetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "volumetag",
+            "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"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "StringsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "SpaceTag": {
+              "type": "string"
+            },
+            "SubnetProviderId": {
+              "type": "string"
+            },
+            "SubnetTag": {
+              "type": "string"
+            },
+            "Zones": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "SpaceTag"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "SpaceResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "SpaceTag": {
+              "type": "string"
+            },
+            "StaticRangeHighIP": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "StaticRangeLowIP": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "Status": {
+              "type": "string"
+            },
+            "VLANTag": {
+              "type": "integer"
+            },
+            "Zones": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "CIDR",
+            "VLANTag",
+            "Life",
+            "SpaceTag",
+            "Zones"
+          ]
+        },
+        "SubnetsFilters": {
+          "type": "object",
+          "properties": {
+            "SpaceTag": {
+              "type": "string"
+            },
+            "Zone": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ZoneResult": {
+          "type": "object",
+          "properties": {
+            "Available": {
+              "type": "boolean"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Name": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Name",
+            "Available"
+          ]
+        },
+        "ZoneResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ZoneResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "ModelConfigResult": {
+          "type": "object",
+          "properties": {
+            "Config": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Config"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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": {
+            "GlobalName": {
+              "type": "string"
+            },
+            "IsSystem": {
+              "type": "boolean"
+            },
+            "Life": {
+              "type": "string"
+            },
+            "Name": {
+              "type": "string"
+            },
+            "UUID": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UUID",
+            "Name",
+            "GlobalName",
+            "IsSystem",
+            "Life"
+          ]
+        },
+        "UndertakerModelInfoResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Result": {
+              "$ref": "#/definitions/UndertakerModelInfo"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "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"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            }
+          }
+        },
+        "ApplicationOwner": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/StringResults"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        },
+        "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"
+            }
+          }
+        }
+      },
+      "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": {
+            "actiontag": {
+              "type": "string"
+            },
+            "message": {
+              "type": "string"
+            },
+            "results": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "object",
+                  "additionalProperties": true
+                }
+              }
+            },
+            "status": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "actiontag",
+            "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"
+            },
+            "SpaceName": {
+              "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",
+            "Error"
+          ]
+        },
+        "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": [
+            "Error",
+            "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"
+          ]
+        },
+        "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": [
+            "Error",
+            "Settings"
+          ]
+        },
+        "ConfigSettingsResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ConfigSettingsResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Endpoint": {
+          "type": "object",
+          "properties": {
+            "ApplicationName": {
+              "type": "string"
+            },
+            "Relation": {
+              "$ref": "#/definitions/Relation"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationName",
+            "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": {
+            "CharmURL": {
+              "type": "string"
+            },
+            "Tag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Tag",
+            "CharmURL"
+          ]
+        },
+        "EntityPortRange": {
+          "type": "object",
+          "properties": {
+            "FromPort": {
+              "type": "integer"
+            },
+            "Protocol": {
+              "type": "string"
+            },
+            "Tag": {
+              "type": "string"
+            },
+            "ToPort": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Tag",
+            "Protocol",
+            "FromPort",
+            "ToPort"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "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",
+            "Error"
+          ]
+        },
+        "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": [
+            "Error",
+            "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",
+            "Error"
+          ]
+        },
+        "LifeResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/LifeResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachinePortRange": {
+          "type": "object",
+          "properties": {
+            "PortRange": {
+              "$ref": "#/definitions/PortRange"
+            },
+            "RelationTag": {
+              "type": "string"
+            },
+            "UnitTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UnitTag",
+            "RelationTag",
+            "PortRange"
+          ]
+        },
+        "MachinePortsResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Ports": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachinePortRange"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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": {
+            "ApplicationTag": {
+              "type": "string"
+            },
+            "Settings": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "type": "string"
+                }
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ApplicationTag",
+            "Settings"
+          ]
+        },
+        "MeterStatusResult": {
+          "type": "object",
+          "properties": {
+            "Code": {
+              "type": "string"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Info": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Code",
+            "Info",
+            "Error"
+          ]
+        },
+        "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": {
+            "CharmURL": {
+              "type": "string"
+            },
+            "Created": {
+              "type": "string",
+              "format": "date-time"
+            },
+            "Metrics": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Metric"
+              }
+            },
+            "UUID": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UUID",
+            "CharmURL",
+            "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": [
+            "Error",
+            "Name",
+            "UUID"
+          ]
+        },
+        "NetworkConfig": {
+          "type": "object",
+          "properties": {
+            "Address": {
+              "type": "string"
+            },
+            "CIDR": {
+              "type": "string"
+            },
+            "ConfigType": {
+              "type": "string"
+            },
+            "DNSSearchDomains": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "DNSServers": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "DeviceIndex": {
+              "type": "integer"
+            },
+            "Disabled": {
+              "type": "boolean"
+            },
+            "GatewayAddress": {
+              "type": "string"
+            },
+            "InterfaceName": {
+              "type": "string"
+            },
+            "InterfaceType": {
+              "type": "string"
+            },
+            "MACAddress": {
+              "type": "string"
+            },
+            "MTU": {
+              "type": "integer"
+            },
+            "NoAutoStart": {
+              "type": "boolean"
+            },
+            "ParentInterfaceName": {
+              "type": "string"
+            },
+            "ProviderAddressId": {
+              "type": "string"
+            },
+            "ProviderId": {
+              "type": "string"
+            },
+            "ProviderSpaceId": {
+              "type": "string"
+            },
+            "ProviderSubnetId": {
+              "type": "string"
+            },
+            "ProviderVLANId": {
+              "type": "string"
+            },
+            "VLANTag": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "DeviceIndex",
+            "MACAddress",
+            "CIDR",
+            "MTU",
+            "ProviderId",
+            "ProviderSubnetId",
+            "ProviderSpaceId",
+            "ProviderAddressId",
+            "ProviderVLANId",
+            "VLANTag",
+            "InterfaceName",
+            "ParentInterfaceName",
+            "InterfaceType",
+            "Disabled"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "NotifyWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NotifyWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "PortRange": {
+          "type": "object",
+          "properties": {
+            "FromPort": {
+              "type": "integer"
+            },
+            "Protocol": {
+              "type": "string"
+            },
+            "ToPort": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "FromPort",
+            "ToPort",
+            "Protocol"
+          ]
+        },
+        "Relation": {
+          "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"
+          ]
+        },
+        "RelationIds": {
+          "type": "object",
+          "properties": {
+            "RelationIds": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RelationIds"
+          ]
+        },
+        "RelationResult": {
+          "type": "object",
+          "properties": {
+            "Endpoint": {
+              "$ref": "#/definitions/Endpoint"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Id": {
+              "type": "integer"
+            },
+            "Key": {
+              "type": "string"
+            },
+            "Life": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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": {
+            "LocalUnit": {
+              "type": "string"
+            },
+            "Relation": {
+              "type": "string"
+            },
+            "RemoteUnit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Relation",
+            "LocalUnit",
+            "RemoteUnit"
+          ]
+        },
+        "RelationUnitPairs": {
+          "type": "object",
+          "properties": {
+            "RelationUnitPairs": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationUnitPair"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RelationUnitPairs"
+          ]
+        },
+        "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": {
+            "RelationUnits": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationUnit"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RelationUnits"
+          ]
+        },
+        "RelationUnitsChange": {
+          "type": "object",
+          "properties": {
+            "Changed": {
+              "type": "object",
+              "patternProperties": {
+                ".*": {
+                  "$ref": "#/definitions/UnitSettings"
+                }
+              }
+            },
+            "Departed": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Changed",
+            "Departed"
+          ]
+        },
+        "RelationUnitsSettings": {
+          "type": "object",
+          "properties": {
+            "RelationUnits": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/RelationUnitSettings"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RelationUnits"
+          ]
+        },
+        "RelationUnitsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "$ref": "#/definitions/RelationUnitsChange"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "RelationUnitsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "RelationUnitsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "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": [
+            "Error",
+            "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": [
+            "Error",
+            "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": [
+            "Error",
+            "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": {
+            "StorageName": {
+              "type": "string"
+            },
+            "storage": {
+              "$ref": "#/definitions/StorageConstraints"
+            },
+            "unit": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "unit",
+            "StorageName",
+            "storage"
+          ]
+        },
+        "StorageAttachment": {
+          "type": "object",
+          "properties": {
+            "Kind": {
+              "type": "integer"
+            },
+            "Life": {
+              "type": "string"
+            },
+            "Location": {
+              "type": "string"
+            },
+            "OwnerTag": {
+              "type": "string"
+            },
+            "StorageTag": {
+              "type": "string"
+            },
+            "UnitTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StorageTag",
+            "OwnerTag",
+            "UnitTag",
+            "Kind",
+            "Location",
+            "Life"
+          ]
+        },
+        "StorageAttachmentId": {
+          "type": "object",
+          "properties": {
+            "storagetag": {
+              "type": "string"
+            },
+            "unittag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "storagetag",
+            "unittag"
+          ]
+        },
+        "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,
+          "required": [
+            "Pool",
+            "Size",
+            "Count"
+          ]
+        },
+        "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": [
+            "Error",
+            "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": [
+            "Error",
+            "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,
+          "required": [
+            "Error",
+            "Result"
+          ]
+        },
+        "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"
+            },
+            "StringsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "StringsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "StringsWatchResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/StringsWatchResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "UnitNetworkConfig": {
+          "type": "object",
+          "properties": {
+            "BindingName": {
+              "type": "string"
+            },
+            "UnitTag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "UnitTag",
+            "BindingName"
+          ]
+        },
+        "UnitNetworkConfigResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "Info": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/NetworkConfig"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error",
+            "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"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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": {
+            "AgentTools": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/EntityVersion"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "AgentTools"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "NotifyWatchResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "NotifyWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "NotifyWatcherId",
+            "Error"
+          ]
+        },
+        "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": {
+            "DisableSSLHostnameVerification": {
+              "type": "boolean"
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "ToolsList": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Tools"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "ToolsList",
+            "DisableSSLHostnameVerification",
+            "Error"
+          ]
+        },
+        "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,
+          "required": [
+            "Version",
+            "Error"
+          ]
+        },
+        "VersionResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/VersionResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "Name": "UserManager",
+    "Version": 1,
+    "Schema": {
+      "type": "object",
+      "properties": {
+        "AddUser": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/AddUsers"
+            },
+            "Result": {
+              "$ref": "#/definitions/AddUserResults"
+            }
+          }
+        },
+        "CreateLocalLoginMacaroon": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/MacaroonResults"
+            }
+          }
+        },
+        "DisableUser": {
+          "type": "object",
+          "properties": {
+            "Params": {
+              "$ref": "#/definitions/Entities"
+            },
+            "Result": {
+              "$ref": "#/definitions/ErrorResults"
+            }
+          }
+        },
+        "EnableUser": {
+          "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"
+            },
+            "model-access-permission": {
+              "type": "string"
+            },
+            "password": {
+              "type": "string"
+            },
+            "shared-model-tags": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "username": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "username",
+            "display-name",
+            "shared-model-tags"
+          ]
+        },
+        "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "ErrorResult": {
+          "type": "object",
+          "properties": {
+            "Error": {
+              "$ref": "#/definitions/Error"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Error"
+          ]
+        },
+        "ErrorResults": {
+          "type": "object",
+          "properties": {
+            "Results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/ErrorResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "Results"
+          ]
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MacaroonResult": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "$ref": "#/definitions/Error"
+            },
+            "result": {
+              "$ref": "#/definitions/Macaroon"
+            }
+          },
+          "additionalProperties": false
+        },
+        "MacaroonResults": {
+          "type": "object",
+          "properties": {
+            "results": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MacaroonResult"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "results"
+          ]
+        },
+        "UserInfo": {
+          "type": "object",
+          "properties": {
+            "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",
+            "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"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  },
+  {
+    "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"
+            },
+            "MacaroonPath": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        "Macaroon": {
+          "type": "object",
+          "properties": {
+            "caveats": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/caveat"
+              }
+            },
+            "data": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            },
+            "id": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "sig": {
+              "type": "array",
+              "items": {
+                "type": "integer"
+              }
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "data",
+            "location",
+            "id",
+            "caveats",
+            "sig"
+          ]
+        },
+        "MachineStorageId": {
+          "type": "object",
+          "properties": {
+            "attachmenttag": {
+              "type": "string"
+            },
+            "machinetag": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "machinetag",
+            "attachmenttag"
+          ]
+        },
+        "MachineStorageIdsWatchResult": {
+          "type": "object",
+          "properties": {
+            "Changes": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/MachineStorageId"
+              }
+            },
+            "Error": {
+              "$ref": "#/definitions/Error"
+            },
+            "MachineStorageIdsWatcherId": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "MachineStorageIdsWatcherId",
+            "Changes",
+            "Error"
+          ]
+        },
+        "caveat": {
+          "type": "object",
+          "properties": {
+            "caveatId": {
+              "$ref": "#/definitions/packet"
+            },
+            "location": {
+              "$ref": "#/definitions/packet"
+            },
+            "verificationId": {
+              "$ref": "#/definitions/packet"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "location",
+            "caveatId",
+            "verificationId"
+          ]
+        },
+        "packet": {
+          "type": "object",
+          "properties": {
+            "headerLen": {
+              "type": "integer"
+            },
+            "start": {
+              "type": "integer"
+            },
+            "totalLen": {
+              "type": "integer"
+            }
+          },
+          "additionalProperties": false,
+          "required": [
+            "start",
+            "totalLen",
+            "headerLen"
+          ]
+        }
+      }
+    }
+  }
+]
index 346627c..8d7e15c 100644 (file)
@@ -1,11 +1,11 @@
-from .client import AllWatcher as BaseAllWatcher
-from .client import Client
+from .client import AllWatcherFacade as BaseAllWatcher
+from .client import ClientFacade
 
 
 class AllWatcher(BaseAllWatcher):
     async def rpc(self, msg):
         if not hasattr(self, 'Id'):
-            client = Client()
+            client = ClientFacade()
             client.connect(self.connection)
 
             result = await client.WatchAll()
index 2ef903b..dce4697 100644 (file)
@@ -16,6 +16,9 @@ class ModelEntity(object):
         self.data = data
         self.model = model
 
+    def __getattr__(self, name):
+        return self.data[name]
+
 
 class Model(object):
     def __init__(self, connection):
index 4d75484..2b7170e 100644 (file)
@@ -1,7 +1,15 @@
+import logging
+
 from . import model
+from .client import client
+
+log = logging.getLogger(__name__)
 
 
 class Unit(model.ModelEntity):
+    def _get_tag(self):
+        return 'unit-{}'.format(self.data['Name'].replace('/', '-'))
+
     def add_storage(self, name, constraints=None):
         """Add unit storage dynamically.
 
@@ -42,14 +50,27 @@ class Unit(model.ModelEntity):
         """
         pass
 
-    def run(self, command, timeout=None):
+    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
 
         """
-        pass
+        action = client.ActionFacade()
+        conn = await self.model.connection.clone()
+        action.connect(conn)
+
+        log.debug(
+            'Running `%s` on %s', command, self.Name)
+
+        return await action.Run(
+            [],
+            command,
+            [],
+            timeout,
+            [self.Name],
+        )
 
     def run_action(self, action_name, **params):
         """Run action on this unit.
index e31a69a..cdc29dc 100644 (file)
@@ -14,7 +14,7 @@ class UserManagerTest(unittest.TestCase):
         conn = loop.run_until_complete(
             Connection.connect_current())
 
-        um = client.UserManager()
+        um = client.UserManagerFacade()
         um.connect(conn)
         result = loop.run_until_complete(
             um.UserInfo([client.Entity('user-admin')], True))