Added all the other quotas for great win.
[invirt/packages/invirt-base.git] / scripts / invirt-setquotas
1 #!/usr/bin/env python
2
3 """
4 invirt-setquota allows an administrator to set memory, disk, and VM quotas 
5 for an owner.  Invoking with only an owner name returns the current quotas for
6 that owner.  Setting a parameter to -1 restores the default.
7
8 Examples:
9
10     invirt-setquota joeuser -mt 512 -ms None
11 """
12
13 from invirt.database import *
14 from sys import argv, exit, stderr, stdout
15 from optparse import OptionParser
16
17 class invirt_exception(Exception): pass
18
19 def main(argv):
20     try:
21         parser = OptionParser(usage = '%prog owner [options]',
22                 description = __doc__.strip().split('\n\n')[0])
23         parser.add_option('-m', '--mem-total',
24                 type = 'int',
25                 dest = 'memtotal',
26                 help = 'set total concurrent RAM quota')
27         parser.add_option('-n', '--mem-single',
28                 type = 'int',
29                 dest = 'memsingle',
30                 help = 'set single VM RAM quota')
31         parser.add_option('-d', '--disk-total',
32                 type = 'int',
33                 dest = 'disktotal',
34                 help = 'set total disk quota')
35         parser.add_option('-e', '--disk-single',
36                 type = 'int',
37                 dest = 'disksingle',
38                 help = 'set single VM disk quota')
39         parser.add_option('-v', '--vms-total',
40                 type = 'int',
41                 dest = 'vmstotal',
42                 help = 'set total VM quota')
43         parser.add_option('-w', '--vms-active',
44                 type = 'int',
45                 dest = 'vmsactive',
46                 help = 'set active VM quota')
47         opts, args = parser.parse_args()
48
49         print opts
50         if len(args) != 1:
51             raise invirt_exception(__doc__.strip())
52         owner = args[0]
53         connect()
54         session.begin()
55         
56         x = Owner.query().filter_by(owner_id=owner).first()
57
58         edited = False
59         if opts.memtotal != None:
60             total = int(opts.memtotal)
61             if total == -1:
62                 x.ram_quota_total = None
63             else:
64                 x.ram_quota_total = total
65             edited = True
66
67         if opts.memsingle != None:
68             single = int(opts.memsingle)
69             if single == -1:
70                 x.ram_quota_single = None
71             else:
72                 x.ram_quota_single = single
73             edited = True
74
75         if opts.disktotal != None:
76             total = int(opts.disktotal)
77             if total == -1:
78                 x.disk_quota_total = None
79             else:
80                 x.disk_quota_total = total
81             edited = True
82
83         if opts.disksingle != None:
84             single = int(opts.disksingle)
85             if single == -1:
86                 x.disk_quota_single = None
87             else:
88                 x.disk_quota_single = single
89             edited = True
90
91         if opts.vmstotal != None:
92             total = int(opts.vmstotal)
93             if total == -1:
94                 x.vms_quota_total = None
95             else:
96                 x.vms_quota_total = total
97             edited = True
98
99         if opts.vmsactive != None:
100             active = int(opts.vmsactive)
101             if active == -1:
102                 x.vms_quota_active = None
103             else:
104                 x.vms_quota_active = active
105             edited = True
106
107         if edited:
108             session.commit()
109         print str(x)
110
111     except invirt_exception, ex:
112         print >> stderr, ex
113         return 1
114
115 if __name__ == '__main__':
116     exit(main(argv))