From df77b97ff1d6ad1b8acc2dd77db2c38ea3b98466 Mon Sep 17 00:00:00 2001 From: Rity Menon Date: Wed, 18 Dec 2024 14:12:29 -0800 Subject: [PATCH] system host-pv-show keyword Change-Id: I862ab7fea71aebc45f469382a607369809689388 --- .../host/objects/system_host_pv_object.py | 80 ++++++++++++++++++- .../objects/system_host_pv_show_output.py | 76 ++++++++++++++++++ .../system/host/system_host_pv_keywords.py | 20 ++++- 3 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 keywords/cloud_platform/system/host/objects/system_host_pv_show_output.py diff --git a/keywords/cloud_platform/system/host/objects/system_host_pv_object.py b/keywords/cloud_platform/system/host/objects/system_host_pv_object.py index f9429eb..66439a8 100644 --- a/keywords/cloud_platform/system/host/objects/system_host_pv_object.py +++ b/keywords/cloud_platform/system/host/objects/system_host_pv_object.py @@ -16,6 +16,12 @@ class SystemHostPvObject: self.pv_type: str = None self.lvm_vg_name: str = None self.ihost_uuid : str = None + self.lvm_pv_uuid: str = None + self.lvm_pv_size_gib: float = -1.0 + self.lvm_pe_total: int = -1 + self.lvm_pe_alloced: int = -1 + self.created_at: str = None + self.updated_at: str = None def set_uuid(self, uuid): @@ -124,4 +130,76 @@ class SystemHostPvObject: """ Getter for host-lvg ihost_uuid """ - return self.ihost_uuid \ No newline at end of file + return self.ihost_uuid + + def set_lvm_pv_uuid(self, lvm_pv_uuid): + """ + Setter for the lvm_pv_uuid + """ + self.lvm_pv_uuid = lvm_pv_uuid + + def get_lvm_pv_uuid(self) -> str: + """ + Getter for the lvm_pv_uuid + """ + return self.lvm_pv_uuid + + def set_lvm_pv_size_gib(self, lvm_pv_size_gib): + """ + Setter for the lvm_pv_size_gib + """ + self.lvm_pv_size_gib = lvm_pv_size_gib + + def get_lvm_pv_size_gib(self) -> float: + """ + Getter for the lvm_pv_size_gib + """ + return self.lvm_pv_size_gib + + def set_lvm_pe_total(self, lvm_pe_total): + """ + Setter for the lvm_pe_total + """ + self.lvm_pe_total = lvm_pe_total + + def get_lvm_pe_total(self) -> int: + """ + Getter for the lvm_pe_total + """ + return self.lvm_pe_total + + def set_lvm_pe_alloced(self, lvm_pe_alloced): + """ + Setter for the lvm_pe_alloced + """ + self.lvm_pe_alloced = lvm_pe_alloced + + def get_lvm_pe_alloced(self) -> int: + """ + Getter for the lvm_pe_total + """ + return self.lvm_pe_alloced + + def set_created_at(self, created_at): + """ + Setter for host-lvg created_at + """ + self.created_at = created_at + + def get_created_at(self) -> str: + """ + Getter for host-lvg created_at + """ + return self.created_at + + def set_updated_at(self, updated_at): + """ + Setter for host-lvg updated_at + """ + self.updated_at = updated_at + + def get_updated_at(self) -> str: + """ + Getter for host-lvg updated_at + """ + return self.updated_at \ No newline at end of file diff --git a/keywords/cloud_platform/system/host/objects/system_host_pv_show_output.py b/keywords/cloud_platform/system/host/objects/system_host_pv_show_output.py new file mode 100644 index 0000000..906a82c --- /dev/null +++ b/keywords/cloud_platform/system/host/objects/system_host_pv_show_output.py @@ -0,0 +1,76 @@ +from framework.exceptions.keyword_exception import KeywordException +from framework.logging.automation_logger import get_logger +from keywords.cloud_platform.system.host.objects.system_host_pv_object import SystemHostPvObject +from keywords.cloud_platform.system.system_vertical_table_parser import SystemVerticalTableParser + +class SystemHostPvShowOutput: + """ + This class parses the output of 'system host-pv-show' command into an object of type SystemHostPvObject. + """ + + def __init__(self, system_output): + """ + Constructor + + Args: + system_output (str): Output of the 'system host-pv-show' command. + + Raises: + KeywordException: If the output is not valid. + """ + + system_vertical_table_parser = SystemVerticalTableParser(system_output) + output_values = system_vertical_table_parser.get_output_values_dict() + + if self.is_valid_output(output_values): + self.system_host_pv = SystemHostPvObject() + self.system_host_pv.set_uuid(output_values['uuid']) + self.system_host_pv.set_pv_state(output_values['pv_state']) + self.system_host_pv.set_pv_type(output_values['pv_type']) + self.system_host_pv.set_disk_or_part_uuid(output_values['disk_or_part_uuid']) + self.system_host_pv.set_disk_or_part_device_node(output_values['disk_or_part_device_node']) + self.system_host_pv.set_disk_or_part_device_path(output_values['disk_or_part_device_path']) + self.system_host_pv.set_lvm_pv_name(output_values['lvm_pv_name']) + self.system_host_pv.set_lvm_vg_name(output_values['lvm_vg_name']) + self.system_host_pv.set_lvm_pv_uuid(output_values['lvm_pv_uuid']) + self.system_host_pv.set_lvm_pv_size_gib(output_values['lvm_pv_size_gib']) + self.system_host_pv.set_lvm_pe_total(output_values['lvm_pe_total']) + self.system_host_pv.set_lvm_pe_alloced(output_values['lvm_pe_alloced']) + self.system_host_pv.set_ihost_uuid(output_values['ihost_uuid']) + self.system_host_pv.set_created_at(output_values['created_at']) + self.system_host_pv.set_updated_at(output_values['updated_at']) + else: + raise KeywordException(f"The output line {output_values} was not valid") + + def get_system_host_pv_show(self): + """ + Returns the parsed system host-pv object. + + Returns: + SystemHostAddrObject: The parsed system host-pv object. + """ + + return self.system_host_pv + + @staticmethod + def is_valid_output(value): + """ + Checks if the output contains all the expected fields. + + Args: + value (dict): The dictionary of output values. + + Returns: + bool: True if the output contains all required fields, False otherwise. + """ + + required_fields = ["uuid", "pv_state", "pv_type", "disk_or_part_uuid", "disk_or_part_device_node", "disk_or_part_device_path", + "lvm_pv_name", "lvm_vg_name", "lvm_pv_uuid", "lvm_pv_size_gib", "lvm_pe_total", + "lvm_pe_alloced", "ihost_uuid", "created_at", "updated_at"] + valid = True + for field in required_fields: + if field not in value: + get_logger().log_error(f'{field} is not in the output value') + valid = False + break + return valid diff --git a/keywords/cloud_platform/system/host/system_host_pv_keywords.py b/keywords/cloud_platform/system/host/system_host_pv_keywords.py index 484fd59..0d7d077 100644 --- a/keywords/cloud_platform/system/host/system_host_pv_keywords.py +++ b/keywords/cloud_platform/system/host/system_host_pv_keywords.py @@ -1,6 +1,7 @@ from keywords.base_keyword import BaseKeyword from keywords.cloud_platform.command_wrappers import source_openrc from keywords.cloud_platform.system.host.objects.system_host_pv_output import SystemHostPvOutput +from keywords.cloud_platform.system.host.objects.system_host_pv_show_output import SystemHostPvShowOutput class SystemHostPvKeywords(BaseKeyword): @@ -30,4 +31,21 @@ class SystemHostPvKeywords(BaseKeyword): output = self.ssh_connection.send(command) self.validate_success_return_code(self.ssh_connection) system_host_lvg_output = SystemHostPvOutput(output) - return system_host_lvg_output \ No newline at end of file + return system_host_lvg_output + + def get_system_host_pv_show(self, host_id, uuid) -> SystemHostPvShowOutput: + """ + Gets the system host-pv-show + + Args: + host_id: name or id of the host + uuid: uuid of pv + Returns: + SystemHostPvShowOutput object. + + """ + command = source_openrc(f'system host-pv-show {host_id} {uuid}') + output = self.ssh_connection.send(command) + self.validate_success_return_code(self.ssh_connection) + system_host_pv_output = SystemHostPvShowOutput(output) + return system_host_pv_output \ No newline at end of file