#!/usr/bin/env python
"""
-invirt-setquota allows an administrator to set memory, disk, and VM quotas
+invirt-quota allows an administrator to set memory, disk, and VM quotas
for an owner. Invoking with only an owner name returns the current quotas for
that owner. Setting a parameter to -1 restores the default.
-
-Examples:
-
- invirt-setquota joeuser -mt 512 -ms -1
"""
-from invirt.database import *
-from sys import argv, exit, stderr, stdout
-from optparse import OptionParser
+import sys
+import optparse
+
+from invirt import database
def main(argv):
- parser = OptionParser(usage = '%prog owner [options]',
- description = __doc__.strip().split('\n\n')[0])
- parser.add_option('-m', '--mem-total',
+ parser = optparse.OptionParser(usage = '%prog <owner> [options]',
+ description = __doc__.strip())
+ parser.add_option('-m', '--ram-total',
type = 'int',
- dest = 'memtotal',
+ dest = 'ramtotal',
help = 'set total concurrent RAM quota')
- parser.add_option('-n', '--mem-single',
+ parser.add_option('-n', '--ram-single',
type = 'int',
- dest = 'memsingle',
+ dest = 'ramsingle',
help = 'set single VM RAM quota')
parser.add_option('-d', '--disk-total',
type = 'int',
opts, args = parser.parse_args()
if len(args) != 1:
- print >> stderr, __doc__.strip()
+ parser.print_help(sys.stderr)
return 1
- owner = args[0]
- connect()
- session.begin()
+ owner_id = args[0]
+ database.connect()
+ database.session.begin()
- x = Owner.query().filter_by(owner_id=owner).first()
- if x == None:
- x = Owner(owner_id=owner)
-
- if opts.memtotal != None:
- total = int(opts.memtotal)
- if total == -1:
- x.ram_quota_total = None
- else:
- x.ram_quota_total = total
-
- if opts.memsingle != None:
- single = int(opts.memsingle)
- if single == -1:
- x.ram_quota_single = None
- else:
- x.ram_quota_single = single
-
- if opts.disktotal != None:
- total = int(opts.disktotal)
- if total == -1:
- x.disk_quota_total = None
- else:
- x.disk_quota_total = total
-
- if opts.disksingle != None:
- single = int(opts.disksingle)
- if single == -1:
- x.disk_quota_single = None
- else:
- x.disk_quota_single = single
-
- if opts.vmstotal != None:
- total = int(opts.vmstotal)
- if total == -1:
- x.vms_quota_total = None
- else:
- x.vms_quota_total = total
+ owner = database.Owner.query().filter_by(owner_id=owner_id).first()
+ if owner is None:
+ owner = database.Owner(owner_id=owner_id)
- if opts.vmsactive != None:
- active = int(opts.vmsactive)
- if active == -1:
- x.vms_quota_active = None
- else:
- x.vms_quota_active = active
+ for resource, scope in [('ram', 'total'), ('ram', 'single'),
+ ('disk', 'total'), ('disk', 'single'),
+ ('vms', 'total'), ('vms', 'active')]:
+ val = getattr(opts, resource+scope)
+ if val is not None:
+ setattr(owner, resource+'_quota_'+scope, val if val >= 0 else None)
- session.commit()
- print str(x)
+ database.session.commit()
+ print owner
return 0
if __name__ == '__main__':
- exit(main(argv))
+ sys.exit(main(sys.argv))