Controllers =========== A Juju controller provides websocket endpoints for itself and each of its models. In order to do anything useful, the juju lib must connect to one of these endpoints. Connecting to the controller endpoint is useful if you want to programmatically create a new model. If the model you want to use already exists, you can connect directly to it (see py:doc:`model`). For API docs, see py:class:`juju.controller.Controller`. Connecting to the Current Controller ------------------------------------ Connect to the currently active Juju controller (the one returned by `juju switch`). This only works if you have the Juju CLI client installed. .. code:: python from juju.controller import Controller controller = Controller() await controller.connect() Connecting to a Named Controller -------------------------------- Connect to a controller by name. .. code:: python from juju.controller import Controller controller = Controller() await controller.connect('mycontroller') Connecting with Authentication ------------------------------ You can control what user you are connecting with by specifying either a username/password pair, or a macaroon or bakery client that can provide a macaroon. .. code:: python controller = Controller() await controller.connect(username='admin', password='f53f08cfc32a2e257fe5393271d89d62') # or with a macaroon await controller.connect(macaroons=[ { "Name": "macaroon-218d87053ad19626bcd5a0eef0bc9ba8bd4fbd80a968f52a5fd430b2aa8660df", "Value": "W3siY2F2ZWF0cyI6 ... jBkZiJ9XQ==", "Domain": "10.130.48.27", "Path": "/auth", "Secure": false, "HostOnly": true, "Expires": "2018-03-07T22:07:23Z", }, ]) # or with a bakery client from macaroonbakery.httpbakery import Client from http.cookiejar import FileCookieJar bakery_client=Client() bakery_client.cookies = FileCookieJar('cookies.txt') controller = Controller() await controller.connect(bakery_client=bakery_client) Connecting with an Explicit Endpoint ------------------------------------ The most flexible, but also most verbose, way to connect is using the API endpoint url and credentials directly. This method does NOT require the Juju CLI client to be installed. .. code:: python controller = Controller() await controller.connect( endpoint='10.0.4.171:17070', username='admin', password='f53f08cfc32a2e257fe5393271d89d62', cacert=None, # Left out for brevity, but if you have a cert string you # should pass it in. You can get the cert from the output # of The `juju show-controller` command. )