169 lines
5.3 KiB
Python
169 lines
5.3 KiB
Python
# -*- 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
|
|
)
|