Skip to content
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changes/398.added
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added native Cisco IOS-XR (eXR / 64-bit) support via the `cisco_iosxr_ssh` driver (`IOSXRDevice`), including `remote_file_copy` (FTP/TFTP/SCP/HTTP/HTTPS) and OS upgrades from a single golden ISO (built with Cisco's gisobuild tool) through the asynchronous `install add` / `install activate` / `install commit` workflow.
52 changes: 52 additions & 0 deletions docs/user/lib_overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,59 @@ It's main purpose is to simplify the execution of common tasks including:
- Cisco AireOS - uses netmiko (SSH)
- Cisco ASA - uses netmiko (SSH)
- Cisco IOS platforms - uses netmiko (SSH)
- Cisco IOS-XR (eXR / 64-bit) - uses netmiko (SSH)
- Cisco NX-OS - uses pynxos (NX-API)
- Arista EOS - uses pyeapi (eAPI)
- Juniper Junos - uses PyEz (NETCONF)
- F5 Networks - uses f5-sdk (ReST)

!!! note "IOS-XR upgrades require a golden ISO"
The `cisco_iosxr_ssh` driver (`IOSXRDevice`) performs eXR OS upgrades using the
asynchronous native install workflow (`install add` → poll → `install activate` →
poll → reload → `install commit` → verify).

The driver upgrades from a single **golden ISO**. On eXR a bare base ISO
**cannot be activated on its own** when optional feature packages (IS-IS, OSPF,
MPLS, multicast, etc.) are active: `install activate` aborts demanding the
matching-version RPMs be activated in the same operation. A golden ISO solves
this by bundling the base XR image and the matching feature RPMs into one file,
so it activates cleanly without supplying separate packages:

```python
device.install_os("ncs5k-golden-x-7.11.2-NTC7112.iso")
```

The golden ISO must already be staged on `harddisk:` (use `remote_file_copy`).
Installing a base ISO plus separate feature RPMs is **not** supported by this
driver.

!!! tip "Building a golden ISO with gisobuild"
Build a golden ISO with Cisco's [gisobuild](https://github.com/ios-xr/gisobuild)
tool. Provide the platform's base (`mini`) ISO, a repository of the matching
feature RPMs you want bundled, a label (which becomes part of the resulting
filename), and an output directory:

```bash
ntc@linux-server:~/xr/gisobuild$ mkdir -p /home/ntc/xr/7.11.1/giso_out

./src/gisobuild.py \
--iso /home/ntc/xr/7.11.1/ncs5k-mini-x-7.11.1.iso \
--repo /home/ntc/xr/7.11.1/ \
--pkglist ncs5k-isis-1.0.0.0-r7111.x86_64.rpm \
ncs5k-ospf-1.0.0.0-r7111.x86_64.rpm \
ncs5k-mpls-1.0.0.0-r7111.x86_64.rpm \
ncs5k-mpls-te-rsvp-1.0.0.0-r7111.x86_64.rpm \
ncs5k-mcast-1.0.0.0-r7111.x86_64.rpm \
ncs5k-mgbl-1.0.0.0-r7111.x86_64.rpm \
ncs5k-m2m-1.0.0.0-r7111.x86_64.rpm \
--label NTC711 \
--out-directory /home/ntc/xr/7.11.1/giso_out \
--create-checksum \
--clean \
--docker
```

On success gisobuild writes the golden ISO (e.g.
`ncs5k-golden-x-7.11.1-NTC711.iso`) into the output directory. Publish that file
to the server `remote_file_copy` pulls from, then pass its filename to
`install_os`.
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ nav:
- pyntc.devices.f5_device: "code-reference/pyntc/devices/f5_device.md"
- pyntc.devices.ios_device: "code-reference/pyntc/devices/ios_device.md"
- pyntc.devices.iosxewlc_device: "code-reference/pyntc/devices/iosxewlc_device.md"
- pyntc.devices.iosxr_device: "code-reference/pyntc/devices/iosxr_device.md"
- pyntc.devices.jnpr_device: "code-reference/pyntc/devices/jnpr_device.md"
- pyntc.devices.nxos_device: "code-reference/pyntc/devices/nxos_device.md"
- pyntc.devices.system_features: "code-reference/pyntc/devices/system_features/__init__.md"
Expand Down
2 changes: 2 additions & 0 deletions pyntc/devices/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from .f5_device import F5Device
from .ios_device import IOSDevice
from .iosxewlc_device import IOSXEWLCDevice
from .iosxr_device import IOSXRDevice
from .jnpr_device import JunosDevice
from .nxos_device import NXOSDevice

Expand All @@ -14,6 +15,7 @@
"arista_eos_eapi": EOSDevice,
"f5_tmos_icontrol": F5Device,
"cisco_ios_ssh": IOSDevice,
"cisco_iosxr_ssh": IOSXRDevice,
"juniper_junos_netconf": JunosDevice,
"cisco_nxos_nxapi": NXOSDevice,
"cisco_aireos_ssh": AIREOSDevice,
Expand Down
Loading
Loading