CHANGELOG — NETLAB+ VE Python SDK 24.0.0 documentation

# CHANGELOG

All notable changes to this project will be documented in this file. This project’s version numbers will follow the latest NETLAB+ VE server version.

## 24.0.0 (2025-9-5)

Add the ‘netlab build’ command.

## 23.2.0 (2025-8-21)

### Added

- Add `TemplateRequiredForLinkedCloneError`

- Add `SnapshotNotSupportedError`

### Changed

Snapshot behavior has changed. Previously, the existing snapshot name was used from the source pod. Now the snapshot name will default to GOLDEN.

## 23.1.0 (2025-8-12)

### Added

- Added `PodCategory.TEMPLATE_VM`

## 23.0.0 (2025-7-3)

### Changed

- Stuctured logging used internally.

- Change how vm names are constructed while cloning pods.

## 22.6.0 (2024-10-23)

### Fixed

- Improve usage of –system flag in the cli.

- Fix system.usage.disk documentation.

## 22.5.0 (2024-9-16)

### Added

- Added tests for python 3.12.

- `PYTHON` ssl_ciphers option

- Add `netlab debug`

- Add alias for ‘ssl’ config: ‘noverify’ to ‘self_signed’. ‘self_signed’ will be deprecated.

### Removed

- Remove dependency on `typing_extentions`.

- Remove dependency on `importlib_metadata`.

### Fixed

- Improve handling of csv keys.

## 22.4.0 (2023-02-15)

### Added

- Add `lab_exercise_list`.

### Fixed

- Fix double documentation entries.

### Removed

- Remove python 3.7 support.

## 21.5.0 (2023-01-09)

### Fixed

- Version specifier upperbound is set to `python<4`.

## 21.4.0 (2022-07-05)

### Added

- New `'self_signed'` ssl option that disables hostname checks.

### Fixed

- Version specifier now includes all Python 3.10

## 21.3.0 (2022-01-05)

### Added

- An `ssl.SSLContext` may now be passed for complete control over the connection.

- Remove the ability to disable ssl.

- Remove python 3.6 support.

## 21.2.0 (2021-10-14)

### Added

- `ssl_ciphers` option to `NETLAB+ config`

- `Python 3.10` support

### Fixed

- a bug in the CLI error handling

- missing `pc_clone_specs` attributes

- SSL errors when using Python 3.10

## 21.1.2.4 (2021-06-17)

### Changed

- typing and docs of `vm_snapshot_get_tree`

- typing and docs of `vm_snapshot_get_list`

- typing and docs of `reservation_timeslot_adjuster`

- how the SDK finds the config file – should not affect most users

### Added

- `class_content_add`

- `class_content_availability`

- `class_content_list`

- `class_content_remove`

### Removed

- `timeout` from `config`

- `ssl` from `config` is deprecated

### Fixed

- docs and types on `reservation_make`

## 21.1.2.2 (2021-06-10)

### Changed

- documentation structure. Includes a new Getting Started guide

- `pod_get`: add `VMAlloc` docs

### Added

- `netlab.async_client.NetlabClient`

- `Python 3.9` support

- `mypy support`

- new methods: `class_roster_get`, `class_roster_team_update`, `reservation_plan`, `vm_host_perf_realtime_list`, `system_perf_query`

- `team` parameter to `reservation_make`

### Removed

- `netlab.client.Client` has been deprecated. Please use `netlab.sync_client.SyncClient` or `netlab.async_client.NetlabClient`.

- Python 3.5 support. It has reached `End of Life`. If you’re still using Python 3.5, you should consider upgrading to the current version. Newer versions of Python have many new features, performance improvements, and bug fixes, which should all serve to enhance your Python programming experience.

## 20.4.1.0 - (2020-09-14)

### Changed

- `ex_id` is now a required parameter in the `reservation_make` method

### Fixed

- `pod_clone_task` will now run when pc_type is ABSENT

### Added

- `Python 3.8` support

### Removed

- Python 3.4 support. It has reached `End of Life`. If you’re still using Python 3.4, you should consider upgrading to the current version. Newer versions of Python have many new features, performance improvements, and bug fixes, which should all serve to enhance your Python programming experience

## 19.1.1.0 - (2019-04-05)

### Fixed

- Add setuptools minimum python version. Will now print a warning if user tries to install with python version < 3.4

## 19.0.0.0 - (2019-02-14)

### Added

- new `pod_get` property `vm_alloc`

### Removed

