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:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user