De korte containernaam 'agent' wees naar de verkeerde app
Alle apps van umbrelOS delen een Docker-netwerk, dus een servicenaam als 'agent' is daar niet uniek. Electrum Gate heeft er een op poort 8000 en Evolu Relay sinds vandaag ook, en Docker verdeelde de naam netjes over allebei. Gemeten op het apparaat: van tien verzoeken vanuit de nginx-container kwamen er vijf bij de verkeerde app uit, met een 404 tot gevolg. Op de statuspagina zag dat eruit als een status die wisselde tussen "running" en "agent unreachable". Dit raakte twee apps, en de tweede is de vervelende: de pagina van Electrum Gate proxyde ook naar http://agent:8000 en werkte alleen omdat die app tot vandaag de enige met die naam was. Het installeren van Evolu Relay heeft die pagina dus kapotgemaakt. Beide gaan nu naar <app-id>_agent_1, en beide manifesten gaan omhoog, want zonder verhoging bereikt een gewijzigde template geen bestaande installatie. Dezelfde les stond al in de compose van Electrum Gate, over de servicenaam 'server', en die is bij het schrijven van de nginx-config genegeerd. Daarom nu een toets erop: test_appstore_vorm controleert voor elke app dat een proxy_pass en elke *_HOST-variabele een naam gebruiken die met het app-id begint. Muteertest gedaan, de toets viel om op precies de korte naam. Bijgewerkt in build.sh: VERSION daar is het etiket op de image, en `version` in het manifest is een ander nummer dat erop vooruit mag lopen. Ze lopen uiteen zodra er een reparatie in de app-map zit zonder dat de image wijzigt, en dat is nu het geval. Tests: alle vier groen (34, 54, 39 en 60 goed, 0 fout). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -270,6 +270,52 @@ def test_data_onder_data(u, app):
|
||||
not ontbreekt, "ontbreekt: %r" % ontbreekt)
|
||||
|
||||
|
||||
def test_containernamen_zijn_volledig(u, app):
|
||||
"""Verwijzingen tussen containers gebruiken de volledige naam.
|
||||
|
||||
Alle apps van umbrelOS delen één Docker-netwerk, dus een servicenaam als
|
||||
'agent' of 'server' is daar niet uniek. Heeft een tweede app dezelfde naam,
|
||||
dan verdeelt Docker de naam over beide containers en komt ongeveer de helft
|
||||
van het verkeer bij de verkeerde app uit.
|
||||
|
||||
Dat is geen theorie: op 28-08-2026 gaf de statuspagina van Evolu Relay
|
||||
afwisselend goede gegevens en een 404, omdat Electrum Gate óók een 'agent' op
|
||||
poort 8000 heeft. Van tien verzoeken kwamen er vijf verkeerd uit. Het maakte
|
||||
bovendien de pagina van Electrum Gate kapot, een app die tot dat moment werkte.
|
||||
|
||||
De vorm <app-id>_<service>_1 is wél uniek. Deze toets kijkt naar de plekken
|
||||
waar een naam als hostnaam wordt gebruikt: proxy_pass in een nginx-config, en
|
||||
de omgevingsvariabelen die een hostnaam dragen.
|
||||
"""
|
||||
fout = []
|
||||
|
||||
for bestandsnaam in sorted(os.listdir(os.path.join(REPO, app))):
|
||||
if not bestandsnaam.endswith(".template") and bestandsnaam != "docker-compose.yml":
|
||||
continue
|
||||
tekst = lees(os.path.join(REPO, app, bestandsnaam))
|
||||
for regel in tekst.splitlines():
|
||||
kaal = regel.strip()
|
||||
if kaal.startswith("#"):
|
||||
continue
|
||||
|
||||
naam = None
|
||||
if kaal.startswith("proxy_pass http://"):
|
||||
naam = kaal[len("proxy_pass http://"):].split(":", 1)[0].split("/", 1)[0]
|
||||
elif "_HOST:" in kaal and not kaal.startswith("- "):
|
||||
waarde = kaal.split(":", 1)[1].strip().strip('"')
|
||||
# Een variabele van umbrelOS of een IP-adres is geen containernaam.
|
||||
if waarde and not waarde.startswith("${") and not waarde[0].isdigit():
|
||||
naam = waarde
|
||||
|
||||
if naam is None or naam in ("localhost", "127.0.0.1"):
|
||||
continue
|
||||
if not naam.startswith(app + "_"):
|
||||
fout.append("%s: %s" % (bestandsnaam, naam))
|
||||
|
||||
u.check("%s: verwijzingen naar containers gebruiken de volledige naam" % app,
|
||||
not fout, "korte namen: %r" % fout)
|
||||
|
||||
|
||||
def rapporteer_pinstatus(apps):
|
||||
"""Afdrukken, niet toetsen. Zie de uitleg bovenaan dit bestand."""
|
||||
print()
|
||||
@@ -299,6 +345,7 @@ def main():
|
||||
test_manifest_volgorde(u, app)
|
||||
test_compose_bestaat_en_hangt_samen(u, app)
|
||||
test_data_onder_data(u, app)
|
||||
test_containernamen_zijn_volledig(u, app)
|
||||
|
||||
rapporteer_pinstatus(apps)
|
||||
return u.rapport()
|
||||
|
||||
Reference in New Issue
Block a user