Supported Platforms and PowerCyclers

Note

pyATS Clean is designed modular to enable community-based contribution model. It is expected user communities will contribute to the pyATS clean stage/steps for support specifics of their given OS/Platform/Powercycler or to close the gap on an any features.

Refer to the Developer Guide documentation to get started in your development.

Supported OS/Platforms

The following table specifies the current set of OS and Platform types supported by pyATS Clean.

Product

os

platform

ASR 1000

iosxe

ASR 1000v

iosxe

ISR

iosxe

Catalyst 9000

iosxe

cat9k

Catalyst 8000v

iosxe

c8kv

Nexus 7000

nxos

n7k

Nexus 9000

nxos

n9k

Nexus 9000v

nxos

n9k

Nexus 9000 (aci mode)

nxos

aci

NCS 5500

iosxr

ASR 9000 x64

iosxr

ASR 9000 px

iosxr

APIC

apic

Catalyst WS-C3560CX

ios

cat3k

To use this table, locate the Product that corresponds with your device and fill the os and platform keys into your Testbed YAML.

For example, if the device was a Catalyst 9000, then the Testbed YAML should be as follows:

1devices:
2  catalyst-9000:
3    os: iosxe
4    platform: cat9k
5    custom:
6      abstraction:
7        order: [os, platform]

Supported Power Cyclers

Power cyclers connection to devices are important to auto-recover the device by force reset/power off/on the devices when they have lost connectivity. pyATS Clean provides a feature for recovering devices in the testbed if they are in a hung state. Recovery is invoked if connecting to the device fails, or if an exception is thrown while the device is being upgraded.

As a brief overview, recovery includes the following steps:

  • Connect to Power Cycler and perform power cycle.

  • Connect to device and break the boot sequence, in order to bring the device to loader/rommon prompt.

  • Boots the devices with ‘golden_image’ provided as part of clean file.

  • Pass control back to pyATS Clean.

The following table specifies the current set of PowerCycler types supported by pyATS Clean.

PowerCycler

Arguments

raritan-px

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        type: raritan-px
        connection_type: snmp
        host (str): Ip address for Powercycler.
        outlets (list): Power ports associated with your device.
        read_community (str, optional): 'private' or 'public'.
            Defaults to 'public'.
        write_community (str, optional): 'private' or 'public'.
            Defaults to 'private'.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: raritan-px
          connection_type: snmp
          host: 127.0.0.1
          outlets: [20]

raritan-px2 (snmp)

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: raritan-px2
          connection_type: snmp
          host (str): Ip address for Powercycler.
          outlets (list): Power ports associated with your device.
          read_community (str, optional): 'private' or 'public'.
              Defaults to 'public'.
          write_community (str, optional): 'private' or 'public'.
              Defaults to 'private'.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: raritan-px2
          connection_type: snmp
          host: 127.0.0.1
          outlets: [20]

raritan-px2 (snmpv3)

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: raritan-px2
          connection_type: snmpv3
          host (str): Ip address for Powercycler.
          outlets (list): Power ports associated with your device.
          username (str): username for Powercycler.
          auth_key (str): authentication password.
          auth_protocol (str): authentication protocol.
          priv_key (str): private protocol password.
          priv_protocol (str): private protocol type.
          security_level (str): Different security levels.

  Snmpv3 supports three security levels:
    1. AuthPriv (Authentication and privacy)
    2. AuthNoPriv (Authentication)
    3. NoAuthNoPriv (None)

  Snmpv3 supported authentication protocols:
   'md5', 'sha', 'sha224', 'sha256, 'sha384', 'sha512'

  Snmpv3 supported private protocols:
   'des', '3des',  'aes128',  'aes192', 'aes256'

Testbed Example
---------------
Type 1: (AuthPriv)

devices:
    PE1:
      peripherals:
        power_cycler:
            type: raritan-px2
            connection_type: snmpv3
            host: pdu_host
            outlets: [15]
            username: test_user
            auth_key: ****
            auth_protocol: md5
            priv_key: ****
            priv_protocol: aes128
            security_level: authpriv

  Type 2: (AuthNoPriv)

  devices:
    PE1:
      peripherals:
        power_cycler:
            type: raritan-px2
            connection_type: snmpv3
            host: pdu_host
            outlets: [15]
            username: test_user
            auth_key: ****
            auth_protocol: md5
            security_level: authnopriv

  Type 3: (NoAuthNoPriv)

  devices:
    PE1:
      peripherals:
        power_cycler:
            type: raritan-px2
            connection_type: snmpv3
            host: pdu_host
            outlets: [15]
            username: test_user
            security_level: noauthnopriv

