diff --git a/bin/nova-manage b/bin/nova-manage index 1bd0691f..e581c8fd 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -224,6 +224,10 @@ def _db_error(caught_exception): class ProjectCommands(object): """Class for managing projects.""" + @args('--project', dest="project_id", metavar='', + help='Project name') + @args('--key', dest="key", metavar='', help='Key') + @args('--value', dest="value", metavar='', help='Value') def quota(self, project_id, key=None, value=None): """Set or display quotas for project""" ctxt = context.get_admin_context() @@ -256,6 +260,52 @@ class ProjectCommands(object): AccountCommands = ProjectCommands +class QuotaCommands(object): + """Class for managing quotas.""" + + @args('--project', dest="project_id", metavar='', + help='Project name') + @args('--key', dest="key", metavar='', help='Key') + @args('--value', dest="value", metavar='', help='Value') + def project(self, project_id, key=None, value=None): + """Set or display quotas for project""" + ctxt = context.get_admin_context() + if key: + if value.lower() == 'unlimited': + value = None + try: + db.quota_update(ctxt, project_id, key, value) + except exception.ProjectQuotaNotFound: + db.quota_create(ctxt, project_id, key, value) + project_quota = QUOTAS.get_project_quotas(ctxt, project_id) + for key, value in project_quota.iteritems(): + if value['limit'] < 0 or value['limit'] is None: + value['limit'] = 'unlimited' + print '%s: %s' % (key, value['limit']) + + @args('--user', dest="user_id", metavar='', + help='User name') + @args('--project', dest="project_id", metavar='', + help='Project name') + @args('--key', dest="key", metavar='', help='Key') + @args('--value', dest="value", metavar='', help='Value') + def user(self, user_id, project_id, key=None, value=None): + """Set or display quotas for user""" + ctxt = context.get_admin_context() + if key: + if value.lower() == 'unlimited': + value = None + try: + db.quota_update_for_user(ctxt, user_id, project_id, key, value) + except exception.UserQuotaNotFound: + db.quota_create_for_user(ctxt, user_id, project_id, key, value) + user_quota = QUOTAS.get_user_quotas(ctxt, user_id, project_id) + for key, value in user_quota.iteritems(): + if value['limit'] < 0 or value['limit'] is None: + value['limit'] = 'unlimited' + print '%s: %s' % (key, value['limit']) + + class FixedIpCommands(object): """Class for managing fixed ip.""" @@ -1319,6 +1369,7 @@ CATEGORIES = [ ('logs', GetLogCommands), ('network', NetworkCommands), ('project', ProjectCommands), + ('quota', QuotaCommands), ('service', ServiceCommands), ('shell', ShellCommands), ('sm', StorageManagerCommands), diff --git a/nova/tests/policy.json b/nova/tests/policy.json index 3e4d166a..4836a33b 100644 --- a/nova/tests/policy.json +++ b/nova/tests/policy.json @@ -105,7 +105,8 @@ "compute_extension:networks": [], "compute_extension:networks:view": [], "compute_extension:quotas:show": [], - "compute_extension:quotas:update": [], + "compute_extension:quotas:update_for_project": [], + "compute_extension:quotas:update_for_user": [], "compute_extension:quota_classes": [], "compute_extension:rescue": [], "compute_extension:security_groups": [],