Listing a host's services and starting or stopping one is the same on every host that runs systemd, so the command, its parse, the check of a unit name and the reading of an action's exit status live here once, and a driver supplies only the transport (napalm-linux#7, napalm-proxmox#6): - SYSTEMD_SERVICES_COMMAND: one read-only POSIX sh line. list-unit-files, then one systemctl show over every loaded service unit (Id, Names, LoadState, ActiveState, SubState, UnitFileState, MainPID), and is-enabled only for generated units, whose boot state lives in a SysV script's rc links. Framed; [no-systemd] when /run/systemd/system is missing. Replaces an is-enabled and a show per unit: 0.8 s instead of 6 s on a 180-unit Ubuntu host. - parse_systemd_services(): loaded units except not-found, plus installed unit files that are not loaded; no templates, no aliases (also not the ones older systemd lists as "enabled"). enabled = UnitFileState enabled or enabled-runtime, read from systemctl show and never from list-unit-files' second column, which has had a preset column after it since systemd 245. A report whose end is missing raises ValueError, so a list cut short never reads as services that went away; a host without systemd raises SystemdUnavailable, a NotImplementedError, so a driver can fall back. - unit_name() / service_action_command() / parse_action_result(): template instances, dots, colons and \xHH escapes accepted; a bare template, a leading "-" and anything a shell reads refused. The action runs as "timeout 45 systemctl --no-ask-password <action> -- <unit>.service" with its exit status printed after it; only that status decides, 124 is not called done, and terminal colour codes are dropped. The marker also keeps the output from ever being empty, which a transport that retries on an empty answer would take as a reason to run the action twice. - SystemdServicesMixin, in the template form: get_services() and manage_service() are concrete, _run_service_command(command, *, privileged, timeout) is the driver's hook. Mixed in by the drivers whose host runs systemd, not by OSDriver. Version 2.2.0.
66 lines
1.6 KiB
TOML
66 lines
1.6 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "napalm-device-types"
|
|
version = "2.2.0"
|
|
description = "Abstract device-type base classes for NAPALM drivers"
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
license = { text = "Apache-2.0" }
|
|
authors = [
|
|
{ name = "Christian Manivong", email = "christian@manivong.de" },
|
|
]
|
|
keywords = [
|
|
"napalm",
|
|
"network",
|
|
"automation",
|
|
"driver",
|
|
"access-point",
|
|
"switch",
|
|
"firewall",
|
|
"hypervisor",
|
|
"storage",
|
|
"nas",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: System Administrators",
|
|
"License :: OSI Approved :: Apache Software License",
|
|
"Operating System :: OS Independent",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: System :: Networking",
|
|
"Topic :: System :: Systems Administration",
|
|
"Typing :: Typed",
|
|
]
|
|
dependencies = [
|
|
"napalm>=4.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/chrismanivong/napalm-device-types"
|
|
Repository = "https://github.com/chrismanivong/napalm-device-types"
|
|
Issues = "https://github.com/chrismanivong/napalm-device-types/issues"
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest",
|
|
"mypy",
|
|
"build",
|
|
"twine",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["napalm_device_types*"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.10"
|
|
strict = true
|
|
ignore_missing_imports = true
|