- remove `pod_get` property `pod_csw_base_port`

## 18.7.1.0 - (2018-09-13)

### Added

- `Python 3.7` support.

- new method `user_session_keepalive` (requires NETLAB+ server version 18.2.0 or greater)

- new method `vm_inventory_import_task`

- new method `vm_clone_task`

### Deprecated

- method `vm.inventory.add`, please use `vm_inventory_import_task` instead

### Fixed

- `timedelta` serializer

## 18.2.0.2 - (2018-06-21)

### Added

- additional exceptions `PodNotActiveError`, `PodTypeIncompatibleError`, and `ReservationTimeInsufficientError`

- serializer to turn NETLAB+’s DHMS fields into Python `timedelta` objects

## 18.2.0.1 - (2018-04-26)

### Fixed

- `user_community_update` causing all undefined params to be set to null.

- usage of `user_account_search` in `recurring_reservations.py` sample script

### Added

- example of using Pod ACLs in `pod_acl.py` sample script

## 18.2.0.0 - (2018-02-26)

### Added

- `vm_license_list` method

- `vm_license_update_task` method

### Changed

- `int` fields with no value are now cast to 0 (zero)

## 18.1.0.1 - (2018-02-14)

### Fixed

- Serialization and deserialization of `pod_dyn_vlan` attribute on `pod_list` method

## 18.1.0.0 - (2018-02-13)

### Added

- `vm_inventory_remove_local` method

- `vm_inventory_remove_disk_task` method

- `vm_inventory_remove_datacenter_task` method

- `reservation_extend` method

- `cls_ext_slots_per_res` parameter to `class_update`

- `com_ext_slots_per_res` parameter to `user_community_update`

### Fixed

- Documentation for `user_account_search` method

## 17.3.15.0 - (2018-01-19)

### Added

- New sample PRTG sensor netlab_pod_usage.py

- Add `TEMPLATE` to `netlab.enums.VirtualMachineRole` enum.

## 17.3.11.1 - (2017-11-13)

### Added

- New method `pod_update`

## 17.3.11.0 - (2017-10-24)

### Fixed

- Serializer was trying to convert an integer to a datetime for the fields `end` and `start`

## 17.3.9.0 - (2017-10-10)

### Changed

- CHANGELOG from markdown to RST

### Added

- CHANGELOG to sphinx docs

- Missing parameters (`vm_path`, `vm_vendor_os_name`, `vm_netlab_os_id`, `vm_parent_id`, `vm_parent_snapname`) to `vm_inventory_add`

- New method `pod_pc_update`

- Better explanation of `vm_snapshot` to documentation

### Fixed

- Documentation formatting for `vm_inventory_add`, `vm_snapshot_get_list` and `vm_snapshot_get_tree`

## 17.2.3.2 - (2017-09-20)

### Fixed

- Change `VirtualMachineDatacenterNotFoundUnique` to `VirtualMachineDatacenterNotUniqueError` in `netlab.errors.vm`

- Version comparison when talking to a server in the 17.3.*.RG releases

- `vm_datacenter_find` did not work as expected. Rewritten to mimic `vm_host_find` in behavior

### Updated

- The sample.py to use `clone_vh_id` in the PC clone specs examples

### Added

- New method `vm_host_find` to retrieve the vh_id when you only have the vh_name

## 17.2.3.1 - (2017-08-11)

### Fixed

- Updated docs and example in `pod_clone_task`

- Add validation to `pod_clone_task`

## 17.2.3.0 - (2017-08-09)

### Fixed

- Typo in `AuthenticationError` exception message

## 17.1.8.0 - (2017-06-22)

### Added

- `user_account_search_iter` which combines the power of `user_account_search` with the familiarity of `user_account_list` but uses a generator to efficiently handle paging

### Changed

- `user_account_list` now returns a list, undoing the proceeding release change

## 17.1.6.0 - (2017-06-14)

### Added

- Methods for vm snapshots

    - `PowerState` enum

    - `vm_inventory_add` method

    - `vm_snapshot_add` method

    - `vm_snapshot_edit` method

    - `vm_snapshot_get_list` method

    - `vm_snapshot_get_tree` method

    - `vm_snapshot_remove` method

    - `vm_snapshot_revert` method

### Changed

- `user_account_list` to make many small requests using user.account.search

- `user_account_list` now returns a generator

## 17.1.4.1 - (2017-06-07)

### Fixed

- setup.py wasn’t packaging netlab.enums module

## 17.1.4.0 - (2017-06-05)

