Revision 244c552b snf-app/synnefo/tools/admin.py
b/snf-app/synnefo/tools/admin.py | ||
---|---|---|
55 | 55 |
from synnefo.util.dictconfig import dictConfig |
56 | 56 |
|
57 | 57 |
|
58 |
def get_user(uid): |
|
59 |
try: |
|
60 |
uid = int(uid) |
|
61 |
return models.SynnefoUser.objects.get(id=uid) |
|
62 |
except ValueError: |
|
63 |
return None |
|
64 |
except models.SynnefoUser.DoesNotExist: |
|
65 |
return None |
|
66 |
|
|
67 | 58 |
def print_dict(d, exclude=()): |
68 | 59 |
if not d: |
69 | 60 |
return |
... | ... | |
149 | 140 |
if not self.show_deleted: |
150 | 141 |
servers = servers.exclude(deleted=True) |
151 | 142 |
if self.uid: |
152 |
user = get_user(self.uid) |
|
153 |
if user: |
|
154 |
servers = servers.filter(owner=user) |
|
155 |
else: |
|
156 |
print 'Unknown user id' |
|
157 |
return |
|
143 |
servers = servers.filter(userid=self.uid) |
|
158 | 144 |
|
159 | 145 |
print_items(servers, self.detail) |
160 | 146 |
|
161 | 147 |
|
162 |
# User commands |
|
163 |
|
|
164 |
class CreateUser(Command): |
|
165 |
group = 'user' |
|
166 |
name = 'create' |
|
167 |
syntax = '<username> <email>' |
|
168 |
description = 'create a user' |
|
169 |
|
|
170 |
def add_options(self, parser): |
|
171 |
parser.add_option('--realname', dest='realname', metavar='NAME', |
|
172 |
help='set real name of user') |
|
173 |
parser.add_option('--type', dest='type', metavar='TYPE', |
|
174 |
help='set user type') |
|
175 |
|
|
176 |
def main(self, username, email): |
|
177 |
username = username.decode('utf8') |
|
178 |
realname = self.realname or username |
|
179 |
type = self.type or 'USER' |
|
180 |
types = [x[0] for x in models.SynnefoUser.ACCOUNT_TYPE] |
|
181 |
if type not in types: |
|
182 |
valid = ', '.join(types) |
|
183 |
print 'Invalid type. Must be one of:', valid |
|
184 |
return |
|
185 |
|
|
186 |
user = users._register_user(realname, username, email, type) |
|
187 |
print_item(user) |
|
188 |
|
|
189 |
|
|
190 |
class ListUsers(Command): |
|
191 |
group = 'user' |
|
192 |
name = 'list' |
|
193 |
syntax = '[user id]' |
|
194 |
description = 'list users' |
|
195 |
|
|
196 |
def add_options(self, parser): |
|
197 |
parser.add_option('-a', action='store_true', dest='show_deleted', |
|
198 |
default=False, help='also list deleted users') |
|
199 |
parser.add_option('-l', action='store_true', dest='detail', |
|
200 |
default=False, help='show detailed output') |
|
201 |
|
|
202 |
def main(self, user_id=None): |
|
203 |
if user_id: |
|
204 |
users = [models.SynnefoUser.objects.get(id=user_id)] |
|
205 |
else: |
|
206 |
users = models.SynnefoUser.objects.order_by('id') |
|
207 |
if not self.show_deleted: |
|
208 |
users = users.exclude(state='DELETED') |
|
209 |
print_items(users, self.detail, keys=('id', 'name', 'uniq')) |
|
210 |
|
|
211 |
|
|
212 |
class ModifyUser(Command): |
|
213 |
group = 'user' |
|
214 |
name = 'modify' |
|
215 |
syntax = '<user id>' |
|
216 |
description = 'modify a user' |
|
217 |
|
|
218 |
def add_options(self, parser): |
|
219 |
types = ', '.join(x[0] for x in models.SynnefoUser.ACCOUNT_TYPE) |
|
220 |
states = ', '.join(x[0] for x in models.SynnefoUser.ACCOUNT_STATE) |
|
221 |
|
|
222 |
parser.add_option('--realname', dest='realname', metavar='NAME', |
|
223 |
help='set real name of user') |
|
224 |
parser.add_option('--type', dest='type', metavar='TYPE', |
|
225 |
help='set user type (%s)' % types) |
|
226 |
parser.add_option('--state', dest='state', metavar='STATE', |
|
227 |
help='set user state (%s)' % states) |
|
228 |
parser.add_option('--uniq', dest='uniq', metavar='ID', |
|
229 |
help='set external unique ID') |
|
230 |
parser.add_option('--username', dest='username', metavar='NAME', |
|
231 |
help='set username') |
|
232 |
|
|
233 |
def main(self, user_id): |
|
234 |
user = get_user(user_id) |
|
235 |
|
|
236 |
if self.realname: |
|
237 |
user.realname = self.realname |
|
238 |
if self.type: |
|
239 |
allowed = [x[0] for x in models.SynnefoUser.ACCOUNT_TYPE] |
|
240 |
if self.type not in allowed: |
|
241 |
valid = ', '.join(allowed) |
|
242 |
print 'Invalid type. Must be one of:', valid |
|
243 |
return |
|
244 |
user.type = self.type |
|
245 |
if self.state: |
|
246 |
allowed = [x[0] for x in models.SynnefoUser.ACCOUNT_STATE] |
|
247 |
if self.state not in allowed: |
|
248 |
valid = ', '.join(allowed) |
|
249 |
print 'Invalid state. Must be one of:', valid |
|
250 |
return |
|
251 |
user.state = self.state |
|
252 |
if self.uniq: |
|
253 |
user.uniq = self.uniq |
|
254 |
if self.username: |
|
255 |
user.name = self.username |
|
256 |
|
|
257 |
user.save() |
|
258 |
print_item(user) |
|
259 |
|
|
260 |
|
|
261 | 148 |
# Image commands |
262 | 149 |
|
263 | 150 |
class ListImages(Command): |
... | ... | |
331 | 218 |
print 'Invalid format. Must be one of:', valid |
332 | 219 |
return |
333 | 220 |
|
334 |
user = None |
|
335 |
if self.uid: |
|
336 |
user = get_user(self.uid) |
|
337 |
if not user: |
|
338 |
print 'Unknown user id' |
|
339 |
return |
|
340 |
|
|
341 | 221 |
image = models.Image.objects.create( |
342 | 222 |
name=name, |
343 | 223 |
state='ACTIVE', |
344 |
owner=user,
|
|
224 |
owner=self.uid,
|
|
345 | 225 |
backend_id=backend_id, |
346 | 226 |
format=format, |
347 | 227 |
public=self.public) |
... | ... | |
545 | 425 |
print 'Invalid state. Must be one of:', valid |
546 | 426 |
return |
547 | 427 |
image.state = self.state |
548 |
if self.uid: |
|
549 |
image.owner = get_user(self.uid)
|
|
428 |
|
|
429 |
image.userid = self.uid
|
|
550 | 430 |
|
551 | 431 |
image.save() |
552 | 432 |
print_item(image) |
... | ... | |
723 | 603 |
|
724 | 604 |
def main(self): |
725 | 605 |
stats = {} |
726 |
stats['Users'] = models.SynnefoUser.objects.count() |
|
727 | 606 |
stats['Images'] = models.Image.objects.exclude(state='DELETED').count() |
728 | 607 |
stats['Flavors'] = models.Flavor.objects.count() |
729 | 608 |
stats['VMs'] = models.VirtualMachine.objects.filter(deleted=False).count() |
Also available in: Unified diff