Author SHA1 Message Date
Christian Manivong 5e371db3af fix: do not claim update reading or applying QTS cannot do
QTS has no apt, dnf or opkg, so the update readers inherited from
LinuxDriver find no package manager, and QPKG updates are not implemented.
get_available_updates, refresh_available_updates and apply_updates are None,
the same opt-out as manage_service: netOrk's patch groups and compliance
report include a driver only when these are callable.
2026-10-06 00:20:12 +02:00
christianmanivong 872e5718a3 Merge pull request 'fix: do not claim service control QTS cannot do' (#1) from fix/no-service-control into main 2026-10-05 11:12:16 +00:00
Christian Manivong 77313ca436 fix: do not claim service control QTS cannot do
QnapQtsDriver inherits LinuxDriver, which now has manage_service() through
napalm-device-types' SystemdServicesMixin. QTS has no systemd, so every
action would fail. manage_service = None makes every capability check --
is manage_service callable -- answer no, so netOrk offers no controls that
cannot work.
2026-10-05 13:12:16 +02:00
2 changed files with 31 additions and 0 deletions
+11
View File
@@ -68,6 +68,17 @@ class QnapQtsDriver(StorageDriver, HypervisorDriver, LinuxDriver):
driver_name = "qnap_qts"
NETMIKO_DEVICE_TYPE = "linux"
#: QTS has no systemd, so the systemctl actions LinuxDriver inherits from
#: napalm-device-types' SystemdServicesMixin would fail on every unit. None
#: makes every "can it control services?" check -- is ``manage_service``
#: callable -- answer no, rather than offering buttons that cannot work.
manage_service = None # type: ignore[assignment]
#: The same for updates: QTS has no apt, dnf or opkg, and QPKG updates are
#: not implemented. netOrk leaves a driver without them out of patching.
get_available_updates = None # type: ignore[assignment]
refresh_available_updates = None # type: ignore[assignment]
apply_updates = None # type: ignore[assignment]
SNMP_OBJECT_ID_PREFIX = QNAP_ENTERPRISE_OID
SNMP_FINGERPRINT = [
FingerprintRule("qnap", weight=9.0),
+20
View File
@@ -182,3 +182,23 @@ class TestDockerBinDiscovery:
def test_docker_bin_hook_returns_the_discovered_path(self, driver):
driver._docker_path = "/opt/docker"
assert driver._docker_bin() == "/opt/docker"
def test_services_cannot_be_controlled():
"""QTS has no systemd: the systemctl actions inherited from LinuxDriver would
fail on every unit, so the driver says it cannot control services at all --
which is what every capability check asks (is ``manage_service`` callable?)."""
from napalm_linux.linux import LinuxDriver
assert callable(getattr(LinuxDriver, "manage_service", None))
assert not callable(getattr(QnapQtsDriver, "manage_service", None))
def test_updates_are_not_read_or_applied_here():
"""QTS has no apt, dnf or opkg: the readers inherited from LinuxDriver find no
package manager, and QPKG updates are not implemented. Saying so keeps QNAP out
of netOrk's patch groups and compliance report, which ask whether these
methods are callable."""
for method in ("get_available_updates", "refresh_available_updates", "apply_updates"):
assert not callable(getattr(QnapQtsDriver, method, None)), method