### Fixed

- Unit type to ‘Percent’ in PRTG sample script for CPU so that gauages work properly

- sys_maint_ends property is now a date instead of datetime

- Pod clone specs in sample.py uses dictionary syntax now, so the specs apply to all VMs in the pod

### Added

- Methods for managing timezones NETLAB+ is aware of, `system_time_timezone_get` and `system_time_timezone_list`

- `user_account_search` method and new exceptions

### Changed

- HDR Severity and Status are now Enums

- CSV types and other limted sets of values are now Enums

- `pod_clone_task` now returns HDR Result for server versions 17.1.4 and later

- Return results for `pod_remove_task` are now backwards compatible with versions below 17.1.3

### Removed

- `user_account_filter`, its functionality has been replaced with the server side method `user_account_search`

## 17.1.3.1 - (2017-04-27)

### Fixed

- sample.py script for removing pods. Switched to use HDR result

- serialization of date types before sending to NETLAB+

- situations where `user_community_find` can return None

### Added

- User settings for `user_account_add`, `user_account_get`, `user_account_update`

- Sample code for creating PRTG custom sensors for CPU, Disk and Memory usage

- Server version checking. The system usage methods require a minimum server version

## 17.1.3.0 - (2017-04-13)

### Added

- New methods `system.usage.cpu`, `system.usage.disk`, `system.usage.memory`

- New properties cpu_n and uptime_sec to `system.status.get`

### Removed

- `notify_complete` and `otify_progress parameters` to `pod_remove_task`

### Changed

- `pod.remove.task` refactored to use HDR result

- S3 bucket to ‘netlab-py’

- properties param to use default/all style for the following methods: `class_list`, `class_get`, `class_roster_list`, `pod_get`, `pod_types_get`, `pod_types_list`, `user_community_get`, `user_community_list`

### Fixed

- Make sure config file path exists before writing to it.

## 17.1.2.4 - (2017-02-23)

### Fixed

- Setup.py not installing all netlab modules properly

## 17.1.2.3 - (2017-02-23)

### Fixed

- PC Clone specs handling of clone_snapshot to use existing VM if not specified

- Use project JSON serializer in CLI api subcommand. Handles dates and other types specific to NETLAB.

### Added

- User import sample script. Reads from a CSV file.

### Changed

- `res_timeslot_adjuster` has been changed to a static method and renamed to `reservation_timeslot_adjuster`. It is no longer used by `reservervation_make` and `end_time` must reside on a time slot boundary (hour or half hour).

- Renamed the `tround_low` parameter of `reservation_timeslot_adjuster` to be `round_low`.

- Made `'ALL'` the default scope for `reservation_query`.

## 17.1.2.2 - (2017-02-13)

### Fixed

- PC Clone specs handling of `source_snapshot` to use existing VM if not specified

- Display error if the number of PC Clone specs doesn’t match the number of VMs to clone

## 17.1.2.1 - (2017-02-13)

### Changed

- CLI uses proper exit codes after errors

### Fixed

- Pc Clone specs handling of `clone_name`

## 17.1.2.0 - (2017-02-10)

### Added

- Docs are built and published to S3 at same time package is built and published

- CLI api subcommand `--output` to change how output is displayed. Options: `table`, `csv`, `tsv`, `json` and `var`

- CLI config subcommand `--all` option to remove all settings from config.json

- Individual exceptions for each NETLAB+ error

- Add exceptions to documenation

### Changed

- `vm_datacenter_list` now uses the native API method vm.datacenter.list

- `CHANGELOG` moved to its own file

## 17.1.1.1 - (2017-02-06)

### Fixed

- Documentation for properties in `class_get`, `class_list`, and `reservation_get`

### Removed

- No longer includes the `long_description` metadata parameter in setup.py

## 17.1.1.0 - (2017-02-06)

### Added

- MIT License

- Pod ACL methods

- Spinx autogenerates docs from docstrings of API methods

- `netlab config` CLI subcommand for managing config.json

- `netlab api` CLI subcommand for interacting with the NETLAB+ API

### Fixed

- `netlab version` CLI subcommand properly returns versions now

### Changed

- All properties that should be integers are coerced to the `int` type, i.e. `acc_id, `com_id`, etc. Previously they could sometimes be returned as strings.

### Removed

- To ensure consistency with method return values, `what_if` is no longer a parameter.

## 17.1.0.0 - (2017-01-23)

### Added

- All methods and documentation for initial public release.