59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
import requests
|
|
import logging
|
|
import json
|
|
|
|
class Volumes:
|
|
def __init__(self, client):
|
|
self.client = client
|
|
|
|
def list_volumes(self, volume_type=None, vpg_identifier=None, datastore_identifier=None,
|
|
protected_vm_identifier=None, owning_vm_identifier=None):
|
|
"""
|
|
Get a list of volumes info in the current site. For ZSSP users, the information
|
|
retrieved is for Protected entities only. (Auth)
|
|
|
|
Args:
|
|
volume_type (str, optional): The volume type
|
|
vpg_identifier (str, optional): The identifier of the VPG
|
|
datastore_identifier (str, optional): The identifier of the datastore
|
|
protected_vm_identifier (str, optional): The identifier of the protected virtual machine
|
|
owning_vm_identifier (str, optional): The identifier of the owning virtual machine
|
|
|
|
Returns:
|
|
list: Array of volume information objects
|
|
|
|
Raises:
|
|
requests.exceptions.RequestException: If the API request fails
|
|
"""
|
|
url = f"https://{self.client.zvm_address}/v1/volumes"
|
|
headers = {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': f'Bearer {self.client.token}'
|
|
}
|
|
|
|
params = {
|
|
'volumeType': volume_type,
|
|
'vpgIdentifier': vpg_identifier,
|
|
'datastoreIdentifier': datastore_identifier,
|
|
'protectedVmIdentifier': protected_vm_identifier,
|
|
'owningVmIdentifier': owning_vm_identifier
|
|
}
|
|
# Remove None values from params
|
|
params = {k: v for k, v in params.items() if v is not None}
|
|
|
|
logging.info("Volumes.list_volumes: Fetching volumes information")
|
|
try:
|
|
response = requests.get(url, headers=headers, params=params, verify=self.client.verify_certificate)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
except requests.exceptions.RequestException as e:
|
|
if e.response is not None:
|
|
logging.error(f"HTTPError: {e.response.status_code} - {e.response.reason}")
|
|
try:
|
|
error_details = e.response.json()
|
|
logging.error(f"Error Message: {error_details.get('Message', 'No detailed error message available')}")
|
|
except ValueError:
|
|
logging.error(f"Response content: {e.response.text}")
|
|
else:
|
|
logging.error("HTTPError occurred with no response attached.")
|
|
raise |