150 lines
4.5 KiB
Python
150 lines
4.5 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2023 Google LLC. All Rights Reserved.
|
|
#
|
|
# 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.
|
|
"""Utilities for Cloud Quotas API QuotaInfo."""
|
|
|
|
from apitools.base.py import list_pager
|
|
from googlecloudsdk.api_lib.quotas import message_util
|
|
from googlecloudsdk.api_lib.util import apis
|
|
from googlecloudsdk.calliope import base
|
|
|
|
PAGE_SIZE = 10
|
|
_CONSUMER_LOCATION_SERVICE_RESOURCE = '%s/locations/global/services/%s'
|
|
|
|
|
|
VERSION_MAP = {
|
|
base.ReleaseTrack.ALPHA: 'v1alpha',
|
|
base.ReleaseTrack.BETA: 'v1beta',
|
|
base.ReleaseTrack.GA: 'v1',
|
|
}
|
|
|
|
|
|
def _GetClientInstance(release_track, no_http=False):
|
|
api_version = VERSION_MAP.get(release_track)
|
|
return apis.GetClientInstance('cloudquotas', api_version, no_http=no_http)
|
|
|
|
|
|
def GetQuotaInfo(
|
|
project,
|
|
folder,
|
|
organization,
|
|
service,
|
|
quota_id,
|
|
release_track=base.ReleaseTrack.GA,
|
|
):
|
|
"""Retrieve the QuotaInfo of a quota for a project, folder or organization.
|
|
|
|
Args:
|
|
project: str, The project ID.
|
|
folder: str, The folder ID.
|
|
organization: str, The organization ID.
|
|
service: str, The service name.
|
|
quota_id: str, The quota ID.
|
|
release_track: str, The release track.
|
|
|
|
Returns:
|
|
The request QuotaInfo
|
|
"""
|
|
consumer = message_util.CreateConsumer(project, folder, organization)
|
|
client = _GetClientInstance(release_track)
|
|
messages = client.MESSAGES_MODULE
|
|
name = (
|
|
_CONSUMER_LOCATION_SERVICE_RESOURCE % (consumer, service)
|
|
+ '/quotaInfos/%s' % quota_id
|
|
)
|
|
|
|
if project:
|
|
request = messages.CloudquotasProjectsLocationsServicesQuotaInfosGetRequest(
|
|
name=name
|
|
)
|
|
return client.projects_locations_services_quotaInfos.Get(request)
|
|
|
|
if folder:
|
|
request = messages.CloudquotasFoldersLocationsServicesQuotaInfosGetRequest(
|
|
name=name
|
|
)
|
|
return client.folders_locations_services_quotaInfos.Get(request)
|
|
|
|
if organization:
|
|
request = (
|
|
messages.CloudquotasOrganizationsLocationsServicesQuotaInfosGetRequest(
|
|
name=name
|
|
)
|
|
)
|
|
return client.organizations_locations_services_quotaInfos.Get(request)
|
|
|
|
|
|
def ListQuotaInfo(args, release_track=base.ReleaseTrack.GA):
|
|
"""Lists info for all quotas for a given project, folder or organization.
|
|
|
|
Args:
|
|
args: argparse.Namespace, The arguments that this command was invoked with.
|
|
release_track: str, The release track.
|
|
|
|
Returns:
|
|
List of QuotaInfo
|
|
"""
|
|
consumer = message_util.CreateConsumer(
|
|
args.project, args.folder, args.organization
|
|
)
|
|
client = _GetClientInstance(release_track)
|
|
messages = client.MESSAGES_MODULE
|
|
parent = _CONSUMER_LOCATION_SERVICE_RESOURCE % (consumer, args.service)
|
|
|
|
if args.project:
|
|
request = (
|
|
messages.CloudquotasProjectsLocationsServicesQuotaInfosListRequest(
|
|
parent=parent,
|
|
pageSize=args.page_size,
|
|
)
|
|
)
|
|
return list_pager.YieldFromList(
|
|
client.projects_locations_services_quotaInfos,
|
|
request,
|
|
batch_size_attribute='pageSize',
|
|
batch_size=args.page_size if args.page_size is not None else PAGE_SIZE,
|
|
field='quotaInfos',
|
|
limit=args.limit,
|
|
)
|
|
|
|
if args.folder:
|
|
request = messages.CloudquotasFoldersLocationsServicesQuotaInfosListRequest(
|
|
parent=parent,
|
|
pageSize=args.page_size,
|
|
)
|
|
return list_pager.YieldFromList(
|
|
client.folders_locations_services_quotaInfos,
|
|
request,
|
|
batch_size_attribute='pageSize',
|
|
batch_size=args.page_size if args.page_size is not None else PAGE_SIZE,
|
|
field='quotaInfos',
|
|
limit=args.limit,
|
|
)
|
|
|
|
if args.organization:
|
|
request = (
|
|
messages.CloudquotasOrganizationsLocationsServicesQuotaInfosListRequest(
|
|
parent=parent,
|
|
pageSize=args.page_size,
|
|
)
|
|
)
|
|
return list_pager.YieldFromList(
|
|
client.organizations_locations_services_quotaInfos,
|
|
request,
|
|
batch_size_attribute='pageSize',
|
|
batch_size=args.page_size if args.page_size is not None else PAGE_SIZE,
|
|
field='quotaInfos',
|
|
limit=args.limit,
|
|
)
|