initial commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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
|
||||
Reference in New Issue
Block a user