Skip to content

Commit 31f3509

Browse files
authored
Merge pull request #352 from networktocode/release/v2.2.0
Release v2.2.0
2 parents 2fb374a + ba4a148 commit 31f3509

16 files changed

Lines changed: 1346 additions & 917 deletions

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ jobs:
9191
strategy:
9292
fail-fast: true
9393
matrix:
94-
python-version: ["3.10", "3.13"]
94+
python-version: ["3.10", "3.11"] # TODO: Switch back to latest supported Python when https://github.com/networktocode/pyntc/issues/351 is completed
9595
env:
9696
INVOKE_PYNTC_PYTHON_VER: "${{ matrix.python-version }}"
9797
steps:
@@ -127,7 +127,7 @@ jobs:
127127
strategy:
128128
fail-fast: true
129129
matrix:
130-
python-version: ["3.10", "3.11", "3.12", "3.13"]
130+
python-version: ["3.10", "3.11"] # TODO: Re-enable Python 3.12 and 3.13 when https://github.com/networktocode/pyntc/issues/351 is completed
131131
runs-on: "ubuntu-latest"
132132
env:
133133
INVOKE_PYNTC_PYTHON_VER: "${{ matrix.python-version }}"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# v2.2 Release Notes
2+
3+
This document describes all new features and changes in the release. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4+
5+
## Release Overview
6+
7+
- Added OS upgrade support for Junos devices.
8+
9+
## [v2.2.0 (2026-03-09)](https://github.com/networktocode/pyntc/releases/tag/v2.2.0)
10+
11+
### Added
12+
13+
- [#350](https://github.com/networktocode/pyntc/issues/350) - Added OS upgrade support for Junos devices.

docs/user/lib_getting_started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ interface GigabitEthernet1
252252

253253
#### Remote File Copy (Download to Device)
254254

255-
Some devices support copying files directly from a URL to the device. This is useful for larger files like OS images. To do this, you need to use the `FileCopyModel` data model to specify the source file information and then pass that to the `remote_file_copy` method. Currently only supported on Cisco IOS devices. Tested with ftp, http, https, sftp, and tftp urls.
255+
Some devices support copying files directly from a URL to the device. This is useful for larger files like OS images. To do this, you need to use the `FileCopyModel` data model to specify the source file information and then pass that to the `remote_file_copy` method. Currently only supported on Cisco IOS and Juniper Junos devices. Tested with ftp, http, https, sftp, and tftp urls.
256256

257257
- `remote_file_copy` method
258258

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ nav:
143143
- v1.0: "admin/release_notes/version_1.0.md"
144144
- v2.0: "admin/release_notes/version_2.0.md"
145145
- v2.1: "admin/release_notes/version_2.1.md"
146+
- v2.2: "admin/release_notes/version_2.2.md"
146147
- Developer Guide:
147148
- Extending the Library: "dev/extending.md"
148149
- Contributing to the Library: "dev/contributing.md"

poetry.lock

Lines changed: 999 additions & 859 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyntc/devices/aireos_device.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ def _wait_for_device_reboot(self, timeout=3600):
345345
log.debug("Host %s: Device rebooted.", self.host)
346346
return
347347
except: # noqa E722 # nosec # pylint: disable=bare-except
348-
pass
348+
time.sleep(10)
349349

350350
# TODO: Get proper hostname parameter
351351
log.error("Host %s: Device timed out while rebooting.", self.host)

pyntc/devices/asa_device.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def _wait_for_device_reboot(self, timeout=3600):
294294
log.debug("Host %s: Device rebooted.", self.host)
295295
return
296296
except: # noqa E722 # nosec # pylint: disable=bare-except
297-
pass
297+
time.sleep(10)
298298

299299
# TODO: Get proper hostname parameter
300300
log.error("Host %s: Device timed out while rebooting.", self.host)

pyntc/devices/eos_device.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def _wait_for_device_reboot(self, timeout=3600):
154154
log.debug("Host %s: Device rebooted.", self.host)
155155
return
156156
except: # noqa E722 # nosec # pylint: disable=bare-except
157-
pass
157+
time.sleep(10)
158158

159159
log.error("Host %s: Device timed out while rebooting.", self.host)
160160
raise RebootTimeoutError(hostname=self.hostname, wait_time=timeout)

pyntc/devices/ios_device.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def _wait_for_device_reboot(self, timeout=3600):
243243
if self._has_reload_happened_recently():
244244
return
245245
except: # noqa E722 # nosec # pylint: disable=bare-except
246-
pass
246+
time.sleep(10)
247247

248248
log.error("Host %s: Device timed out while rebooting.", self.host)
249249
raise RebootTimeoutError(hostname=self.hostname, wait_time=timeout)
@@ -865,7 +865,7 @@ def install_os(self, image_name, install_mode=False, read_timeout=2000, **vendor
865865
Args:
866866
image_name (str): Name of the IOS image to boot into
867867
install_mode (bool, optional): Uses newer install method on devices. Defaults to False.
868-
read_timeout (int, optional): Netmiko timeout when waiting for device prompt. Default 30.
868+
read_timeout (int, optional): Netmiko timeout when waiting for device prompt. Default 2000.
869869
vendor_specifics (dict, optional): Vendor specific arguments to pass to the install command.
870870
871871
Raises:

pyntc/devices/iosxewlc_device.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def _wait_for_device_reboot(self, timeout=5400):
3535
log.debug("Host %s: Device rebooted.", self.host)
3636
return
3737
except Exception: # noqa E722 # nosec # pylint: disable=broad-except
38-
pass
38+
time.sleep(10)
3939

4040
log.error("Host %s: Device timed out while rebooting.", self.host)
4141
raise RebootTimeoutError(hostname=self.hostname, wait_time=timeout)

0 commit comments

Comments
 (0)