From 18a9f835e8e3130f5733120a8c11df362e304cc6 Mon Sep 17 00:00:00 2001 From: Guntaka Umashankar Reddy Date: Mon, 10 Feb 2025 06:17:20 -0500 Subject: [PATCH] system ptp-interface and ptp-instance-apply keywords Change-Id: I36d97162481ad4926b952542fdf431d989fce312 Signed-off-by: Guntaka Umashankar Reddy --- .../system_ptp_interface_list_object.py | 64 +++++++++++++ .../system_ptp_interface_list_output.py | 43 +++++++++ .../objects/system_ptp_interface_object.py | 77 ++++++++++++++++ .../objects/system_ptp_interface_output.py | 47 ++++++++++ .../ptp/system_ptp_instance_keywords.py | 24 ++++- .../ptp/system_ptp_interface_keywords.py | 90 +++++++++++++++++++ 6 files changed, 343 insertions(+), 2 deletions(-) create mode 100644 keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_object.py create mode 100644 keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_output.py create mode 100644 keywords/cloud_platform/system/ptp/objects/system_ptp_interface_object.py create mode 100644 keywords/cloud_platform/system/ptp/objects/system_ptp_interface_output.py create mode 100644 keywords/cloud_platform/system/ptp/system_ptp_interface_keywords.py diff --git a/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_object.py b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_object.py new file mode 100644 index 00000000..66f25c82 --- /dev/null +++ b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_object.py @@ -0,0 +1,64 @@ +class SystemPTPInterfaceListObject: + """ + Represents a SystemPTPInterfaceListObject with associated attributes. + """ + + def __init__(self): + """ + Initializes a SystemPTPInterfaceListObject instance. + """ + self.uuid = None + self.name = None + self.ptp_instance_name = None + self.parameters = [] + + + def set_uuid(self, uuid: str): + """ + Setter for this ptp-interface-list uuid + """ + self.uuid = uuid + + def get_uuid(self) -> str: + """ + Getter for this ptp-interface-list uuid + """ + return self.uuid + + def set_name(self, name: str): + """ + Setter for this ptp-interface-list name + """ + self.name = name + + def get_name(self) -> str: + """ + Getter for this ptp-interface-list name + """ + return self.name + + def set_ptp_instance_name(self, ptp_instance_name: str): + """ + Setter for this ptp-interface-list ptp_instance_name + """ + self.ptp_instance_name = ptp_instance_name + + def get_ptp_instance_name(self) -> str: + """ + Getter for this ptp-interface-list ptp_instance_name + """ + return self.ptp_instance_name + + def set_parameters(self, parameters: list): + """ + Setter for this ptp-interface-list parameters + """ + self.parameters = parameters + + def get_parameters(self) -> list[str]: + """ + Getter for this ptp-interface-list parameters + """ + return self.parameters + + \ No newline at end of file diff --git a/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_output.py b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_output.py new file mode 100644 index 00000000..b7a52287 --- /dev/null +++ b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_list_output.py @@ -0,0 +1,43 @@ +from keywords.cloud_platform.system.ptp.objects.system_ptp_interface_list_object import SystemPTPInterfaceListObject +from keywords.cloud_platform.system.system_table_parser import SystemTableParser +from keywords.python.type_converter import TypeConverter + + +class SystemPTPInterfaceListOutput: + """ + This class parses the output of ptp-interface-list command into an object of type SystemPTPInterfaceListObject. + """ + + def __init__(self, system_ptp_interface_list_output): + """ + Constructor + + Args: + system_ptp_interface_list_output (str): Output of the system ptp-interface-list command. + """ + self.system_ptp_interface_list_output: list[SystemPTPInterfaceListObject] = [] + system_table_parser = SystemTableParser(system_ptp_interface_list_output) + output_values = system_table_parser.get_output_values_list() + + for value in output_values: + system_ptp_interface_list_object = SystemPTPInterfaceListObject() + if 'uuid' in value: + system_ptp_interface_list_object.set_uuid(value['uuid']) + + if 'name' in value: + system_ptp_interface_list_object.set_name(value['name']) + + if 'ptp_instance_name' in value: + system_ptp_interface_list_object.set_ptp_instance_name(value['ptp_instance_name']) + + if 'parameters' in value: + system_ptp_interface_list_object.set_parameters(TypeConverter.parse_string_to_list(value['parameters'])) + self.system_ptp_interface_list_output.append(system_ptp_interface_list_object) + + def get_ptp_interface_list(self) -> SystemPTPInterfaceListObject: + """ + Returns the parsed system ptp-interface-list + + Returns: + """ + return self.system_ptp_interface_list_output \ No newline at end of file diff --git a/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_object.py b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_object.py new file mode 100644 index 00000000..84aced8c --- /dev/null +++ b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_object.py @@ -0,0 +1,77 @@ +class SystemPTPInterfaceObject: + """ + Represents a SystemPTPInterfaceObject with associated attributes. + """ + + def __init__(self): + """ + Initializes a SystemPTPInterfaceObject instance. + """ + self.uuid = None + self.name = None + self.interface_names = [] + self.ptp_instance_name = None + self.parameters = [] + + + def set_uuid(self, uuid: str): + """ + Setter for this ptp-interface uuid + """ + self.uuid = uuid + + def get_uuid(self) -> str: + """ + Getter for this ptp-interface uuid + """ + return self.uuid + + def set_name(self, name: str): + """ + Setter for this ptp-interface name + """ + self.name = name + + def get_name(self) -> str: + """ + Getter for this ptp-interface name + """ + return self.name + + def set_interface_names(self, interface_names: list): + """ + Setter for this ptp-interface interface_names + """ + self.interface_names = interface_names + + def get_interface_names(self) -> list[str]: + """ + Getter for this ptp-interface interface_names + """ + return self.interface_names + + def set_ptp_instance_name(self, ptp_instance_name: str): + """ + Setter for this ptp-interface ptp_instance_name + """ + self.ptp_instance_name = ptp_instance_name + + def get_ptp_instance_name(self) -> str: + """ + Getter for this ptp-interface ptp_instance_name + """ + return self.ptp_instance_name + + def set_parameters(self, parameters: list): + """ + Setter for this ptp-interface parameters + """ + self.parameters = parameters + + def get_parameters(self) -> list[str]: + """ + Getter for this ptp-interface parameters + """ + return self.parameters + + \ No newline at end of file diff --git a/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_output.py b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_output.py new file mode 100644 index 00000000..9c853457 --- /dev/null +++ b/keywords/cloud_platform/system/ptp/objects/system_ptp_interface_output.py @@ -0,0 +1,47 @@ +from framework.exceptions.keyword_exception import KeywordException +from keywords.cloud_platform.system.ptp.objects.system_ptp_interface_object import SystemPTPInterfaceObject +from keywords.cloud_platform.system.system_vertical_table_parser import SystemVerticalTableParser +from keywords.python.type_converter import TypeConverter + + +class SystemPTPInterfaceOutput: + """ + This class parses the output of ptp-interface command into an object of type SystemPTPInterfaceObject. + """ + + def __init__(self, system_ptp_interface_output): + """ + Constructor + + Args: + system_ptp_interface_output (str): Output of the system ptp-interface command. + """ + + system_vertical_table_parser = SystemVerticalTableParser(system_ptp_interface_output) + output_values = system_vertical_table_parser.get_output_values_dict() + + self.system_ptp_interface_object = SystemPTPInterfaceObject() + + if 'uuid' not in output_values: + raise KeywordException(f"The output line {output_values} was not valid because it is missing an 'uuid'.") + self.system_ptp_interface_object.set_uuid(output_values['uuid']) + + if 'name' in output_values: + self.system_ptp_interface_object.set_name(output_values['name']) + + if 'interface_names' in output_values: + self.system_ptp_interface_object.set_interface_names(TypeConverter.parse_string_to_list(output_values['interface_names'])) + + if 'ptp_instance_name' in output_values: + self.system_ptp_interface_object.set_ptp_instance_name(output_values['ptp_instance_name']) + + if 'parameters' in output_values: + self.system_ptp_interface_object.set_parameters(TypeConverter.parse_string_to_list(output_values['parameters'])) + + def get_ptp_interface(self) -> SystemPTPInterfaceObject: + """ + Returns the parsed system ptp-interface + + Returns: + """ + return self.system_ptp_interface_object \ No newline at end of file diff --git a/keywords/cloud_platform/system/ptp/system_ptp_instance_keywords.py b/keywords/cloud_platform/system/ptp/system_ptp_instance_keywords.py index bdaeaf74..394caf2f 100644 --- a/keywords/cloud_platform/system/ptp/system_ptp_instance_keywords.py +++ b/keywords/cloud_platform/system/ptp/system_ptp_instance_keywords.py @@ -53,7 +53,11 @@ class SystemPTPInstanceKeywords(BaseKeyword): output = self.ssh_connection.send(command) self.validate_success_return_code(self.ssh_connection) - return output + # output is a List of 1 string. "['Deleted PTP instance: xxxx-xxxx-xxx\n']" + if output and len(output) > 0: + return output[0].strip() + else: + raise "Output is expected to be a List with one element." def get_system_ptp_instance_show(self,name: str) -> SystemPTPInstanceOutput : """ @@ -70,7 +74,7 @@ class SystemPTPInstanceKeywords(BaseKeyword): self.validate_success_return_code(self.ssh_connection) system_ptp_instance_show_output = SystemPTPInstanceOutput(output) - return system_ptp_instance_show_output[0].strip('\n') + return system_ptp_instance_show_output def get_system_ptp_instance_list(self) -> SystemPTPInstanceListOutput : """ @@ -84,3 +88,19 @@ class SystemPTPInstanceKeywords(BaseKeyword): system_ptp_instance_list_output = SystemPTPInstanceListOutput(output) return system_ptp_instance_list_output + + def system_ptp_instance_apply(self) -> str : + """ + Apply the PTP Instance config + + Returns: + """ + command = source_openrc("system ptp-instance-apply") + output = self.ssh_connection.send(command) + self.validate_success_return_code(self.ssh_connection) + + # output is a List of 1 string. "['Applying the PTP Instance configuration\n']" + if output and len(output) > 0: + return output[0].strip() + else: + raise "Output is expected to be a List with one element." \ No newline at end of file diff --git a/keywords/cloud_platform/system/ptp/system_ptp_interface_keywords.py b/keywords/cloud_platform/system/ptp/system_ptp_interface_keywords.py new file mode 100644 index 00000000..962a7f67 --- /dev/null +++ b/keywords/cloud_platform/system/ptp/system_ptp_interface_keywords.py @@ -0,0 +1,90 @@ +from keywords.base_keyword import BaseKeyword +from keywords.cloud_platform.command_wrappers import source_openrc +from starlingx.keywords.cloud_platform.system.ptp.objects.system_ptp_interface_output import SystemPTPInterfaceOutput +from keywords.cloud_platform.system.ptp.objects.system_ptp_interface_list_output import SystemPTPInterfaceListOutput + +class SystemPTPInterfaceKeywords(BaseKeyword): + """ + Provides methods to interact with the system ptp-interface + using given SSH connection. + + Attributes: + ssh_connection: An interface of an SSH connection. + """ + + def __init__(self, ssh_connection): + """ + Initializes the SystemPTPInterfaceKeywords with an SSH connection. + + Args: + ssh_connection: An interface of an SSH connection. + """ + self.ssh_connection = ssh_connection + + def system_ptp_interface_add(self,name: str, ptp_instance_name: str) -> SystemPTPInterfaceOutput : + """ + Add a PTP interface + + Args: + name : name of interface + ptp_instance_name: ptp instance name + + Returns: + """ + cmd = f"system ptp-interface-add {name} {ptp_instance_name}" + command = source_openrc(cmd) + output = self.ssh_connection.send(command) + self.validate_success_return_code(self.ssh_connection) + system_ptp_interface_add_output = SystemPTPInterfaceOutput(output) + + return system_ptp_interface_add_output + + def system_ptp_interface_delete(self,name: str) -> str : + """ + Delete an interface + + Args: + name : name or UUID of interface + + Returns: + """ + cmd = f"system ptp-interface-delete {name}" + command = source_openrc(cmd) + output = self.ssh_connection.send(command) + self.validate_success_return_code(self.ssh_connection) + + # output is a List of 1 string. "['Deleted PTP interface: xxxx-xxxx-xxx\n']" + if output and len(output) > 0: + return output[0].strip() + else: + raise "Output is expected to be a List with one element." + + def get_system_ptp_interface_show(self,name: str) -> SystemPTPInterfaceOutput : + """ + Show PTP interface attributes. + + Args: + name : name or UUID of interface + + Returns: + """ + cmd = f"system ptp-interface-show {name}" + command = source_openrc(cmd) + output = self.ssh_connection.send(command) + self.validate_success_return_code(self.ssh_connection) + system_ptp_interface_show_output = SystemPTPInterfaceOutput(output) + + return system_ptp_interface_show_output + + def get_system_ptp_interface_list(self) -> SystemPTPInterfaceListOutput : + """ + List all PTP interfaces + + Returns: + """ + command = source_openrc("system ptp-interface-list") + output = self.ssh_connection.send(command) + self.validate_success_return_code(self.ssh_connection) + system_ptp_interface_list_output = SystemPTPInterfaceListOutput(output) + + return system_ptp_interface_list_output