314 lines
8.7 KiB
Python
314 lines
8.7 KiB
Python
# Copyright (c) 2016 Ericsson AB.
|
|
#
|
|
# 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 osc_lib.command import command
|
|
|
|
from kingbirdclient.commands.v1 import base
|
|
from kingbirdclient import exceptions
|
|
|
|
|
|
def format(quotas=None):
|
|
columns = (
|
|
'Quota',
|
|
'Limit'
|
|
)
|
|
|
|
if quotas:
|
|
data = (
|
|
quotas._data,
|
|
quotas._Limit,
|
|
)
|
|
|
|
else:
|
|
data = (tuple('<none>' for _ in range(len(columns))),)
|
|
|
|
return columns, data
|
|
|
|
|
|
def detailformat(quotas=None):
|
|
columns = (
|
|
'Quota',
|
|
'Usage',
|
|
'Limit',
|
|
)
|
|
|
|
if quotas:
|
|
data = (
|
|
quotas._data,
|
|
quotas._Usage,
|
|
quotas._Limit,
|
|
)
|
|
|
|
else:
|
|
data = (tuple('<none>' for _ in range(len(columns))),)
|
|
|
|
return columns, data
|
|
|
|
|
|
class ListDefaults(base.KingbirdLister):
|
|
"""List all default quotas."""
|
|
|
|
def _get_format_function(self):
|
|
return format
|
|
|
|
def _get_resources(self, parsed_args):
|
|
kingbird_client = self.app.client_manager.sync_engine
|
|
return kingbird_client.quota_manager.list_defaults()
|
|
|
|
|
|
class GlobalLimits(base.KingbirdLister):
|
|
"""Lists the global limit of a tenant."""
|
|
|
|
def _get_format_function(self):
|
|
return format
|
|
|
|
def get_parser(self, parsed_args):
|
|
parser = super(GlobalLimits, self).get_parser(parsed_args)
|
|
|
|
parser.add_argument(
|
|
'--tenant',
|
|
help='Lists global limit of a specified tenant-id.'
|
|
' Admin tenant can perform this operation.'
|
|
)
|
|
|
|
return parser
|
|
|
|
def _get_resources(self, parsed_args):
|
|
kingbird_client = self.app.client_manager.sync_engine
|
|
target_tenant_id = parsed_args.tenant
|
|
return kingbird_client.quota_manager.global_limits(target_tenant_id)
|
|
|
|
|
|
class UpdateGlobalLimits(base.KingbirdLister):
|
|
"""Update the quotas for a tenant."""
|
|
|
|
def _get_format_function(self):
|
|
return format
|
|
|
|
def get_parser(self, parsed_args):
|
|
parser = super(UpdateGlobalLimits, self).get_parser(parsed_args)
|
|
|
|
parser.add_argument(
|
|
'tenant',
|
|
help='ID of tenant to set the quotas .'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--metadata_items',
|
|
help='New value for the "metadata-items" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--subnet',
|
|
help='New value for the "subnet" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--network',
|
|
help='New value for the "network" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--floatingip',
|
|
help='New value for the "floatingip" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--gigabytes',
|
|
help='New value for the "gigabytes" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--backup_gigabytes',
|
|
help='New value for the "backup_gigabytes" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--ram',
|
|
help='New value for the "ram" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--floating_ips',
|
|
help='New value for the "floating_ips" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--snapshots',
|
|
help='New value for the "snapshots" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--security_group_rule',
|
|
help='New value for the "security_group_rule" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--instances',
|
|
help='New value for the "instances" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--key_pairs',
|
|
help='New value for the "key_pairs" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--volumes',
|
|
help='New value for the "volumes" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--router',
|
|
help='New value for the "router" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--security_group',
|
|
help='New value for the "security_group" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--cores',
|
|
help='New value for the "cores" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--backups',
|
|
help='New value for the "backups" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--fixed_ips',
|
|
help='New value for the "fixed_ips" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--port',
|
|
help='New value for the "port" quota'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--security_groups',
|
|
help='New value for the "security_groups" quota'
|
|
)
|
|
|
|
return parser
|
|
|
|
def _get_resources(self, parsed_args):
|
|
target_tenant_id = parsed_args.tenant
|
|
kingbird_client = self.app.client_manager.sync_engine
|
|
kwargs = {
|
|
"metadata_items": parsed_args.metadata_items,
|
|
"subnet": parsed_args.subnet,
|
|
"network": parsed_args.network,
|
|
"floatingip": parsed_args.floatingip,
|
|
"gigabytes": parsed_args.gigabytes,
|
|
"backup_gigabytes": parsed_args.backup_gigabytes,
|
|
"ram": parsed_args.ram,
|
|
"floating_ips": parsed_args.floating_ips,
|
|
"snapshots": parsed_args.snapshots,
|
|
"security_group_rule": parsed_args.security_group_rule,
|
|
"instances": parsed_args.instances,
|
|
"key_pairs": parsed_args.key_pairs,
|
|
"volumes": parsed_args.volumes,
|
|
"router": parsed_args.router,
|
|
"security_group": parsed_args.security_group,
|
|
"cores": parsed_args.cores,
|
|
"backups": parsed_args.backups,
|
|
"fixed_ips": parsed_args.fixed_ips,
|
|
"port": parsed_args.port,
|
|
"security_groups": parsed_args.security_groups
|
|
}
|
|
return kingbird_client.quota_manager.\
|
|
update_global_limits(target_tenant_id, **kwargs)
|
|
|
|
|
|
class ShowQuotaDetail(base.KingbirdLister):
|
|
"""List the Detail limit for a tenant."""
|
|
|
|
def _get_format_function(self):
|
|
return detailformat
|
|
|
|
def get_parser(self, parsed_args):
|
|
parser = super(ShowQuotaDetail, self).get_parser(parsed_args)
|
|
|
|
parser.add_argument(
|
|
'--tenant',
|
|
help='Lists global limit of a specified tenant-id.'
|
|
' Admin tenant can perform this operation.'
|
|
)
|
|
|
|
return parser
|
|
|
|
def _get_resources(self, parsed_args):
|
|
kingbird_client = self.app.client_manager.sync_engine
|
|
target_tenant_id = parsed_args.tenant
|
|
return kingbird_client.quota_manager.quota_detail(target_tenant_id)
|
|
|
|
|
|
class SyncQuota(command.Command):
|
|
"""On Demand quota sync for a tenant."""
|
|
|
|
def get_parser(self, prog_name):
|
|
parser = super(SyncQuota, self).get_parser(prog_name)
|
|
|
|
parser.add_argument(
|
|
'tenant',
|
|
help='tenant-id to delete quotas.'
|
|
)
|
|
|
|
return parser
|
|
|
|
def take_action(self, parsed_args):
|
|
kingbird_client = self.app.client_manager.sync_engine
|
|
target_tenant = parsed_args.tenant
|
|
try:
|
|
kingbird_client.quota_manager.sync_quota(target_tenant)
|
|
print("Request to sync quota for tenant %s has been triggered." %
|
|
(parsed_args.tenant))
|
|
except Exception as e:
|
|
print(e)
|
|
error_msg = "Unable to sync quota for tenant %s." \
|
|
% (parsed_args.tenant)
|
|
raise exceptions.KingbirdClientException(error_msg)
|
|
|
|
|
|
class DeleteQuota(command.Command):
|
|
"""Delete quota for a tenant."""
|
|
|
|
def get_parser(self, prog_name):
|
|
parser = super(DeleteQuota, self).get_parser(prog_name)
|
|
|
|
parser.add_argument(
|
|
'tenant',
|
|
help='ID of tenant to delete quotas.'
|
|
)
|
|
|
|
return parser
|
|
|
|
def take_action(self, parsed_args):
|
|
kingbird_client = self.app.client_manager.sync_engine
|
|
target_tenant = parsed_args.tenant
|
|
try:
|
|
kingbird_client.quota_manager.\
|
|
delete_quota(target_tenant)
|
|
print("Request to delete quotas"
|
|
" for tenant %s has been accepted." %
|
|
(parsed_args.tenant))
|
|
except Exception as e:
|
|
print(e)
|
|
error_msg = "Unable to delete quota for specified resource."
|
|
raise exceptions.KingbirdClientException(error_msg)
|