Add quota set / list / reset commands

Added:

openstack dns quota

 - list
 - set
 - reset

All sub commands can be scoped to a project using --project-id
If the --project-id does not match the current project id
it will set X-Auth-All-Projects:True

This cannot be a standard quota command as osc does
not allow us to access that command

Change-Id: I8e22535be042608022ef1d1cb3866e7aa5324e84
Depends-On: I7a0b828824ad6f274d922748f5f9a68157cd939a
Related-Bug: #1587927
This commit is contained in:
Graham Hayes 2016-06-28 19:15:57 +01:00
parent 3d24d8d3a5
commit 9ac1cd15bd
5 changed files with 174 additions and 0 deletions

View File

@ -0,0 +1,133 @@
# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# Author: Endre Karlson <endre.karlson@hp.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import itertools
import logging
from cliff import command
from cliff import show
import six
from designateclient.v2.cli import common
LOG = logging.getLogger(__name__)
DNS_QUOTAS = {
"api_export_size": "api-export-size",
"recordset_records": "recordset-records",
"zone_records": "zone-records",
"zone_recordsets": "zone-recordsets",
"zones": "zones"
}
class ListQuotasCommand(show.ShowOne):
"""List quotas"""
# columns = ['resource', 'hard_limit']
def get_parser(self, prog_name):
parser = super(ListQuotasCommand, self).get_parser(prog_name)
common.add_all_common_options(parser)
parser.add_argument(
'--project-id',
help="Project ID Default: current project")
return parser
def take_action(self, parsed_args):
client = self.app.client_manager.dns
common.set_all_common_headers(client, parsed_args)
proj_id = parsed_args.project_id or client.session.get_project_id()
if parsed_args.project_id != client.session.get_project_id():
common.set_all_projects(client, True)
data = client.quotas.list(proj_id)
return six.moves.zip(*sorted(six.iteritems(data)))
class SetQuotasCommand(show.ShowOne):
"""Set blacklist properties"""
def _build_options_list(self):
return itertools.chain(DNS_QUOTAS.items())
def get_parser(self, prog_name):
parser = super(SetQuotasCommand, self).get_parser(prog_name)
common.add_all_common_options(parser)
parser.add_argument('--project-id', help="Project ID")
for k, v in self._build_options_list():
parser.add_argument(
'--%s' % v,
metavar='<%s>' % v,
dest=k,
type=int,
help='New value for the %s quota' % v,
)
return parser
def take_action(self, parsed_args):
client = self.app.client_manager.dns
common.set_all_common_headers(client, parsed_args)
quotas = {}
for k, v in DNS_QUOTAS.items():
value = getattr(parsed_args, k, None)
if value is not None:
quotas[k] = value
proj_id = parsed_args.project_id or client.session.get_project_id()
if parsed_args.project_id != client.session.get_project_id():
common.set_all_projects(client, True)
updated = client.quotas.update(proj_id, quotas)
return six.moves.zip(*sorted(six.iteritems(updated)))
class ResetQuotasCommand(command.Command):
"""Delete blacklist"""
def get_parser(self, prog_name):
parser = super(ResetQuotasCommand, self).get_parser(prog_name)
common.add_all_common_options(parser)
parser.add_argument('--project-id', help="Project ID")
return parser
def take_action(self, parsed_args):
client = self.app.client_manager.dns
common.set_all_common_headers(client, parsed_args)
proj_id = parsed_args.project_id or client.session.get_project_id()
if parsed_args.project_id != client.session.get_project_id():
common.set_all_projects(client, True)
client.quotas.reset(proj_id)
LOG.info('Quota for project %s was reset', parsed_args.project_id)

View File

@ -20,6 +20,7 @@ from designateclient.v2.blacklists import BlacklistController
from designateclient.v2.limits import LimitController from designateclient.v2.limits import LimitController
from designateclient.v2.nameservers import NameServerController from designateclient.v2.nameservers import NameServerController
from designateclient.v2.pools import PoolController from designateclient.v2.pools import PoolController
from designateclient.v2.quotas import QuotasController
from designateclient.v2.recordsets import RecordSetController from designateclient.v2.recordsets import RecordSetController
from designateclient.v2.reverse import FloatingIPController from designateclient.v2.reverse import FloatingIPController
from designateclient.v2.service_statuses import ServiceStatusesController from designateclient.v2.service_statuses import ServiceStatusesController
@ -133,3 +134,4 @@ class Client(object):
self.zone_exports = ZoneExportsController(self) self.zone_exports = ZoneExportsController(self)
self.zone_imports = ZoneImportsController(self) self.zone_imports = ZoneImportsController(self)
self.pools = PoolController(self) self.pools = PoolController(self)
self.quotas = QuotasController(self)

View File

@ -0,0 +1,27 @@
# Copyright 2015 Hewlett-Packard Development Company, L.P.
#
# Author: Endre Karlson <endre.karlson@hp.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from designateclient.v2.base import V2Controller
class QuotasController(V2Controller):
def list(self, project_id):
return self._get('/quotas/%s' % project_id)
def update(self, project_id, values):
return self._patch('/quotas/%s' % project_id, data=values)
def reset(self, project_id):
return self._delete('/quotas/%s' % project_id)

View File

@ -0,0 +1,8 @@
---
features:
- added openstack dns quota command +
list + set + reset sub commands
All sub commands can be scoped to a project using --project-id
If the --project-id does not match the current project id
it will set X-Auth-All-Projects:True

View File

@ -143,6 +143,10 @@ openstack.dns.v2 =
dns_service_list = designateclient.v2.cli.service_statuses:ListServiceStatusesCommand dns_service_list = designateclient.v2.cli.service_statuses:ListServiceStatusesCommand
dns_service_show = designateclient.v2.cli.service_statuses:ShowServiceStatusCommand dns_service_show = designateclient.v2.cli.service_statuses:ShowServiceStatusCommand
dns_quota_list = designateclient.v2.cli.quotas:ListQuotasCommand
dns_quota_set = designateclient.v2.cli.quotas:SetQuotasCommand
dns_quota_reset = designateclient.v2.cli.quotas:ResetQuotasCommand
[build_sphinx] [build_sphinx]
all_files = 1 all_files = 1
build-dir = doc/build build-dir = doc/build