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