NOC 25.1.3¶
The 25.1.3 release backports 45 bug fixes, improvements, and deployment changes from the development branch since the 25.1.2 release.
New features¶
| MR | Title |
|---|---|
| b584b94a | CPU affinity: new config.process.cpu_affinity parameter |
| 89c48fba | CPE: add five more capability collections |
| 148c0713 | Juniper.JUNOS: add get_interface_properties script |
| 0e60f4b7 | Services now start via python -m entrypoint |
| 12e4f638 | Deploy: platform and licence-level checks at install time |
| fd8570c8 | Migrate dependency management and installation to uv |
CPU affinity¶
A new config.process.cpu_affinity parameter allows pinning each NOC service worker to a dedicated CPU via AffinityController (new core/affinity.py). When enabled, a worker is bound to the configured CPU, allowing its CPU scheduling to be controlled independently of other services. The affinity is applied in BaseService.start.
CPE capabilities¶
CPE profile discovery is extended with five additional capability collections: IP_Address, Location, Modulation, Revision, and SW_Version. These are registered in sa/profiles/CPE/cpe.py, allowing CPE objects to carry IP addresses, geographic locations, modulation modes, hardware revisions, and software versions.
Juniper JUNOS interface properties¶
A new autoconfiguration script, sa/profiles/Juniper/JUNOS/get_interface_properties.py, collects interface properties such as speed, duplex, and MTU from Juniper JUNOS devices.
Service entrypoint via python -m¶
Each microservice in services/ now has a __main__.py entrypoint (e.g. SelfMonService().start()), allowing it to be launched with python -m services.<name>. The Tower deployment roles have been updated to use the new entrypoint.
Deploy-time platform and licence checks¶
A new ansible/check_platform.yml playbook and ansible/vars/platforms.yml define the platforms supported by each NOC licence level (ce / pro). Deployment now fails early with a clear message if the target ansible_distribution is not listed, or if the target platform requires a pro licence and the configured noc_license_level does not grant access.
Dependency management migrated to uv¶
The development tooling and installation process have been migrated from the pip-based mechanism to uv. This includes dependency groups and build configuration in pyproject.toml, uv invocation in services/selfmon and commands/fix / commands/migrate-sysadmin, and uv-aware service startup in core/service/base.py. Legacy pip requirements files and their associated CI hooks have been removed.
Improvements¶
| MR | Title |
|---|---|
| 9b9fff53 | deploy: relocate uv cache to /opt/uv |
| 479f0d04 | deploy: process TOWER_HOME and TOWER_CACHE variables |
| e1e241e0 | deploy: set PYTHONPATH to {{ noc_root }}/src |
| 2c26a9f4 | deploy: set the NOC UI theme by default |
| 527c009b | deploy: replace with_items loops with loop |
| 59ba193f | docs: adjust emoji rendering settings |
Bug fixes¶
| MR | Title |
|---|---|
| 578f66d5 | Fix custom profile script loading |
| 52a99bce | migrate-liftbridge: materialise pools before creating streams |
| 36586b68 | Object.get_name_path: allow empty names |
| bcf99a1b | Fix OS.Linux interface type detection |
| 10b93f72 | Fix string formatting in the network-scan command |
| f20962cd | net-scan: drop unnecessary tuple wrappers |
| 9c29c5e8 | deploy: fix bool filter usage |
| 13c9d060 | ansible: fix loop usage |
| 3ff0dc67 | deploy: use boolean values for become and gather_facts |
| fef9aeea | deploy: fix system Python handling |
| 89314346 | Rename noc_licence_level to noc_license_level |
- Custom profile scripts now resolve their modules under the
noc.custombase (core/script/loader.py), fixing the loading of scripts shipped with custom profiles. migrate-liftbridgematerialises the fullPoolcollection before enumerating per-pool streams, avoiding repeatedPool.objects.all()queries and ensuring that pool objects are available before their correspondingliftbridge.<pool>streams are created.Object.get_name_pathtolerates an empty or absentname, preventing crashes when a managed object has no name.OS.Linuxinterface type mapping now recogniseseno/enp/ens/enxprefixes as physical interfaces,wl/wlpprefixes as wireless interfaces, and PVEfw/ta/vmprefixes as virtual interfaces. Unrecognised prefixes now returnunknowninstead ofNone.- The misspelled
noc_licence_levelvariable has been renamed tonoc_license_levelacross Ansible roles and variable definitions.
Removed¶
| MR | Title |
|---|---|
| b5975b80 | Revert the disposition rules |
| bb5695ff | Drop the fm.dispositionrules collection |
| 4f76b296 | Remove the legacy branding scheme (licence enforcement) |
| 8821f44d | deploy: remove EOL platforms from the supported list |
| c8798ad0 | Remove jemalloc usage |
| 26605975 | Remove unused Collection.CUSTOM_PREFIX |
- Disposition rules are reverted (#584). The correlator/classifier reprocessing wiring (
services/correlator/{rule,service}.py, classifier{actionset,eventconfig,service}.py,fm/main/samodel changes, and theui/web/fm/dispositionruleUI) has been rolled back, and thefm.dispositionrulesseed collection is no longer shipped (#589). TheDispositionRulemodel is retained to preserve the schema in existing deployments; only the behaviour and bundled seed data have been removed. - Legacy branding scheme has been removed as part of licence enforcement introduced in 25.1. The
brandconfiguration option andNOC_BRANDenvironment variable have been dropped. The brand name is now fixed and protected by the licence. Seeconfig.py,core/version.py,services/web/apps/main/desktop/views.py, anddocs/config-reference/global.md. - EOL platforms have been removed from the supported deployment matrix:
CentOS_7,Debian_10,OracleLinux_7,RedHat_7/RED_7, andUbuntu_20. Debian 11 deployment now uses archive repositories and installs Consul manually. - jemalloc is no longer used by the container image or service configuration (
Dockerfile,services/*/conf.py).
Deploy changes¶
| MR | Title |
|---|---|
| 1557cc17 | Use Debian 11 archive repositories |
| 2b1fc57b | Debian 11: install Consul manually |
| 4d5e65ae | deploy: remove variables for deprecated platforms |
| c06ea37f | deploy: remove the legacy noc_python_interpreter variable |
| 6e34f4e4 | deploy: remove the get_tags lookup plugin |
| cdedce8b | deploy: remove the myglob lookup plugin |
| 1cd36918 | Remove the legacy compile-bytecode and cleanup-pyc deployment steps |
| f164c02f | Remove the unused facter package |
Code cleanup¶
| MR | Title |
|---|---|
| 2786df25 | Remove obsolete checks and outdated knowledge-base references |
| 9bb0f914 | Remove the obsolete lookup_solution parameter |
| 349cdac5 | Remove unused variables |
| be0d63c6 | Clean up unused Ansible playbook variables |
| 3b0b34e7 | Remove deprecated Molecule test scenarios |
| 094ea58a | Add the missing src/noc/cmib → cmib link |
| d2d810a9 | Add the missing development link |
| caed432f | CI: disable CodeQL (security scanning moved elsewhere) |
Thanks for your contributions to the NOC project!