File: //snap/google-cloud-cli/394/lib/googlecloudsdk/api_lib/krmapihosting/util.py
# -*- coding: utf-8 -*- #
# Copyright 2021 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.
"""KRM API Hosting API utilities."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from apitools.base.py import encoding
from googlecloudsdk.api_lib.util import apis
from googlecloudsdk.api_lib.util import waiter
from googlecloudsdk.core import resources
_DEFAULT_API_VERSION = 'v1'
# The maximum amount of time to wait in between polling long-running operations.
_WAIT_CEILING_MS = 10 * 1000
# The maximum amount of time to wait for the long-running operation.
_MAX_WAIT_TIME_MS = 30 * 60 * 1000
def GetMessagesModule(api_version=_DEFAULT_API_VERSION):
return apis.GetMessagesModule('krmapihosting', api_version)
def GetClientInstance(api_version=_DEFAULT_API_VERSION, use_http=True):
"""Returns an instance of the KRM API Hosting client.
Args:
api_version: The desired api version.
use_http: bool, True to create an http object for this client.
Returns:
base_api.BaseApiClient, An instance of the Cloud Build client.
"""
return apis.GetClientInstance(
'krmapihosting', api_version, no_http=(not use_http))
def GetKrmApiHost(name):
"""Fetches a KRMApiHost instance, and returns it as a messages.KrmApiHost.
Calls into the GetKrmApiHosts API.
Args:
name: the fully qualified name of the instance, e.g.
"projects/p/locations/l/krmApiHosts/k".
Returns:
A messages.KrmApiHost.
Raises:
HttpNotFoundError: if the instance didn't exist.
"""
client = GetClientInstance()
messages = client.MESSAGES_MODULE
return client.projects_locations_krmApiHosts.Get(
messages.KrmapihostingProjectsLocationsKrmApiHostsGetRequest(name=name))
def ListKrmApiHosts(parent):
"""Calls into the ListKrmApiHosts API.
Args:
parent: the fully qualified name of the parent, e.g.
"projects/p/locations/l".
Returns:
A list of messages.KrmApiHost.
"""
client = GetClientInstance()
messages = client.MESSAGES_MODULE
resp = client.projects_locations_krmApiHosts.List(
messages.KrmapihostingProjectsLocationsKrmApiHostsListRequest(
parent=parent))
return resp.krmApiHosts
def CreateKrmApiHost(parent, krm_api_host_id, krm_api_host):
"""Creates a KRMApiHost instance, and returns the creation Operation.
Calls into the CreateKrmApiHost API.
Args:
parent: the fully qualified name of the parent, e.g.
"projects/p/locations/l".
krm_api_host_id: the ID of the krmApiHost, e.g. "my-cluster" in
"projects/p/locations/l/krmApiHosts/my-cluster".
krm_api_host: a messages.KrmApiHost resource (containing properties like
the bundle config)
Returns:
A messages.OperationMetadata representing the long-running operation.
"""
client = GetClientInstance()
messages = client.MESSAGES_MODULE
return client.projects_locations_krmApiHosts.Create(
messages.KrmapihostingProjectsLocationsKrmApiHostsCreateRequest(
parent=parent, krmApiHost=krm_api_host, krmApiHostId=krm_api_host_id))
def WaitForCreateKrmApiHostOperation(
operation,
progress_message='Waiting for cluster to create',
max_wait_ms=_MAX_WAIT_TIME_MS):
"""Waits for the given "create" LRO to complete.
Args:
operation: the operation to poll.
progress_message: the message to display while waiting for the operation.
max_wait_ms: number of ms to wait before raising TimeoutError.
Raises:
apitools.base.py.HttpError: if the request returns an HTTP error.
Returns:
A messages.KrmApiHost resource.
"""
client = GetClientInstance()
operation_ref = resources.REGISTRY.ParseRelativeName(
operation.name, collection='krmapihosting.projects.locations.operations')
poller = waiter.CloudOperationPollerNoResources(
client.projects_locations_operations)
result = waiter.WaitFor(
poller,
operation_ref,
progress_message,
max_wait_ms=max_wait_ms,
wait_ceiling_ms=_WAIT_CEILING_MS)
json = encoding.MessageToJson(result)
messages = GetMessagesModule()
return encoding.JsonToMessage(messages.KrmApiHost, json)