2d8b4faa7294e1e1926a9c52350b5f6ee47ad24e
[osm/N2VC.git] / juju / controller.py
1 import asyncio
2 import logging
3
4 from .client import client
5 from .client import connection
6 from .client import watcher
7 from .model import Model
8
9 log = logging.getLogger(__name__)
10
11
12 class Controller(object):
13 async def connect_current(self):
14 """Connect to the current Juju controller.
15
16 """
17 self.connection = (
18 await connection.Connection.connect_current_controller())
19
20 async def disconnect(self):
21 """Shut down the watcher task and close websockets.
22
23 """
24 if self.connection and self.connection.is_open:
25 log.debug('Closing controller connection')
26 await self.connection.close()
27 self.connection = None
28
29 async def add_model(
30 self, name, cloud, credential, owner=None,
31 config=None, region=None):
32 """Add a model to this controller.
33
34 :param str name: Name of the model
35 :param dict config: Model configuration
36 :param str credential: e.g. '<cloud>:<credential>'
37 :param str owner: Owner username
38
39 """
40 model_facade = client.ModelManagerFacade()
41 model_facade.connect(self.connection)
42
43 log.debug('Creating model %s', name)
44
45 model_info = await model_facade.CreateModel(
46 cloud,
47 config,
48 credential,
49 name,
50 owner or self.connection.info['user-info']['identity'],
51 region,
52 )
53
54 model = Model()
55 await model.connect(
56 self.connection.endpoint,
57 model_info.uuid,
58 self.connection.username,
59 self.connection.password,
60 self.connection.cacert,
61 self.connection.macaroons,
62 )
63
64 return model
65
66 async def destroy_models(self, *args):
67
68 """Destroy a model to this controller.
69
70 :param str : model-<UUID>
71
72 """
73 model_facade = client.ModelManagerFacade()
74 model_facade.connect(self.connection)
75
76 for arg in args:
77 log.debug('Destroying Model %s', arg)
78 await model_facade.DestroyModels([client.Entity(arg)])
79
80 def add_user(self, username, display_name=None, acl=None, models=None):
81 """Add a user to this controller.
82
83 :param str username: Username
84 :param str display_name: Display name
85 :param str acl: Access control, e.g. 'read'
86 :param list models: Models to which the user is granted access
87
88 """
89 pass
90
91 def change_user_password(self, username, password):
92 """Change the password for a user in this controller.
93
94 :param str username: Username
95 :param str password: New password
96
97 """
98 pass
99
100 def destroy(self, destroy_all_models=False):
101 """Destroy this controller.
102
103 :param bool destroy_all_models: Destroy all hosted models in the
104 controller.
105
106 """
107 pass
108
109 def disable_user(self, username):
110 """Disable a user.
111
112 :param str username: Username
113
114 """
115 pass
116
117 def enable_user(self):
118 """Re-enable a previously disabled user.
119
120 """
121 pass
122
123 def kill(self):
124 """Forcibly terminate all machines and other associated resources for
125 this controller.
126
127 """
128 pass
129
130 def get_models(self, all_=False, username=None):
131 """Return list of available models on this controller.
132
133 :param bool all_: List all models, regardless of user accessibilty
134 (admin use only)
135 :param str username: User for which to list models (admin use only)
136
137 """
138 pass
139
140 def get_payloads(self, *patterns):
141 """Return list of known payloads.
142
143 :param str \*patterns: Patterns to match against
144
145 Each pattern will be checked against the following info in Juju::
146
147 - unit name
148 - machine id
149 - payload type
150 - payload class
151 - payload id
152 - payload tag
153 - payload status
154
155 """
156 pass
157
158 def get_users(self, all_=False):
159 """Return list of users that can connect to this controller.
160
161 :param bool all_: Include disabled users
162
163 """
164 pass
165
166 def login(self):
167 """Log in to this controller.
168
169 """
170 pass
171
172 def logout(self, force=False):
173 """Log out of this controller.
174
175 :param bool force: Don't fail even if user not previously logged in
176 with a password
177
178 """
179 pass
180
181 def get_model(self, name):
182 """Get a model by name.
183
184 :param str name: Model name
185
186 """
187 pass
188
189 def get_user(self, username):
190 """Get a user by name.
191
192 :param str username: Username
193
194 """
195 pass