File: //snap/google-cloud-cli/396/lib/googlecloudsdk/api_lib/netapp/netapp_client.py
# -*- coding: utf-8 -*- #
# Copyright 2022 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.
"""Useful commands for interacting with the Cloud NetApp Files API."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from apitools.base.py import list_pager
from googlecloudsdk.api_lib.netapp import util
from googlecloudsdk.api_lib.util import waiter
from googlecloudsdk.calliope import base
API_NAME = 'netapp'
ALPHA_API_VERSION = 'v1alpha1'
class NetAppClient(object):
"""Wrapper for working with the Cloud NetApp Files API Client."""
def __init__(self, release_track=base.ReleaseTrack.ALPHA):
if release_track == base.ReleaseTrack.ALPHA:
self._adapter = AlphaNetappAdapter()
elif release_track == base.ReleaseTrack.BETA:
self._adapter = BetaNetappAdapter()
elif release_track == base.ReleaseTrack.GA:
self._adapter = NetappAdapter()
else:
raise ValueError('[{}] is not a valid API version.'.format(
util.VERSION_MAP[release_track]))
@property
def client(self):
return self._adapter.client
@property
def messages(self):
return self._adapter.messages
def GetOperation(self, operation_ref):
"""Gets description of a long-running operation.
Args:
operation_ref: the operation reference.
Returns:
messages.GoogleLongrunningOperation, the operation.
"""
request = self.messages.NetappProjectsLocationsOperationsGetRequest(
name=operation_ref.RelativeName())
return self.client.projects_locations_operations.Get(request)
def WaitForOperation(self, operation_ref):
"""Waits on the long-running operation until the done field is True.
Args:
operation_ref: the operation reference.
Raises:
waiter.OperationError: if the operation contains an error.
Returns:
the 'response' field of the Operation.
"""
return waiter.WaitFor(
waiter.CloudOperationPollerNoResources(
self.client.projects_locations_operations), operation_ref,
'Waiting for [{0}] to finish'.format(operation_ref.Name()))
def CancelOperation(self, operation_ref):
"""Cancels a long-running operation.
Args:
operation_ref: the operation reference.
Returns:
Empty response message.
"""
request = self.messages.NetappProjectsLocationsOperationsCancelRequest(
name=operation_ref.RelativeName())
return self.client.projects_locations_operations.Cancel(request)
def GetLocation(self, location_ref):
request = self.messages.NetappProjectsLocationsGetRequest(name=location_ref)
return self.client.projects_locations.Get(request)
def ListLocations(self, project_ref, limit=None):
request = self.messages.NetappProjectsLocationsListRequest(
name=project_ref.RelativeName())
return list_pager.YieldFromList(
self.client.projects_locations,
request,
field='locations',
limit=limit,
batch_size_attribute='pageSize')
def ListOperations(self, location_ref, limit=None): # pylint: disable=redefined-builtin
"""Make API calls to List active Cloud NetApp operations.
Args:
location_ref: The parsed location of the listed NetApp resources.
limit: The number of Cloud NetApp resources to limit the results to. This
limit is passed to the server and the server does the limiting.
Returns:
Generator that yields the Cloud NetApp resources.
"""
request = self.messages.NetappProjectsLocationsOperationsListRequest(
name=location_ref)
return list_pager.YieldFromList(
self.client.projects_locations_operations,
request,
field='operations',
limit=limit,
batch_size_attribute='pageSize')
class NetappAdapter(object):
"""Adapter for the Cloud NetApp Files v1 API."""
def __init__(self):
self.release_track = base.ReleaseTrack.GA
self.client = util.GetClientInstance(
release_track=self.release_track
)
self.messages = util.GetMessagesModule(
release_track=self.release_track
)
class BetaNetappAdapter(NetappAdapter):
"""Adapter for the Beta Cloud NetApp Files API."""
def __init__(self):
super(BetaNetappAdapter, self).__init__()
self.release_track = base.ReleaseTrack.BETA
self.client = util.GetClientInstance(
release_track=self.release_track
)
self.messages = util.GetMessagesModule(
release_track=self.release_track
)
class AlphaNetappAdapter(BetaNetappAdapter):
"""Adapter for the Alpha Cloud NetApp Files API."""
def __init__(self):
super(AlphaNetappAdapter, self).__init__()
self.release_track = base.ReleaseTrack.ALPHA
self.client = util.GetClientInstance(
release_track=self.release_track
)
self.messages = util.GetMessagesModule(
release_track=self.release_track
)