From dea949a0035c5927d780db7455a5f30e3c30e925 Mon Sep 17 00:00:00 2001 From: Ramon Date: Mon, 27 Jul 2026 00:34:22 +0200 Subject: [PATCH] v0.5.44-beta - gedetecteerd netwerk verdween uit het formulier Zodra je een netwerk had toegevoegd, was het blok "gevonden op deze server" leeg bij een volgende poging. Ik filterde subnetten eruit die al geconfigureerd waren, met de gedachte "niet nog een keer voorstellen". Dat pakt verkeerd uit: je kunt prima een tweede netwerk op hetzelfde subnet willen met een andere range, en de gegevens zijn sowieso handig om te kunnen naslaan. Zonder dat blok lijkt het formulier bovendien kapot. - Gedetecteerde netwerken blijven altijd staan; ze krijgen een vlag 'configured' en tonen 'al toegevoegd' in plaats van 'gebruiken'. - Levert de detectie niets op zonder dat er een fout is, dan staat er nu een uitleg in plaats van een leeg blok. - Regressietest die het blok controleert voor en na het aanmaken. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb --- VERSION | 2 +- server-up/app.py | 8 ++++++-- server-up/templates/index.html | 9 ++++++++- server-up/translations/en.json | 4 +++- server-up/translations/nl.json | 4 +++- tests/test_network_detect.py | 28 ++++++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/VERSION b/VERSION index 42de7df..cce16a2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.43-beta +0.5.44-beta diff --git a/server-up/app.py b/server-up/app.py index 2c9aaab..e03b2fe 100644 --- a/server-up/app.py +++ b/server-up/app.py @@ -1392,9 +1392,13 @@ def api_networks(): entry["next_ip"] = networks.next_free_ip(n, _reserved_ips()) out.append(entry) gedetecteerd = networks.detect_host_networks() - # Al geconfigureerde subnetten niet nog een keer voorstellen. + # Gedetecteerde netwerken blijven altijd staan, ook als er al een netwerk op + # dat subnet bestaat: je kunt er prima een tweede aanmaken met een andere + # range, en de gegevens zijn sowieso handig om te kunnen naslaan. Ze worden + # alleen gemarkeerd als 'al toegevoegd'. bestaand = {n.get("subnet") for n in defined if isinstance(n, dict)} - voorstellen = [n for n in gedetecteerd["networks"] if n["subnet"] not in bestaand] + voorstellen = [{**n, "configured": n["subnet"] in bestaand} + for n in gedetecteerd["networks"]] return jsonify(networks=out, detected=voorstellen, detect_error=gedetecteerd.get("error", ""), diff --git a/server-up/templates/index.html b/server-up/templates/index.html index 2699b42..cb9324e 100644 --- a/server-up/templates/index.html +++ b/server-up/templates/index.html @@ -910,7 +910,8 @@ tailwind.config = {
- Gebruiken + Gebruiken
:
@@ -926,6 +927,12 @@ tailwind.config = {

+ +

+ + +

diff --git a/server-up/translations/en.json b/server-up/translations/en.json index 03e39ef..03db41f 100644 --- a/server-up/translations/en.json +++ b/server-up/translations/en.json @@ -239,5 +239,7 @@ "to": "to", "range_ruim": "covers all", "range_krap": "fits inside", - "range_count": "{count} addresses" + "range_count": "{count} addresses", + "already_added": "already added", + "detect_empty": "No network with a default route was found on this server. Fill in the details below manually." } diff --git a/server-up/translations/nl.json b/server-up/translations/nl.json index 3601e93..b84aa8b 100644 --- a/server-up/translations/nl.json +++ b/server-up/translations/nl.json @@ -239,5 +239,7 @@ "to": "tot", "range_ruim": "dekt alles", "range_krap": "past binnen", - "range_count": "{count} adressen" + "range_count": "{count} adressen", + "already_added": "al toegevoegd", + "detect_empty": "Er is geen netwerk met een default route gevonden op deze server. Vul de gegevens hieronder handmatig in." } diff --git a/tests/test_network_detect.py b/tests/test_network_detect.py index 8e38041..dc12e52 100644 --- a/tests/test_network_detect.py +++ b/tests/test_network_detect.py @@ -349,3 +349,31 @@ def test_range_endpoint(client): d = r.get_json() assert d["ok"] is True assert d["options"][0]["cidr"] == "10.0.20.192/26" + + +def test_gedetecteerd_netwerk_blijft_zichtbaar_na_toevoegen(client, monkeypatch): + """Een al geconfigureerd subnet werd uit de suggesties gefilterd, waardoor + het hele 'gevonden op deze server'-blok verdween zodra je het netwerk had + aangemaakt. Nu blijft het staan, gemarkeerd als al toegevoegd.""" + from conftest import login + from core import networks as nw + csrf = login(client) + monkeypatch.setattr(nw, "detect_host_networks", lambda force=False: { + "networks": [{"interface": "ens18", "subnet": "10.0.20.0/24", + "gateway": "10.0.20.1", "suggested_range": "10.0.20.240/28", + "driver": "macvlan", "name": "lan"}], "error": ""}) + monkeypatch.setattr(nw, "exists", lambda naam: False) + monkeypatch.setattr(nw, "create", lambda net: (True, "ok")) + monkeypatch.setattr(nw, "used_ips", lambda naam: set()) + + assert client.get("/api/networks").get_json()["detected"][0]["configured"] is False + + client.post("/api/networks", + json={"name": "lan", "driver": "macvlan", "parent": "ens18", + "subnet": "10.0.20.0/24", "gateway": "10.0.20.1", + "ip_range": "10.0.20.240/28"}, + headers={"X-CSRF-Token": csrf}) + + detected = client.get("/api/networks").get_json()["detected"] + assert len(detected) == 1, "suggestie mag niet verdwijnen" + assert detected[0]["configured"] is True