generic-cli

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: generic-cli
          host (str): Ip address for Powercycler.
          connection_type: ssh
          outlets (list, optional): Power ports associated with your device.
          commands (dict):
              power_on (str): Command to power on the Powercycler
              power_off (str): Command to power off the Powercycler

Description
-----------

  Commands argument takes in any power_on and power_off commands,
  which are mandatory.

  Example: 1 (If outlets are used)

  These commands should have outlet string on it, if the power cycle
  is based on oulet. For example

      commands:
            power_on: "power outlets {outlet} on"
            power_off: "power outlets {outlet} off"

  It is mandatory to specify the {outlet} as this string format.

  Example: 2 (If device names are used)

  If the device name is used to powercycle. Please refer
  the example below:

      commands:
            power_on: "power-tool %{self} on"
            power_off: "power-tool %{self} off"

  Here %{self} takes the device name from the testbed.


Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: generic-cli
          host: 127.0.0.1
          connection_type: ssh
          outlets: [6]
          commands:
              power_on: "power outlets {outlet} on"
              power_off: "power outlets {outlet} off"

Raritan

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: Raritan
          host (str): Ip address for Powercycler.
          connection_type: ssh
          outlets (list): Power ports associated with your device.

Description
-----------
  The power_on and power_off commands for Raritan are added by default.
  The user needs to pass the outlets.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
          - type: Raritan
            host: 127.0.0.1
            connection_type: telnet
            outlets: [7]

apc

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: apc
          connection_type: snmp
          host (str): Ip address for Powercycler.
          outlets (list): Power ports associated with your device.
          read_community (str, optional): 'private' or 'public'.
              Defaults to 'public'.
          write_community (str, optional): 'private' or 'public'.
              Defaults to 'private'.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: apc
          connection_type: snmp
          host: 127.0.0.1
          outlets: [20]

apc-rpdu

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: apc-rpdu
          connection_type: snmp
          host (str): Ip address for Powercycler.
          outlets (list): Power ports associated with your device.
          read_community (str, optional): 'private' or 'public'.
              Defaults to 'public'.
          write_community (str, optional): 'private' or 'public'.
              Defaults to 'private'.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: apc-rpdu
          connection_type: snmp
          host: 127.0.0.1
          outlets: [20]

dualcomm

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: dualcomm
          connection_type: snmp
          host (str): Ip address for Powercycler.
          outlets (list): Power ports associated with your device.
          read_community (str, optional): 'private' or 'public'.
              Defaults to 'public'.
          write_community (str, optional): 'private' or 'public'.
              Defaults to 'private'.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: dualcomm
          connection_type: snmp
          host: 127.0.0.1
          outlets: [20]

cyberswitching

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: cyberswitching
          connection_type: telnet
          host (str): Cyberswitching device from Testbed YAML.
          outlets (list): Lines associated with your device.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: cyberswitching
          connection_type: telnet
          host: my-cyberswitching
          outlets: [20]

  my-cyberswitching:
    # Fill out the rest of this device as normal
    # such as connection info, credentials, etc

ESXi

Testbed Schema
--------------
devices:
  <device>:
    peripherals:
      power_cycler:
        - type: esxi
          connection_type: ssh
          host (str): ESXi device from Testbed YAML.
          outlets (list): VM IDs associated with your device.

Testbed Example
---------------
devices:
  PE1:
    peripherals:
      power_cycler:
        - type: esxi
          connection_type: ssh
          host: my-esxi
          outlets: [20]

  my-esxi:
    # Fill out the rest of this device as normal
    # such as connection info, credentials, etc

To use this table, locate the PowerCycler that corresponds with yours and fill the arguments into your Testbed YAML under the device peripherals key.

For example, if the PowerCycler was a dualcomm connected to PE1, then the Testbed YAML should be modified as follows:

1devices:
2  PE1:
3    peripherals:
4      power_cycler:
5        - type: dualcomm
6          connect_type: snmp
7          host: 127.0.0.1
8          outlets: [22]

You could have more than one PowerCyclers connected to your device. For example, if you have two PowerCycler with dualcomm type connected to PE1, then the Testbed Yaml looks like this:

 1devices:
 2  PE1:
 3    peripherals:
 4      power_cycler:
 5        - type: dualcomm
 6          connect_type: snmp
 7          host: 127.0.0.1
 8          outlets: [22]
 9        - type: dualcomm
10          connect_type: snmp
11          host: 127.0.0.2
12          outlets: [20]

See Device Recovery for additional information.