Replaced BMC reset with PDU reset keyword in restore policy testcase
and added PDU library files for few other PDU types

Tested: Run robot redfish/extended/test_power_restore.robot

Signed-off-by: Aravinth R <aravinthr@ami.com>
Change-Id: I4554c1b071a496feaeef65b7b9735bb97a41c7cb
diff --git a/lib/pdu/cyber.robot b/lib/pdu/cyber.robot
new file mode 100644
index 0000000..3788d3d
--- /dev/null
+++ b/lib/pdu/cyber.robot
@@ -0,0 +1,182 @@
+*** Settings ***
+Documentation   Cyber Power Distribution Unit (PDU) library
+
+Resource        ../../lib/pdu/pdu.robot
+Library         Telnet
+Library         SSHLibrary
+
+*** Keywords ***
+Login To Cyber PDU Via SSH
+    [Documentation]  Open PDU connection and login via SSH.
+
+    Validate Prereq
+    SSHLibrary.Open Connection  ${PDU_IP}
+    ${connection_status}=  Run Keyword And Return Status
+    ...  SSHLibrary.Login  ${PDU_USERNAME}  ${PDU_PASSWORD}
+    Return From Keyword  ${connection_status}
+
+
+Login To Cyber PDU Via Telnet
+    [Documentation]  Open PDU connection and login via telnet.
+
+    # CyberPowerSystems Inc., Command Shell v1.0
+    # Login Name: cyber
+    # Login_Pass: cyber
+
+    Validate Prereq
+    Telnet.Open Connection  ${PDU_IP}  timeout=5
+    Set Telnetlib Log Level  TRACE
+    Telnet.Set Newline  \r
+    Telnet.Write  \n
+    Telnet.Write  ${PDU_USERNAME}
+
+    Telnet.Read Until  Login_Pass:
+    Telnet.Write  ${PDU_PASSWORD}
+
+Power Cycle
+    [Documentation]  Perform PDU power cycle.
+    [Teardown]  Run Keyword  ${lib_name}.Close All Connections
+
+    ${connection_status}=  Login To Cyber PDU Via SSH
+
+    IF  '${connection_status}' == '${False}'
+        Set Test Variable  ${lib_name}  Telnet
+        Login To Cyber PDU Via Telnet
+    ELSE
+        Set Test Variable  ${lib_name}  SSHLibrary
+    END
+
+    #Sample output from cyber PDU console
+
+    # CyberPower System                        ePDU Firmware Version    2.210
+    # (c) Copyright 2010 All Rights Reserved   PDU30SWHVT16FNET
+    # +------- Information -------------------------------------------------------+
+    # Name     : PDU30SWHVT16FNET              Date : 07/05/2022
+    # Contact  : Administrator                 Time : 22:01:49
+    # Location : Server Room                   User : Admin
+    # Up Time  : 178 days 22 hours 29 mins 11 secs.
+    # +------- Console -----------------------------------------------------------+
+
+    #     1- Device Manager
+    #     2- Network Settings
+    #     3- System
+    #     4- Logout
+
+    #     <ESC>- Back, <ENTER>- Select&Reflash
+    # > 1
+
+    # +------- PDU30SWHVT16FNET --------------------------------------------------+
+
+    #     EPDU Information
+    #     -----------------------------------------------------------------------
+    #     Meter or Switch  : Switched          Model Enclosure      : 2U
+    #     EPDU Orientation : Horizontal        Circuit Breaker      : Yes
+    #     Bank Number      : 2                 Outlet Number        : 16
+    #     -----------------------------------------------------------------------
+
+    #     1- Load Manager
+    #     2- Outlet Control
+    #     3- Outlet Configuration
+    #     4- Outlet User Management
+    #     5- See Schedule
+
+    #     <ESC>- Back, <ENTER>- Select&Reflash
+    # > 2
+
+    # +------- Outlet Control ----------------------------------------------------+
+
+    #     Outlet Status:
+    #     ---------------------------------------------------------------------
+    #     Outlet Number  :   1   2   3   4   5   6   7   8   9  10  11  12
+    #     Current State  :  ON  ON  ON  ON  ON  ON  ON  ON  ON  ON  ON  ON
+    #     ---------------------------------------------------------------------
+    #     Outlet Number  :  13  14  15  16  17  18  19  20  21  22  23  24
+    #     Current State  :  ON  ON  ON  ON
+
+    #     1- Start a Control Command
+
+    #     <ESC>- Back, <ENTER>- Select&Reflash
+    # > 1
+
+        # +------- Command Information: Step 1 ---------------------------------------+
+
+    #     Step1. Input a Single outlet or outlet list with outlet index #.
+    #     Note. Separate by symbol ','.
+
+    #     <ESC>- Cancel
+    # > 13, 14
+
+    # +------- Command Information: Step 2 ---------------------------------------+
+
+    #     Selected Outlet:
+    #     16
+
+    #     Step2. Select command to execute
+    #     Selection:
+    #     1- Turn On Immediate
+    #     2- Turn Off Immediate
+    #     3- Reboot Immediate
+    #     4- Turn On Delay
+    #     5- Turn Off Delay
+    #     6- Reboot Delay
+    #     7- Cancel Pending Command
+
+    #     <ESC>- Cancel
+    # >
+
+    # +------- Command Information: Step 3 ---------------------------------------+
+
+    #     Selected Outlet:
+    #     16
+
+    #     with Command:
+    #     Cancel Pending Command
+
+    #     Step3. Confirm your command.
+    #     Note. Input 'yes' to Execute.
+
+    #     <ESC>- Cancel
+    # > yes
+
+    # Select 1- Device Manager
+    Run Keyword  ${lib_name}.Read
+    Run Keyword  ${lib_name}.Write  1
+
+    # Select 2- Outlet Control
+    Run Keyword  ${lib_name}.Read
+    Run Keyword  ${lib_name}.Write  2
+
+    @{outlets}=  Split String  ${PDU_SLOT_NO}  separator=,
+    FOR  ${outlet}  IN  @{outlets}
+        # Select 1- Start a Control Command
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  1
+
+        # Input a Single outlet or outlet list with outlet index #
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  ${outlet}
+
+        # Select command to execute 3- Reboot Immediate
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  3
+
+        # Input 'yes' to Execute
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  yes
+        Run Keyword  ${lib_name}.Read
+    END
+
+    # Send ESC over telnet console and Select 4- Logout
+    ${esc}=  Evaluate  chr(int(27))
+    Set Test Variable  ${retry_count}  ${10}
+    FOR  ${try}  IN RANGE  ${retry_count}
+        Run Keyword  ${lib_name}.Write Bare  ${esc}
+        ${cmd_out}=  Run Keyword  ${lib_name}.Read
+        ${check}=  Run Keyword And Return Status  Should Contain  ${cmd_out}  4- Logout
+        Continue For Loop If  ${check}==${FALSE}
+        Run Keyword If  ${check}==${TRUE}  Run Keywords
+        ...  Run Keyword  ${lib_name}.Write  4  AND
+        ...  Run Keyword  ${lib_name}.Read  AND
+        ...  ${lib_name}.Close All Connections  AND
+        ...  Exit For Loop
+    END
\ No newline at end of file