3 A Juju controller provides websocket endpoints for each of its
4 models. In order to do anything useful with a model, the juju lib must
5 connect to one of these endpoints. There are several ways to do this.
7 For api docs, see :class:`juju.model.Model`.
10 Connecting to the Current Model
11 -------------------------------
12 Connect to the currently active Juju model (the one returned by
13 `juju switch`). This only works if you have the Juju CLI client installed.
17 from juju.model import Model
20 await model.connect_current()
23 Connecting to a Named Model
24 ---------------------------
25 Connect to a model by name, using the same format as that returned from the
26 `juju switch` command. The accepted format is '[controller:][user/]model'.
27 This only works if you have the Juju CLI client installed.
32 # juju-2.0.1:admin/libjuju
34 from juju.model import Model
37 await model.connect_model('juju-2.0.1:admin/libjuju')
40 Connecting with Username/Password Authentication
41 ------------------------------------------------
42 The most flexible, but also most verbose, way to connect is using the API
43 endpoint url and credentials directly. This method does NOT require the Juju
44 CLI client to be installed.
48 from juju.model import Model
52 controller_endpoint = '10.0.4.171:17070'
53 model_uuid = 'e8399ac7-078c-4817-8e5e-32316d55b083'
55 password = 'f53f08cfc32a2e257fe5393271d89d62'
57 # Left out for brevity, but if you have a cert string you should pass it in.
58 # You can copy the cert from the output of The `juju show-controller`
71 Connecting with Macaroon Authentication
72 ---------------------------------------
73 To connect to a shared model, or a model an a shared controller, you'll need
74 to use macaroon authentication. The simplest example is shown below, and uses
75 already-discharged macaroons from the local filesystem. This will work if you
76 have the Juju CLI installed.
80 The library does not yet contain support for fetching and discharging
81 macaroons. Until it does, if you want to use macaroon auth, you'll need
82 to supply already-discharged macaroons yourself.
86 from juju.client.connection import get_macaroons()
87 from juju.model import Model
91 controller_endpoint = '10.0.4.171:17070'
92 model_uuid = 'e8399ac7-078c-4817-8e5e-32316d55b083'
96 macaroons = get_macaroons()
108 Creating and Destroying a Model
109 -------------------------------
110 Example of creating a new model and then destroying it. See
111 :meth:`juju.controller.Controller.add_model` and
112 :meth:`juju.controller.Controller.destroy_model` for more info.
116 from juju.controller import Controller
118 controller = Controller()
119 await controller.connect_current()
121 # Create our new model
122 model = await controller.add_model(
123 'mymodel', # name of your new model
126 # Do stuff with our model...
129 await model.disconnect()
130 await controller.destroy_model(model.info.uuid)