|  | *** 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 |