TP44 Teil B: CF-Sync-Job — VPC service_id-Feld + None-Match-Guard

Dry-Run-Befund: CloudService 'terpene-db' (VPC) wurde faelschlich als stale
markiert und fremde extra_config in 'App Launcher' gemischt. Ursache: VPC-
Directory-Services tragen ihren Identifier in "service_id", der Job las "id"
(=None). Ueber .get(mk)==None matchte der None-Wert das erste Objekt ohne den
Key. Fix: VPC nutzt v["service_id"]; _upsert ueberspringt mv=None generell.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 11:09:30 +02:00
parent 33b18a08db
commit 43c592e5d4

View File

@@ -127,8 +127,10 @@ class CFEstateSync(Job):
if not ok: if not ok:
skipped.append("connectivity/directory/services") skipped.append("connectivity/directory/services")
for v in (vpc or []): for v in (vpc or []):
services.append((v.get("name") or v.get("id"), "Cloudflare VPC Service", "VPC-Service", # VPC-Directory-Services tragen ihren Identifier in "service_id" (NICHT "id").
{"service_id": v.get("id"), "type": v.get("type")}, "service_id", v.get("id"))) sid = v.get("service_id") or v.get("id")
services.append((v.get("name") or sid, "Cloudflare VPC Service", "VPC-Service",
{"service_id": sid, "type": v.get("type")}, "service_id", sid))
ok, rts = self._cf_get(f"/accounts/{A}/teamnet/routes?per_page=50") ok, rts = self._cf_get(f"/accounts/{A}/teamnet/routes?per_page=50")
if not ok: if not ok:
@@ -141,6 +143,11 @@ class CFEstateSync(Job):
# ---------------------------------------------------------------- ORM-Upsert # ---------------------------------------------------------------- ORM-Upsert
def _upsert(self, model, cache, name, rt, acct, desc, extra, mk, mv, label, seen, dryrun): def _upsert(self, model, cache, name, rt, acct, desc, extra, mk, mv, label, seen, dryrun):
# mv=None nie matchen: sonst greift .get(mk)==None auf das erste Objekt OHNE mk
# und mischt fremde extra_config zusammen (z.B. VPC ohne id -> App-Launcher).
if mv is None:
self.logger.warning("~ %s '%s' ohne Match-Wert (%s) — uebersprungen", label, name, mk)
return None
ex = next((o for o in cache if (o.extra_config or {}).get(mk) == mv), None) ex = next((o for o in cache if (o.extra_config or {}).get(mk) == mv), None)
if ex: if ex:
seen.add(ex.id) seen.add(ex.id)