text: # coding: utf-8
  
  """
      FlashArray REST API
  
      No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
  
      OpenAPI spec version: 2.2
      
      Generated by: https://github.com/swagger-api/swagger-codegen.git
  """
  
  
  from __future__ import absolute_import
  
  import re
  
  # python 2 and python 3 compatibility library
  import six
  from typing import List, Optional
  
  from .. import models
  
  class VolumesApi(object):
  
      def __init__(self, api_client):
          self.api_client = api_client
  
      def api22_volumes_delete_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          ids=None,  # type: List[str]
          names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> None
          """Delete a volume
  
          Deletes a volume that has been destroyed and is pending eradication. Eradicated volumes cannot be recovered. Volumes are destroyed using the `PATCH` method. The `ids` or `names` parameter is required, but they cannot be set together.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_delete_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] ids: Performs the operation on the unique resource IDs specified. Enter multiple resource IDs in comma-separated format. The `ids` and `names` parameters cannot be provided together.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if ids is not None:
              if not isinstance(ids, list):
                  ids = [ids]
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'ids' in params:
              query_params.append(('ids', params['ids']))
              collection_formats['ids'] = 'csv'
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes', 'DELETE',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type=None,
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          continuation_token=None,  # type: str
          destroyed=None,  # type: bool
          filter=None,  # type: str
          ids=None,  # type: List[str]
          limit=None,  # type: int
          names=None,  # type: List[str]
          offset=None,  # type: int
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          total_only=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.VolumeGetResponse
          """List volumes
  
          Displays a list of volumes, including those pending eradication.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param str continuation_token: A token used to retrieve the next page of data with some consistency guaranteed. The token is a Base64 encoded value. Set `continuation_token` to the system-generated token taken from the `x-next-token` header field of the response. A query has reached its last page when the response does not include a token. Pagination requires the `limit` and `continuation_token` query parameters.
          :param bool destroyed: If set to `true`, lists only destroyed objects that are in the eradication pending state. If set to `false`, lists only objects that are not destroyed. For destroyed objects, the time remaining is displayed in milliseconds.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param list[str] ids: Performs the operation on the unique resource IDs specified. Enter multiple resource IDs in comma-separated format. The `ids` and `names` parameters cannot be provided together.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param bool total_only: If set to `true`, returns the aggregate value of all items after filtering. Where it makes more sense, the average value is displayed instead. The values are displayed for each name where meaningful. If `total_only=true`, the `items` list will be empty.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: VolumeGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if ids is not None:
              if not isinstance(ids, list):
                  ids = [ids]
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'continuation_token' in params:
              query_params.append(('continuation_token', params['continuation_token']))
          if 'destroyed' in params:
              query_params.append(('destroyed', params['destroyed']))
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'ids' in params:
              query_params.append(('ids', params['ids']))
              collection_formats['ids'] = 'csv'
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
          if 'total_only' in params:
              query_params.append(('total_only', params['total_only']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='VolumeGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_patch_with_http_info(
          self,
          volume=None,  # type: models.VolumePatch
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          ids=None,  # type: List[str]
          names=None,  # type: List[str]
          truncate=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.VolumeResponse
          """Update a volume
  
          Updates a volume, renaming, destroying, or resizing it. To rename a volume, set `name` to the new name. To destroy a volume, set `destroyed=true`. To recover a volume that has been destroyed and is pending eradication, set `destroyed=false`. Sets the bandwidth and IOPs limits of a volume through the respective `bandwidth_limit` and `iops_limit` parameter. Moves the volume into a pod or volume group through the respective `pod` or `volume_group` parameter. The `ids` or `names` parameter is required, but cannot be set together.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_patch_with_http_info(volume, async_req=True)
          >>> result = thread.get()
  
          :param VolumePatch volume: (required)
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] ids: Performs the operation on the unique resource IDs specified. Enter multiple resource IDs in comma-separated format. The `ids` and `names` parameters cannot be provided together.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param bool truncate: If set to `true`, reduces the size of a volume during a volume resize operation. When a volume is truncated, Purity automatically takes an undo snapshot, providing a 24-hour window during which the previous contents can be retrieved. After truncating a volume, its provisioned size can be subsequently increased, but the data in truncated sectors cannot be retrieved. If set to `false` or not set at all and the volume is being reduced in size, the volume copy operation fails. Required if the `provisioned` parameter is set to a volume size that is smaller than the original size.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: VolumeResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if ids is not None:
              if not isinstance(ids, list):
                  ids = [ids]
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
          # verify the required parameter 'volume' is set
          if volume is None:
              raise TypeError("Missing the required parameter `volume` when calling `api22_volumes_patch`")
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'ids' in params:
              query_params.append(('ids', params['ids']))
              collection_formats['ids'] = 'csv'
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
          if 'truncate' in params:
              query_params.append(('truncate', params['truncate']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          if 'volume' in params:
              body_params = params['volume']
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes', 'PATCH',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='VolumeResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_performance_by_array_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          destroyed=None,  # type: bool
          filter=None,  # type: str
          end_time=None,  # type: int
          resolution=None,  # type: int
          start_time=None,  # type: int
          ids=None,  # type: List[str]
          limit=None,  # type: int
          names=None,  # type: List[str]
          offset=None,  # type: int
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          total_only=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.ResourcePerformanceByArrayGetResponse
          """List volume performance data by array
  
          Return real-time and historical performance data, real-time latency data, and average I/O size data. The data returned is for each volume on the current array and for each volume on any remote arrays that are visible to the current array. The data is grouped by individual volumes and as a total across all volumes on each array.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_performance_by_array_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param bool destroyed: If set to `true`, lists only destroyed objects that are in the eradication pending state. If set to `false`, lists only objects that are not destroyed. For destroyed objects, the time remaining is displayed in milliseconds.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param int end_time: Displays historical performance data for the specified time window, where `start_time` is the beginning of the time window, and `end_time` is the end of the time window. The `start_time` and `end_time` parameters are specified in milliseconds since the UNIX epoch. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. If `end_time`is not specified, the end time will default to the current time. Include the `resolution` parameter to display the performance data at the specified resolution. If not specified, `resolution` defaults to the lowest valid resolution.
          :param int resolution: The number of milliseconds between samples of historical data. For array-wide performance metrics (`/arrays/performance` endpoint), valid values are `1000` (1 second), `30000` (30 seconds), `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). For performance metrics on storage objects (`<object name>/performance` endpoint), such as volumes, valid values are `30000` (30 seconds), `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). For space metrics, (`<object name>/space` endpoint), valid values are `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). Include the `start_time` parameter to display the performance data starting at the specified start time. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. Include the `end_time` parameter to display the performance data until the specified end time. If `end_time`is not specified, the end time will default to the current time. If the `resolution` parameter is not specified but either the `start_time` or `end_time` parameter is, then `resolution` will default to the lowest valid resolution.
          :param int start_time: Displays historical performance data for the specified time window, where `start_time` is the beginning of the time window, and `end_time` is the end of the time window. The `start_time` and `end_time` parameters are specified in milliseconds since the UNIX epoch. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. If `end_time`is not specified, the end time will default to the current time. Include the `resolution` parameter to display the performance data at the specified resolution. If not specified, `resolution` defaults to the lowest valid resolution.
          :param list[str] ids: Performs the operation on the unique resource IDs specified. Enter multiple resource IDs in comma-separated format. The `ids` and `names` parameters cannot be provided together.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param bool total_only: If set to `true`, returns the aggregate value of all items after filtering. Where it makes more sense, the average value is displayed instead. The values are displayed for each name where meaningful. If `total_only=true`, the `items` list will be empty.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: ResourcePerformanceByArrayGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if ids is not None:
              if not isinstance(ids, list):
                  ids = [ids]
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'resolution' in params and params['resolution'] < 0:
              raise ValueError("Invalid value for parameter `resolution` when calling `api22_volumes_performance_by_array_get`, must be a value greater than or equal to `0`")
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_performance_by_array_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_performance_by_array_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'destroyed' in params:
              query_params.append(('destroyed', params['destroyed']))
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'end_time' in params:
              query_params.append(('end_time', params['end_time']))
          if 'resolution' in params:
              query_params.append(('resolution', params['resolution']))
          if 'start_time' in params:
              query_params.append(('start_time', params['start_time']))
          if 'ids' in params:
              query_params.append(('ids', params['ids']))
              collection_formats['ids'] = 'csv'
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
          if 'total_only' in params:
              query_params.append(('total_only', params['total_only']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/performance/by-array', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='ResourcePerformanceByArrayGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_performance_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          destroyed=None,  # type: bool
          filter=None,  # type: str
          end_time=None,  # type: int
          resolution=None,  # type: int
          start_time=None,  # type: int
          ids=None,  # type: List[str]
          limit=None,  # type: int
          names=None,  # type: List[str]
          offset=None,  # type: int
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          total_only=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.ResourcePerformanceGetResponse
          """List volume performance data
  
          Returns real-time and historical performance data, real-time latency data, and average I/O sizes for each volume and and as a total of all volumes across the entire array.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_performance_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param bool destroyed: If set to `true`, lists only destroyed objects that are in the eradication pending state. If set to `false`, lists only objects that are not destroyed. For destroyed objects, the time remaining is displayed in milliseconds.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param int end_time: Displays historical performance data for the specified time window, where `start_time` is the beginning of the time window, and `end_time` is the end of the time window. The `start_time` and `end_time` parameters are specified in milliseconds since the UNIX epoch. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. If `end_time`is not specified, the end time will default to the current time. Include the `resolution` parameter to display the performance data at the specified resolution. If not specified, `resolution` defaults to the lowest valid resolution.
          :param int resolution: The number of milliseconds between samples of historical data. For array-wide performance metrics (`/arrays/performance` endpoint), valid values are `1000` (1 second), `30000` (30 seconds), `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). For performance metrics on storage objects (`<object name>/performance` endpoint), such as volumes, valid values are `30000` (30 seconds), `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). For space metrics, (`<object name>/space` endpoint), valid values are `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). Include the `start_time` parameter to display the performance data starting at the specified start time. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. Include the `end_time` parameter to display the performance data until the specified end time. If `end_time`is not specified, the end time will default to the current time. If the `resolution` parameter is not specified but either the `start_time` or `end_time` parameter is, then `resolution` will default to the lowest valid resolution.
          :param int start_time: Displays historical performance data for the specified time window, where `start_time` is the beginning of the time window, and `end_time` is the end of the time window. The `start_time` and `end_time` parameters are specified in milliseconds since the UNIX epoch. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. If `end_time`is not specified, the end time will default to the current time. Include the `resolution` parameter to display the performance data at the specified resolution. If not specified, `resolution` defaults to the lowest valid resolution.
          :param list[str] ids: Performs the operation on the unique resource IDs specified. Enter multiple resource IDs in comma-separated format. The `ids` and `names` parameters cannot be provided together.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param bool total_only: If set to `true`, returns the aggregate value of all items after filtering. Where it makes more sense, the average value is displayed instead. The values are displayed for each name where meaningful. If `total_only=true`, the `items` list will be empty.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: ResourcePerformanceGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if ids is not None:
              if not isinstance(ids, list):
                  ids = [ids]
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'resolution' in params and params['resolution'] < 0:
              raise ValueError("Invalid value for parameter `resolution` when calling `api22_volumes_performance_get`, must be a value greater than or equal to `0`")
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_performance_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_performance_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'destroyed' in params:
              query_params.append(('destroyed', params['destroyed']))
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'end_time' in params:
              query_params.append(('end_time', params['end_time']))
          if 'resolution' in params:
              query_params.append(('resolution', params['resolution']))
          if 'start_time' in params:
              query_params.append(('start_time', params['start_time']))
          if 'ids' in params:
              query_params.append(('ids', params['ids']))
              collection_formats['ids'] = 'csv'
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
          if 'total_only' in params:
              query_params.append(('total_only', params['total_only']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/performance', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='ResourcePerformanceGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_post_with_http_info(
          self,
          volume=None,  # type: models.VolumePost
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          names=None,  # type: List[str]
          overwrite=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.VolumeResponse
          """Create a volume
  
          Creates one or more virtual storage volumes of the specified size. If `provisioned` is not specified, the size of the new volume defaults to 1 MB in size. The `names` query parameter is required.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_post_with_http_info(volume, async_req=True)
          >>> result = thread.get()
  
          :param VolumePost volume: (required)
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param bool overwrite: If set to `true`, overwrites an existing volume during a volume copy operation. If set to `false` or not set at all and the target name is an existing volume, the volume copy operation fails. Required if the `source: id` or `source: name` body parameter is set and the source overwrites an existing volume during the volume copy operation.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: VolumeResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
          # verify the required parameter 'volume' is set
          if volume is None:
              raise TypeError("Missing the required parameter `volume` when calling `api22_volumes_post`")
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
          if 'overwrite' in params:
              query_params.append(('overwrite', params['overwrite']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          if 'volume' in params:
              body_params = params['volume']
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes', 'POST',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='VolumeResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_protection_groups_delete_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          group_names=None,  # type: List[str]
          member_names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> None
          """Remove a volume from a protection group
  
          Removes a volume member from a protection group. After the member has been removed, it is no longer protected by the group. Any protection group snapshots that were taken before the member was removed will not be affected. Removing a member from a protection group does not delete the member from the array, and the member can be added back to the protection group at any time. The `group_names` parameter represents the name of the protection group, and the `member_names` parameter represents the name of the volume. The `group_names` and `member_names` parameters are required and must be set together.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_protection_groups_delete_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] group_names: Performs the operation on the unique group name specified. Examples of groups include host groups, pods, protection groups, and volume groups. Enter multiple names in comma-separated format. For example, `hgroup01,hgroup02`.
          :param list[str] member_names: Performs the operation on the unique member name specified. Examples of members include volumes, hosts, host groups, and directories. Enter multiple names in comma-separated format. For example, `vol01,vol02`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if group_names is not None:
              if not isinstance(group_names, list):
                  group_names = [group_names]
          if member_names is not None:
              if not isinstance(member_names, list):
                  member_names = [member_names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'group_names' in params:
              query_params.append(('group_names', params['group_names']))
              collection_formats['group_names'] = 'csv'
          if 'member_names' in params:
              query_params.append(('member_names', params['member_names']))
              collection_formats['member_names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/protection-groups', 'DELETE',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type=None,
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_protection_groups_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          continuation_token=None,  # type: str
          filter=None,  # type: str
          group_names=None,  # type: List[str]
          limit=None,  # type: int
          member_names=None,  # type: List[str]
          offset=None,  # type: int
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.MemberNoIdAllGetResponse
          """List volumes that are members of protection groups
  
          Returns a list of volume members that belong to one or more protection groups.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_protection_groups_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param str continuation_token: A token used to retrieve the next page of data with some consistency guaranteed. The token is a Base64 encoded value. Set `continuation_token` to the system-generated token taken from the `x-next-token` header field of the response. A query has reached its last page when the response does not include a token. Pagination requires the `limit` and `continuation_token` query parameters.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param list[str] group_names: Performs the operation on the unique group name specified. Examples of groups include host groups, pods, protection groups, and volume groups. Enter multiple names in comma-separated format. For example, `hgroup01,hgroup02`.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param list[str] member_names: Performs the operation on the unique member name specified. Examples of members include volumes, hosts, host groups, and directories. Enter multiple names in comma-separated format. For example, `vol01,vol02`.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: MemberNoIdAllGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if group_names is not None:
              if not isinstance(group_names, list):
                  group_names = [group_names]
          if member_names is not None:
              if not isinstance(member_names, list):
                  member_names = [member_names]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_protection_groups_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_protection_groups_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'continuation_token' in params:
              query_params.append(('continuation_token', params['continuation_token']))
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'group_names' in params:
              query_params.append(('group_names', params['group_names']))
              collection_formats['group_names'] = 'csv'
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'member_names' in params:
              query_params.append(('member_names', params['member_names']))
              collection_formats['member_names'] = 'csv'
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/protection-groups', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='MemberNoIdAllGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_protection_groups_post_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          group_names=None,  # type: List[str]
          member_names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.MemberNoIdAllResponse
          """Add a volume to a protection group
  
          Adds a volume member to a protection group. Members that are already in the protection group are not affected. For asynchronous replication, only members of the same type can belong to a protection group. The `group_names` parameter represents the name of the protection group, and the `member_names` parameter represents the name of the volume. The `group_names` and `member_names` parameters are required and must be set together.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_protection_groups_post_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] group_names: Performs the operation on the unique group name specified. Examples of groups include host groups, pods, protection groups, and volume groups. Enter multiple names in comma-separated format. For example, `hgroup01,hgroup02`.
          :param list[str] member_names: Performs the operation on the unique member name specified. Examples of members include volumes, hosts, host groups, and directories. Enter multiple names in comma-separated format. For example, `vol01,vol02`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: MemberNoIdAllResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if group_names is not None:
              if not isinstance(group_names, list):
                  group_names = [group_names]
          if member_names is not None:
              if not isinstance(member_names, list):
                  member_names = [member_names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'group_names' in params:
              query_params.append(('group_names', params['group_names']))
              collection_formats['group_names'] = 'csv'
          if 'member_names' in params:
              query_params.append(('member_names', params['member_names']))
              collection_formats['member_names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/protection-groups', 'POST',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='MemberNoIdAllResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_space_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          destroyed=None,  # type: bool
          filter=None,  # type: str
          end_time=None,  # type: int
          resolution=None,  # type: int
          start_time=None,  # type: int
          ids=None,  # type: List[str]
          limit=None,  # type: int
          offset=None,  # type: int
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          total_only=None,  # type: bool
          names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.ResourceSpaceGetResponse
          """List volume space information
  
          Returns the provisioned size and physical storage consumption data for each volume.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_space_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param bool destroyed: If set to `true`, lists only destroyed objects that are in the eradication pending state. If set to `false`, lists only objects that are not destroyed. For destroyed objects, the time remaining is displayed in milliseconds.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param int end_time: Displays historical performance data for the specified time window, where `start_time` is the beginning of the time window, and `end_time` is the end of the time window. The `start_time` and `end_time` parameters are specified in milliseconds since the UNIX epoch. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. If `end_time`is not specified, the end time will default to the current time. Include the `resolution` parameter to display the performance data at the specified resolution. If not specified, `resolution` defaults to the lowest valid resolution.
          :param int resolution: The number of milliseconds between samples of historical data. For array-wide performance metrics (`/arrays/performance` endpoint), valid values are `1000` (1 second), `30000` (30 seconds), `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). For performance metrics on storage objects (`<object name>/performance` endpoint), such as volumes, valid values are `30000` (30 seconds), `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). For space metrics, (`<object name>/space` endpoint), valid values are `300000` (5 minutes), `1800000` (30 minutes), `7200000` (2 hours), `28800000` (8 hours), and `86400000` (24 hours). Include the `start_time` parameter to display the performance data starting at the specified start time. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. Include the `end_time` parameter to display the performance data until the specified end time. If `end_time`is not specified, the end time will default to the current time. If the `resolution` parameter is not specified but either the `start_time` or `end_time` parameter is, then `resolution` will default to the lowest valid resolution.
          :param int start_time: Displays historical performance data for the specified time window, where `start_time` is the beginning of the time window, and `end_time` is the end of the time window. The `start_time` and `end_time` parameters are specified in milliseconds since the UNIX epoch. If `start_time` is not specified, the start time will default to one resolution before the end time, meaning that the most recent sample of performance data will be displayed. If `end_time`is not specified, the end time will default to the current time. Include the `resolution` parameter to display the performance data at the specified resolution. If not specified, `resolution` defaults to the lowest valid resolution.
          :param list[str] ids: Performs the operation on the unique resource IDs specified. Enter multiple resource IDs in comma-separated format. The `ids` and `names` parameters cannot be provided together.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param bool total_only: If set to `true`, returns the aggregate value of all items after filtering. Where it makes more sense, the average value is displayed instead. The values are displayed for each name where meaningful. If `total_only=true`, the `items` list will be empty.
          :param list[str] names: Performs the operation on the unique name specified. Enter multiple names in comma-separated format. For example, `name01,name02`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: ResourceSpaceGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if ids is not None:
              if not isinstance(ids, list):
                  ids = [ids]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          if names is not None:
              if not isinstance(names, list):
                  names = [names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'resolution' in params and params['resolution'] < 0:
              raise ValueError("Invalid value for parameter `resolution` when calling `api22_volumes_space_get`, must be a value greater than or equal to `0`")
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_space_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_space_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'destroyed' in params:
              query_params.append(('destroyed', params['destroyed']))
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'end_time' in params:
              query_params.append(('end_time', params['end_time']))
          if 'resolution' in params:
              query_params.append(('resolution', params['resolution']))
          if 'start_time' in params:
              query_params.append(('start_time', params['start_time']))
          if 'ids' in params:
              query_params.append(('ids', params['ids']))
              collection_formats['ids'] = 'csv'
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
          if 'total_only' in params:
              query_params.append(('total_only', params['total_only']))
          if 'names' in params:
              query_params.append(('names', params['names']))
              collection_formats['names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/space', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='ResourceSpaceGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_tags_batch_put_with_http_info(
          self,
          tag=None,  # type: List[models.Tag]
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          resource_ids=None,  # type: List[str]
          resource_names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.TagResponse
          """Update tags
  
          Updates tags.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_tags_batch_put_with_http_info(tag, async_req=True)
          >>> result = thread.get()
  
          :param list[Tag] tag: A list of tags to be created or, if already existing, updated. (required)
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] resource_ids: A comma-separated list of resource IDs. The `resource_ids` and `resource_names` parameters cannot be provided together.
          :param list[str] resource_names: A comma-separated list of resource names. The `resource_ids` and `resource_names` parameters cannot be provided together.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: TagResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if tag is not None:
              if not isinstance(tag, list):
                  tag = [tag]
          if resource_ids is not None:
              if not isinstance(resource_ids, list):
                  resource_ids = [resource_ids]
          if resource_names is not None:
              if not isinstance(resource_names, list):
                  resource_names = [resource_names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
          # verify the required parameter 'tag' is set
          if tag is None:
              raise TypeError("Missing the required parameter `tag` when calling `api22_volumes_tags_batch_put`")
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'resource_ids' in params:
              query_params.append(('resource_ids', params['resource_ids']))
              collection_formats['resource_ids'] = 'csv'
          if 'resource_names' in params:
              query_params.append(('resource_names', params['resource_names']))
              collection_formats['resource_names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          if 'tag' in params:
              body_params = params['tag']
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/tags/batch', 'PUT',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='TagResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_tags_delete_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          keys=None,  # type: List[str]
          namespaces=None,  # type: List[str]
          resource_ids=None,  # type: List[str]
          resource_names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> None
          """Delete tags
  
          Deletes specified tags.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_tags_delete_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param list[str] keys: A comma-separated list of tag keys.
          :param list[str] namespaces: A comma-separated list of namespaces.
          :param list[str] resource_ids: A comma-separated list of resource IDs. The `resource_ids` and `resource_names` parameters cannot be provided together.
          :param list[str] resource_names: A comma-separated list of resource names. The `resource_ids` and `resource_names` parameters cannot be provided together.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if keys is not None:
              if not isinstance(keys, list):
                  keys = [keys]
          if namespaces is not None:
              if not isinstance(namespaces, list):
                  namespaces = [namespaces]
          if resource_ids is not None:
              if not isinstance(resource_ids, list):
                  resource_ids = [resource_ids]
          if resource_names is not None:
              if not isinstance(resource_names, list):
                  resource_names = [resource_names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'keys' in params:
              query_params.append(('keys', params['keys']))
              collection_formats['keys'] = 'csv'
          if 'namespaces' in params:
              query_params.append(('namespaces', params['namespaces']))
              collection_formats['namespaces'] = 'csv'
          if 'resource_ids' in params:
              query_params.append(('resource_ids', params['resource_ids']))
              collection_formats['resource_ids'] = 'csv'
          if 'resource_names' in params:
              query_params.append(('resource_names', params['resource_names']))
              collection_formats['resource_names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/tags', 'DELETE',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type=None,
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_tags_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          filter=None,  # type: str
          limit=None,  # type: int
          offset=None,  # type: int
          resource_destroyed=None,  # type: bool
          resource_ids=None,  # type: List[str]
          resource_names=None,  # type: List[str]
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.TagGetResponse
          """List tags
  
          Displays the list of tags.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_tags_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param bool resource_destroyed: If set to `true`, returns only objects from destroyed resources. Returns an error if the name of a live resource is specified in the `resource_names` query parameter. If set to `false`, returns only objects from live resources. Returns an error if the name of a destroyed resource is specified in the `resource_names` query parameter.
          :param list[str] resource_ids: A comma-separated list of resource IDs. The `resource_ids` and `resource_names` parameters cannot be provided together.
          :param list[str] resource_names: A comma-separated list of resource names. The `resource_ids` and `resource_names` parameters cannot be provided together.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: TagGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if resource_ids is not None:
              if not isinstance(resource_ids, list):
                  resource_ids = [resource_ids]
          if resource_names is not None:
              if not isinstance(resource_names, list):
                  resource_names = [resource_names]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_tags_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_tags_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'resource_destroyed' in params:
              query_params.append(('resource_destroyed', params['resource_destroyed']))
          if 'resource_ids' in params:
              query_params.append(('resource_ids', params['resource_ids']))
              collection_formats['resource_ids'] = 'csv'
          if 'resource_names' in params:
              query_params.append(('resource_names', params['resource_names']))
              collection_formats['resource_names'] = 'csv'
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/tags', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='TagGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  
      def api22_volumes_volume_groups_get_with_http_info(
          self,
          authorization=None,  # type: str
          x_request_id=None,  # type: str
          continuation_token=None,  # type: str
          filter=None,  # type: str
          group_ids=None,  # type: List[str]
          limit=None,  # type: int
          member_ids=None,  # type: List[str]
          offset=None,  # type: int
          sort=None,  # type: List[str]
          total_item_count=None,  # type: bool
          group_names=None,  # type: List[str]
          member_names=None,  # type: List[str]
          async_req=False,  # type: bool
          _return_http_data_only=False,  # type: bool
          _preload_content=True,  # type: bool
          _request_timeout=None,  # type: Optional[int]
      ):
          # type: (...) -> models.MemberGetResponse
          """List volumes that are in volume groups
  
          Returns a list of volumes that are in a volume group.
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.api22_volumes_volume_groups_get_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param str authorization: Access token (in JWT format) required to use any API endpoint (except `/oauth2`, `/login`, and `/logout`)
          :param str x_request_id: Supplied by client during request or generated by server.
          :param str continuation_token: A token used to retrieve the next page of data with some consistency guaranteed. The token is a Base64 encoded value. Set `continuation_token` to the system-generated token taken from the `x-next-token` header field of the response. A query has reached its last page when the response does not include a token. Pagination requires the `limit` and `continuation_token` query parameters.
          :param str filter: Narrows down the results to only the response objects that satisfy the filter criteria.
          :param list[str] group_ids: A comma-separated list of group IDs.
          :param int limit: Limits the size of the response to the specified number of objects on each page. To return the total number of resources, set `limit=0`. The total number of resources is returned as a `total_item_count` value. If the page size requested is larger than the system maximum limit, the server returns the maximum limit, disregarding the requested page size.
          :param list[str] member_ids: Performs the operation on the unique member IDs specified. Enter multiple member IDs in comma-separated format. The `member_ids` and `member_names` parameters cannot be provided together.
          :param int offset: The starting position based on the results of the query in relation to the full set of response objects returned.
          :param list[str] sort: Returns the response objects in the order specified. Set `sort` to the name in the response by which to sort. Sorting can be performed on any of the names in the response, and the objects can be sorted in ascending or descending order. By default, the response objects are sorted in ascending order. To sort in descending order, append the minus sign (`-`) to the name. A single request can be sorted on multiple objects. For example, you can sort all volumes from largest to smallest volume size, and then sort volumes of the same size in ascending order by volume name. To sort on multiple names, list the names as comma-separated values.
          :param bool total_item_count: If set to `true`, the `total_item_count` matching the specified query parameters is calculated and returned in the response. If set to `false`, the `total_item_count` is `null` in the response. This may speed up queries where the `total_item_count` is large. If not specified, defaults to `false`.
          :param list[str] group_names: Performs the operation on the unique group name specified. Examples of groups include host groups, pods, protection groups, and volume groups. Enter multiple names in comma-separated format. For example, `hgroup01,hgroup02`.
          :param list[str] member_names: Performs the operation on the unique member name specified. Examples of members include volumes, hosts, host groups, and directories. Enter multiple names in comma-separated format. For example, `vol01,vol02`.
          :param bool async_req: Request runs in separate thread and method returns multiprocessing.pool.ApplyResult.
          :param bool _return_http_data_only: Returns only data field.
          :param bool _preload_content: Response is converted into objects.
          :param int _request_timeout: Total request timeout in seconds.
                   It can also be a tuple of (connection time, read time) timeouts.
          :return: MemberGetResponse
                   If the method is called asynchronously,
                   returns the request thread.
          """
          if group_ids is not None:
              if not isinstance(group_ids, list):
                  group_ids = [group_ids]
          if member_ids is not None:
              if not isinstance(member_ids, list):
                  member_ids = [member_ids]
          if sort is not None:
              if not isinstance(sort, list):
                  sort = [sort]
          if group_names is not None:
              if not isinstance(group_names, list):
                  group_names = [group_names]
          if member_names is not None:
              if not isinstance(member_names, list):
                  member_names = [member_names]
          params = {k: v for k, v in six.iteritems(locals()) if v is not None}
  
          # Convert the filter into a string
          if params.get('filter'):
              params['filter'] = str(params['filter'])
          if params.get('sort'):
              params['sort'] = [str(_x) for _x in params['sort']]
  
          if 'limit' in params and params['limit'] < 1:
              raise ValueError("Invalid value for parameter `limit` when calling `api22_volumes_volume_groups_get`, must be a value greater than or equal to `1`")
          if 'offset' in params and params['offset'] < 0:
              raise ValueError("Invalid value for parameter `offset` when calling `api22_volumes_volume_groups_get`, must be a value greater than or equal to `0`")
          collection_formats = {}
          path_params = {}
  
          query_params = []
          if 'continuation_token' in params:
              query_params.append(('continuation_token', params['continuation_token']))
          if 'filter' in params:
              query_params.append(('filter', params['filter']))
          if 'group_ids' in params:
              query_params.append(('group_ids', params['group_ids']))
              collection_formats['group_ids'] = 'csv'
          if 'limit' in params:
              query_params.append(('limit', params['limit']))
          if 'member_ids' in params:
              query_params.append(('member_ids', params['member_ids']))
              collection_formats['member_ids'] = 'csv'
          if 'offset' in params:
              query_params.append(('offset', params['offset']))
          if 'sort' in params:
              query_params.append(('sort', params['sort']))
              collection_formats['sort'] = 'csv'
          if 'total_item_count' in params:
              query_params.append(('total_item_count', params['total_item_count']))
          if 'group_names' in params:
              query_params.append(('group_names', params['group_names']))
              collection_formats['group_names'] = 'csv'
          if 'member_names' in params:
              query_params.append(('member_names', params['member_names']))
              collection_formats['member_names'] = 'csv'
  
          header_params = {}
          if 'authorization' in params:
              header_params['Authorization'] = params['authorization']
          if 'x_request_id' in params:
              header_params['X-Request-ID'] = params['x_request_id']
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(
              ['application/json'])
  
          # Authentication setting
          auth_settings = []
  
          return self.api_client.call_api(
              '/api/2.2/volumes/volume-groups', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='MemberGetResponse',
              auth_settings=auth_settings,
              async_req=async_req,
              _return_http_data_only=_return_http_data_only,
              _preload_content=_preload_content,
              _request_timeout=_request_timeout,
              collection_formats=collection_formats,
          )
  