feat!: report the subscription as a license, not a warning (0.4.0)
CI / test (3.10) (push) Successful in 33s
CI / test (3.11) (push) Successful in 30s
CI / test (3.12) (push) Successful in 35s
CI / test (3.10) (pull_request) Successful in 32s
CI / test (3.11) (pull_request) Successful in 31s
CI / test (3.12) (pull_request) Successful in 34s
CI / test (3.10) (push) Successful in 33s
CI / test (3.11) (push) Successful in 30s
CI / test (3.12) (push) Successful in 35s
CI / test (3.10) (pull_request) Successful in 32s
CI / test (3.11) (pull_request) Successful in 31s
CI / test (3.12) (pull_request) Successful in 34s
get_device_warnings is gone; netOrk names the warnings from facts (netOrk #1111). lldpd and the pending updates were already facts (get_packages, get_available_updates). The subscription is now get_licenses() from napalm-device-types 4.14's LicenseMixin: one pve-subscription entry, the API status mapped to a LicenseStatus. The old check compared against "NotFound" while the API answers "notfound" (seen on all four nodes), so it never fired; the mapping is case-insensitive.
This commit is contained in:
1 parent
8cf334aaf5
commit
1100560f85
5 files changed
+102
-43
No files matched your search
@@ -0,0 +1,62 @@
|
||||
"""The node's subscription as a fact (netOrk #1111).
|
||||
|
||||
The driver named ``no_subscription`` itself, comparing against "NotFound" while
|
||||
the API answers "notfound" -- so it never fired. It reports the subscription
|
||||
now; whether a missing one is a warning is the caller's decision.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from napalm_proxmox import ProxmoxDriver
|
||||
|
||||
|
||||
def _driver(subscription: dict) -> ProxmoxDriver:
|
||||
d = ProxmoxDriver("pve", "root@pam", "pw")
|
||||
d._get_node_subscription = lambda: subscription
|
||||
return d
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"raw, status",
|
||||
[
|
||||
("notfound", "none"),
|
||||
("NotFound", "none"),
|
||||
("active", "active"),
|
||||
("invalid", "invalid"),
|
||||
("expired", "expired"),
|
||||
("new", "unknown"),
|
||||
("suspended", "unknown"),
|
||||
],
|
||||
)
|
||||
def test_the_api_status_as_a_license_status(raw, status):
|
||||
[lic] = _driver({"status": raw, "message": "There is no subscription key"}).get_licenses()
|
||||
|
||||
assert lic["name"] == "pve-subscription"
|
||||
assert lic["status"] == status
|
||||
assert lic["detail"] == "There is no subscription key"
|
||||
|
||||
|
||||
def test_level_and_due_date_when_subscribed():
|
||||
sub = {
|
||||
"status": "active",
|
||||
"productname": "Proxmox VE Community Subscription 1 CPU/year",
|
||||
"nextduedate": "2027-03-01",
|
||||
}
|
||||
[lic] = _driver(sub).get_licenses()
|
||||
|
||||
assert lic["edition"] == "Proxmox VE Community Subscription 1 CPU/year"
|
||||
assert lic["expires"] == "2027-03-01"
|
||||
|
||||
|
||||
def test_an_unreadable_subscription_reports_nothing():
|
||||
"""``_get_node_subscription`` gives {} when the API call fails: no fact, not "none"."""
|
||||
assert _driver({}).get_licenses() == []
|
||||
|
||||
|
||||
def test_no_warnings_of_its_own():
|
||||
"""lldpd, the updates and the subscription are facts the caller reads
|
||||
(get_packages, get_available_updates, get_licenses)."""
|
||||
assert not any("get_device_warnings" in vars(c) for c in ProxmoxDriver.__mro__[:-1]
|
||||
if c.__module__.startswith("napalm_proxmox"))
|
||||
Reference in new issue
Block a user