From 742cf37ec9554bdc6a96f4e160008d90983815c5 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 20 Aug 2026 16:20:58 +0200 Subject: [PATCH] fix(hosted): give every routed cell service a Coolify-resolvable name Coolify validates a routed service against its exact Compose key but resolves that key after rewriting "-" to "_", so a hyphenated routed service is stored where routing never reads it. The eSignet proxies already carry underscore names; extend that to the fourteen remaining routed services so their public routes can be set through the API instead of only through the Coolify UI. Only Compose service keys and their depends_on references change. Volume keys, host paths, label values, public hostnames, and the published URL map keep their hyphens. Signed-off-by: Jeremi Joslin --- compose.coolify.agriculture.yaml | 10 +++-- compose.coolify.interior.yaml | 14 ++++--- compose.coolify.labour-pensions.yaml | 10 +++-- compose.coolify.social-development.yaml | 12 ++++-- compose.coolify.yaml | 10 +++-- docs/hosted-deployment.md | 6 +++ scripts/test_hosted_evidence_routes.py | 43 ++++++++++++++------ scripts/test_hosted_home_topology.py | 4 +- scripts/test_hosted_network_isolation.py | 12 +++--- scripts/test_hosted_provisioning_topology.py | 22 +++++----- scripts/test_runtime_topology.py | 12 +++--- 11 files changed, 99 insertions(+), 56 deletions(-) diff --git a/compose.coolify.agriculture.yaml b/compose.coolify.agriculture.yaml index 02ad76d..19e0931 100644 --- a/compose.coolify.agriculture.yaml +++ b/compose.coolify.agriculture.yaml @@ -10,6 +10,10 @@ x-runtime: &runtime depends_on: audit-permissions: {condition: service_completed_successfully} +# Coolify matches a routed service against its exact compose key but resolves +# that key after rewriting "-" to "_", so a hyphenated name is stored where +# routing never reads it. Every service carrying solmara.lab.host therefore +# uses an underscore name. services: audit-permissions: image: ${SOLMARA_AUTHORITY_PROVISIONER_IMAGE:?set the digest-pinned Solmara authority provisioner image} @@ -25,7 +29,7 @@ services: security_opt: [no-new-privileges:true] volumes: [nagdi-relay-audit:/audit/nagdi-relay, nagdi-evidence-audit:/audit/nagdi-evidence] - nagdi-relay: + nagdi_relay: <<: *runtime image: ${REGISTRY_RELAY_IMAGE:?set the digest-pinned official Registry Stack Relay image} command: [serve, --runtime, /etc/relay/nagdi/runtime.yaml] @@ -33,7 +37,7 @@ services: volumes: [/data/solmara-authority-cells/nagdi-relay/runtime:/etc/relay/nagdi:ro, /data/solmara-authority-cells/nagdi-relay/source:/var/lib/relay/source:ro, nagdi-relay-audit:/var/lib/relay/audit] labels: {solmara.lab.host: nagdi-relay-authority-cells.solmara.registrystack.org, solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - nagdi-evidence: + nagdi_evidence: <<: *runtime image: ${SOLMARA_EVIDENCE_IMAGE:?set the digest-pinned official Registry Stack Evidence image} command: [--runtime, /etc/registry-evidence/nagdi/runtime.yaml, serve] @@ -41,7 +45,7 @@ services: networks: {runtime: {ipv4_address: 172.29.5.26}} depends_on: audit-permissions: {condition: service_completed_successfully} - nagdi-relay: {condition: service_started} + nagdi_relay: {condition: service_started} labels: {solmara.lab.host: "${SOLMARA_NAGDI_EVIDENCE_PUBLIC_HOST:-nagdi-evidence.solmara.registrystack.org}", solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} volumes: diff --git a/compose.coolify.interior.yaml b/compose.coolify.interior.yaml index 70f7078..2ebcf1c 100644 --- a/compose.coolify.interior.yaml +++ b/compose.coolify.interior.yaml @@ -10,6 +10,10 @@ x-runtime: &runtime depends_on: audit-permissions: {condition: service_completed_successfully} +# Coolify matches a routed service against its exact compose key but resolves +# that key after rewriting "-" to "_", so a hyphenated name is stored where +# routing never reads it. Every service carrying solmara.lab.host therefore +# uses an underscore name. services: audit-permissions: image: ${SOLMARA_AUTHORITY_PROVISIONER_IMAGE:?set the digest-pinned Solmara authority provisioner image} @@ -25,7 +29,7 @@ services: security_opt: [no-new-privileges:true] volumes: [cra-relay-audit:/audit/cra-relay, nia-relay-audit:/audit/nia-relay, cra-evidence-audit:/audit/cra-evidence, nia-evidence-audit:/audit/nia-evidence] - cra-relay: + cra_relay: <<: *runtime image: ${REGISTRY_RELAY_IMAGE:?set the digest-pinned official Registry Stack Relay image} command: [serve, --runtime, /etc/relay/cra/runtime.yaml] @@ -33,7 +37,7 @@ services: volumes: [/data/solmara-authority-cells/cra-relay/runtime:/etc/relay/cra:ro, /data/solmara-authority-cells/cra-relay/source:/var/lib/relay/source:ro, cra-relay-audit:/var/lib/relay/audit] labels: {solmara.lab.host: cra-relay-authority-cells.solmara.registrystack.org, solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - nia-relay: + nia_relay: <<: *runtime image: ${REGISTRY_RELAY_IMAGE:?set the digest-pinned official Registry Stack Relay image} command: [serve, --runtime, /etc/relay/nia/runtime.yaml] @@ -41,7 +45,7 @@ services: volumes: [/data/solmara-authority-cells/nia-relay/runtime:/etc/relay/nia:ro, /data/solmara-authority-cells/nia-relay/source:/var/lib/relay/source:ro, nia-relay-audit:/var/lib/relay/audit] labels: {solmara.lab.host: nia-relay-authority-cells.solmara.registrystack.org, solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - cra-evidence: + cra_evidence: <<: *runtime image: ${SOLMARA_EVIDENCE_IMAGE:?set the digest-pinned official Registry Stack Evidence image} command: [--runtime, /etc/registry-evidence/cra/runtime.yaml, serve] @@ -49,10 +53,10 @@ services: networks: {runtime: {ipv4_address: 172.29.2.21}} depends_on: audit-permissions: {condition: service_completed_successfully} - cra-relay: {condition: service_started} + cra_relay: {condition: service_started} labels: {solmara.lab.host: "${SOLMARA_CRA_EVIDENCE_PUBLIC_HOST:-cra-evidence.solmara.registrystack.org}", solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - nia-evidence: + nia_evidence: <<: *runtime image: ${SOLMARA_EVIDENCE_IMAGE:?set the digest-pinned official Registry Stack Evidence image} command: [--runtime, /etc/registry-evidence/nia/runtime.yaml, serve] diff --git a/compose.coolify.labour-pensions.yaml b/compose.coolify.labour-pensions.yaml index be82fe4..ed0b952 100644 --- a/compose.coolify.labour-pensions.yaml +++ b/compose.coolify.labour-pensions.yaml @@ -10,6 +10,10 @@ x-runtime: &runtime depends_on: audit-permissions: {condition: service_completed_successfully} +# Coolify matches a routed service against its exact compose key but resolves +# that key after rewriting "-" to "_", so a hyphenated name is stored where +# routing never reads it. Every service carrying solmara.lab.host therefore +# uses an underscore name. services: audit-permissions: image: ${SOLMARA_AUTHORITY_PROVISIONER_IMAGE:?set the digest-pinned Solmara authority provisioner image} @@ -25,7 +29,7 @@ services: security_opt: [no-new-privileges:true] volumes: [sipf-relay-audit:/audit/sipf-relay, sipf-evidence-audit:/audit/sipf-evidence] - sipf-relay: + sipf_relay: <<: *runtime image: ${REGISTRY_RELAY_IMAGE:?set the digest-pinned official Registry Stack Relay image} command: [serve, --runtime, /etc/relay/sipf/runtime.yaml] @@ -33,7 +37,7 @@ services: volumes: [/data/solmara-authority-cells/sipf-relay/runtime:/etc/relay/sipf:ro, /data/solmara-authority-cells/sipf-relay/source:/var/lib/relay/source:ro, sipf-relay-audit:/var/lib/relay/audit] labels: {solmara.lab.host: sipf-relay-authority-cells.solmara.registrystack.org, solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - sipf-evidence: + sipf_evidence: <<: *runtime image: ${SOLMARA_EVIDENCE_IMAGE:?set the digest-pinned official Registry Stack Evidence image} command: [--runtime, /etc/registry-evidence/sipf/runtime.yaml, serve] @@ -41,7 +45,7 @@ services: networks: {runtime: {ipv4_address: 172.29.4.25}} depends_on: audit-permissions: {condition: service_completed_successfully} - sipf-relay: {condition: service_started} + sipf_relay: {condition: service_started} labels: {solmara.lab.host: "${SOLMARA_SIPF_EVIDENCE_PUBLIC_HOST:-sipf-evidence.solmara.registrystack.org}", solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} volumes: diff --git a/compose.coolify.social-development.yaml b/compose.coolify.social-development.yaml index d48991c..157c068 100644 --- a/compose.coolify.social-development.yaml +++ b/compose.coolify.social-development.yaml @@ -10,6 +10,10 @@ x-runtime: &runtime depends_on: audit-permissions: {condition: service_completed_successfully} +# Coolify matches a routed service against its exact compose key but resolves +# that key after rewriting "-" to "_", so a hyphenated name is stored where +# routing never reads it. Every service carrying solmara.lab.host therefore +# uses an underscore name. services: audit-permissions: image: ${SOLMARA_AUTHORITY_PROVISIONER_IMAGE:?set the digest-pinned Solmara authority provisioner image} @@ -25,7 +29,7 @@ services: security_opt: [no-new-privileges:true] volumes: [mosd-relay-audit:/audit/mosd-relay, sro-evidence-audit:/audit/sro-evidence, mosd-evidence-audit:/audit/mosd-evidence] - mosd-relay: + mosd_relay: <<: *runtime image: ${REGISTRY_RELAY_IMAGE:?set the digest-pinned official Registry Stack Relay image} command: [serve, --runtime, /etc/relay/mosd/runtime.yaml] @@ -33,7 +37,7 @@ services: volumes: [/data/solmara-authority-cells/mosd-relay/runtime:/etc/relay/mosd:ro, /data/solmara-authority-cells/mosd-relay/source:/var/lib/relay/source:ro, mosd-relay-audit:/var/lib/relay/audit] labels: {solmara.lab.host: mosd-programme-relay-authority-cells.solmara.registrystack.org, solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - sro-evidence: + sro_evidence: <<: *runtime image: ${SOLMARA_EVIDENCE_IMAGE:?set the digest-pinned official Registry Stack Evidence image} command: [--runtime, /etc/registry-evidence/sro/runtime.yaml, serve] @@ -41,7 +45,7 @@ services: networks: {runtime: {ipv4_address: 172.29.3.23}} labels: {solmara.lab.host: "${SOLMARA_SRO_EVIDENCE_PUBLIC_HOST:-sro-evidence.solmara.registrystack.org}", solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} - mosd-programme-evidence: + mosd_programme_evidence: <<: *runtime image: ${SOLMARA_EVIDENCE_IMAGE:?set the digest-pinned official Registry Stack Evidence image} command: [--runtime, /etc/registry-evidence/mosd-programme/runtime.yaml, serve] @@ -49,7 +53,7 @@ services: networks: {runtime: {ipv4_address: 172.29.3.24}} depends_on: audit-permissions: {condition: service_completed_successfully} - mosd-relay: {condition: service_started} + mosd_relay: {condition: service_started} labels: {solmara.lab.host: "${SOLMARA_MOSD_PROGRAMME_EVIDENCE_PUBLIC_HOST:-mosd-programme-evidence.solmara.registrystack.org}", solmara.rollout.slot: authority-cells, traefik.docker.network: "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}"} volumes: diff --git a/compose.coolify.yaml b/compose.coolify.yaml index 66edf03..6865cf4 100644 --- a/compose.coolify.yaml +++ b/compose.coolify.yaml @@ -12,6 +12,10 @@ x-hosted-evidence-environment: &hosted-evidence SOLMARA_SIPF_EVIDENCE_URL: ${SOLMARA_SIPF_EVIDENCE_PUBLIC_BASE_URL:-https://sipf-evidence.solmara.registrystack.org} SOLMARA_NAGDI_EVIDENCE_URL: ${SOLMARA_NAGDI_EVIDENCE_PUBLIC_BASE_URL:-https://nagdi-evidence.solmara.registrystack.org} CHILD_BENEFIT_FEDERATOR_TOKEN: ${CHILD_BENEFIT_FEDERATOR_TOKEN:?required} +# Coolify matches a routed service against its exact compose key but resolves +# that key after rewriting "-" to "_", so a hyphenated name is stored where +# routing never reads it. Every service carrying solmara.lab.host therefore +# uses an underscore name. services: audit-permissions: image: ${SOLMARA_AUTHORITY_PROVISIONER_IMAGE:?set the digest-pinned Solmara authority provisioner image} @@ -55,14 +59,14 @@ services: security_opt: [no-new-privileges:true] depends_on: mint: {condition: service_started} - static-metadata: + static_metadata: image: ${SOLMARA_STATIC_METADATA_IMAGE:?set a digest-pinned Solmara static metadata image} # The image only layers the published metadata onto a stock Python base and # sets no CMD of its own, so the server has to be named here. command: ["python", "-m", "http.server", "8080", "--bind", "0.0.0.0", "--directory", "/srv/static"] restart: unless-stopped labels: {solmara.lab.host: "${SOLMARA_METADATA_PUBLIC_HOST:-metadata.solmara.registrystack.org}"} - scenario-runner: + scenario_runner: image: ${SOLMARA_SCENARIO_RUNNER_IMAGE:?set a digest-pinned Solmara scenario runner image} restart: unless-stopped environment: @@ -76,7 +80,7 @@ services: depends_on: mint-readiness: {condition: service_completed_successfully} labels: {solmara.lab.host: "${SOLMARA_SCENARIO_RUNNER_PUBLIC_HOST:-scenarios.solmara.registrystack.org}"} - child-benefit-federator: + child_benefit_federator: image: ${SOLMARA_SCENARIO_RUNNER_IMAGE:?set a digest-pinned Solmara scenario runner image} command: ["python", "scenario-runner/child_benefit_federator.py"] restart: unless-stopped diff --git a/docs/hosted-deployment.md b/docs/hosted-deployment.md index 7e68174..78fa6e8 100644 --- a/docs/hosted-deployment.md +++ b/docs/hosted-deployment.md @@ -86,6 +86,12 @@ which resolves to the Coolify-managed network the proxy is on. A routed service that joins the ingress network alone has no choice to remove and carries no such label. +Coolify accepts a routed service only under its exact Compose key but resolves +that key after rewriting `-` to `_`. A hyphenated routed service is therefore +recorded where routing never reads it and answers no public route. Every service +that carries `solmara.lab.host` uses an underscore name so both halves agree. +Volume keys, host paths, label values, and public hostnames are unaffected. + `compose.coolify.provision.yaml` is a dedicated operator-only application. It runs only the one-shot target provisioners and is the sole writer of every shared path except the seven Transit sockets. diff --git a/scripts/test_hosted_evidence_routes.py b/scripts/test_hosted_evidence_routes.py index b88b671..d81a2e9 100644 --- a/scripts/test_hosted_evidence_routes.py +++ b/scripts/test_hosted_evidence_routes.py @@ -14,32 +14,32 @@ TEST_IMAGE = "example.invalid/solmara@sha256:" + "a" * 64 EVIDENCE_ROUTES = { - "cra-evidence": ( + "cra_evidence": ( ROOT / "compose.coolify.interior.yaml", "SOLMARA_CRA_EVIDENCE_PUBLIC_HOST", "cra-evidence.solmara.registrystack.org", ), - "nia-evidence": ( + "nia_evidence": ( ROOT / "compose.coolify.interior.yaml", "SOLMARA_NIA_EVIDENCE_PUBLIC_HOST", "nia-evidence.solmara.registrystack.org", ), - "sro-evidence": ( + "sro_evidence": ( ROOT / "compose.coolify.social-development.yaml", "SOLMARA_SRO_EVIDENCE_PUBLIC_HOST", "sro-evidence.solmara.registrystack.org", ), - "mosd-programme-evidence": ( + "mosd_programme_evidence": ( ROOT / "compose.coolify.social-development.yaml", "SOLMARA_MOSD_PROGRAMME_EVIDENCE_PUBLIC_HOST", "mosd-programme-evidence.solmara.registrystack.org", ), - "sipf-evidence": ( + "sipf_evidence": ( ROOT / "compose.coolify.labour-pensions.yaml", "SOLMARA_SIPF_EVIDENCE_PUBLIC_HOST", "sipf-evidence.solmara.registrystack.org", ), - "nagdi-evidence": ( + "nagdi_evidence": ( ROOT / "compose.coolify.agriculture.yaml", "SOLMARA_NAGDI_EVIDENCE_PUBLIC_HOST", "nagdi-evidence.solmara.registrystack.org", @@ -47,23 +47,23 @@ } RELAY_ROUTES = { - "cra-relay": ( + "cra_relay": ( ROOT / "compose.coolify.interior.yaml", "cra-relay-authority-cells.solmara.registrystack.org", ), - "nia-relay": ( + "nia_relay": ( ROOT / "compose.coolify.interior.yaml", "nia-relay-authority-cells.solmara.registrystack.org", ), - "mosd-relay": ( + "mosd_relay": ( ROOT / "compose.coolify.social-development.yaml", "mosd-programme-relay-authority-cells.solmara.registrystack.org", ), - "sipf-relay": ( + "sipf_relay": ( ROOT / "compose.coolify.labour-pensions.yaml", "sipf-relay-authority-cells.solmara.registrystack.org", ), - "nagdi-relay": ( + "nagdi_relay": ( ROOT / "compose.coolify.agriculture.yaml", "nagdi-relay-authority-cells.solmara.registrystack.org", ), @@ -139,9 +139,11 @@ def test_canonical_evidence_defaults_render_across_apps(self) -> None: ) def test_staging_evidence_hosts_render_without_changing_relay_routes(self) -> None: + # The compose key is not a hostname label, so the staging host comes + # from the canonical route rather than from the service name. overrides = { - variable: f"{service}.staging.example.org" - for service, (_, variable, _) in EVIDENCE_ROUTES.items() + variable: f"{canonical_host.split('.', 1)[0]}.staging.example.org" + for _, variable, canonical_host in EVIDENCE_ROUTES.values() } rendered = { path: render_compose(path, overrides) @@ -162,5 +164,20 @@ def test_staging_evidence_hosts_render_without_changing_relay_routes(self) -> No ) +class RoutedServiceNameTests(unittest.TestCase): + def test_every_routed_service_carries_a_coolify_resolvable_name(self) -> None: + """Coolify accepts a routed service only under its exact compose key but + resolves it after rewriting "-" to "_", so a hyphenated key is stored + where routing never reads it and the service answers no public route.""" + for path in sorted(ROOT.glob("compose.coolify*.yaml")): + compose = yaml.safe_load(path.read_text(encoding="utf-8")) + for name, service in (compose.get("services") or {}).items(): + labels = service.get("labels") or {} + if "solmara.lab.host" not in labels: + continue + with self.subTest(compose=path.name, service=name): + self.assertNotIn("-", name) + + if __name__ == "__main__": unittest.main() diff --git a/scripts/test_hosted_home_topology.py b/scripts/test_hosted_home_topology.py index f279026..42e6621 100644 --- a/scripts/test_hosted_home_topology.py +++ b/scripts/test_hosted_home_topology.py @@ -33,9 +33,9 @@ def test_static_metadata_serves_the_published_directory(self) -> None: # interpreter, so without an explicit command the container exits 0 at # once and restarts forever instead of serving. compose = yaml.safe_load(COMPOSE_PATH.read_text(encoding="utf-8")) - command = compose["services"]["static-metadata"].get("command") + command = compose["services"]["static_metadata"].get("command") - self.assertIsNotNone(command, "static-metadata must name its server command") + self.assertIsNotNone(command, "static_metadata must name its server command") self.assertEqual( command, ["python", "-m", "http.server", "8080", "--bind", "0.0.0.0", "--directory", "/srv/static"], diff --git a/scripts/test_hosted_network_isolation.py b/scripts/test_hosted_network_isolation.py index 1ab17d5..bb199f9 100644 --- a/scripts/test_hosted_network_isolation.py +++ b/scripts/test_hosted_network_isolation.py @@ -35,18 +35,18 @@ INGRESS_NETWORK = "${COOLIFY_RESOURCE_UUID:?set by Coolify for every deployment}" PROVISIONED_SERVICES = { "mint-provisioner": ("core", "mint", "172.29.1.20"), - "cra-evidence-provisioner": ("interior", "cra-evidence", "172.29.2.21"), - "nia-evidence-provisioner": ("interior", "nia-evidence", "172.29.2.22"), - "sro-evidence-provisioner": ("social", "sro-evidence", "172.29.3.23"), + "cra-evidence-provisioner": ("interior", "cra_evidence", "172.29.2.21"), + "nia-evidence-provisioner": ("interior", "nia_evidence", "172.29.2.22"), + "sro-evidence-provisioner": ("social", "sro_evidence", "172.29.3.23"), "mosd-evidence-provisioner": ( "social", - "mosd-programme-evidence", + "mosd_programme_evidence", "172.29.3.24", ), - "sipf-evidence-provisioner": ("pensions", "sipf-evidence", "172.29.4.25"), + "sipf-evidence-provisioner": ("pensions", "sipf_evidence", "172.29.4.25"), "nagdi-evidence-provisioner": ( "agriculture", - "nagdi-evidence", + "nagdi_evidence", "172.29.5.26", ), } diff --git a/scripts/test_hosted_provisioning_topology.py b/scripts/test_hosted_provisioning_topology.py index 844a4be..dabc851 100644 --- a/scripts/test_hosted_provisioning_topology.py +++ b/scripts/test_hosted_provisioning_topology.py @@ -396,22 +396,22 @@ def test_evidence_provisioners_bind_all_interfaces_on_addressed_runtimes( ) -> None: runtime_services = { "cra": self.runtime["compose.coolify.interior.yaml"]["services"][ - "cra-evidence" + "cra_evidence" ], "nia": self.runtime["compose.coolify.interior.yaml"]["services"][ - "nia-evidence" + "nia_evidence" ], "sro": self.runtime["compose.coolify.social-development.yaml"]["services"][ - "sro-evidence" + "sro_evidence" ], "mosd": self.runtime["compose.coolify.social-development.yaml"]["services"][ - "mosd-programme-evidence" + "mosd_programme_evidence" ], "sipf": self.runtime["compose.coolify.labour-pensions.yaml"]["services"][ - "sipf-evidence" + "sipf_evidence" ], "nagdi": self.runtime["compose.coolify.agriculture.yaml"]["services"][ - "nagdi-evidence" + "nagdi_evidence" ], } for authority, runtime in runtime_services.items(): @@ -549,7 +549,7 @@ def test_relay_runtime_secrets_are_authority_scoped(self) -> None: for compose in self.runtime.values(): services.update(compose["services"]) for authority in RELAYS: - environment = services[f"{authority}-relay"]["environment"] + environment = services[f"{authority}_relay"]["environment"] expected = { "SOLMARA_RELAY_AUDIT_KEY": f"${{{authority.upper()}_RELAY_AUDIT_KEY:?required}}" } @@ -569,9 +569,9 @@ def test_runtime_consumers_depend_on_app_local_audit_init(self) -> None: if name in { "audit-permissions", "mint-readiness", - "static-metadata", - "scenario-runner", - "child-benefit-federator", + "static_metadata", + "scenario_runner", + "child_benefit_federator", "home", "portal", }: @@ -594,7 +594,7 @@ def test_core_deployment_waits_for_private_mint_health(self) -> None: self.assertNotIn("secrets", readiness) self.assertIn("172.29.1.20:8081/health", readiness["command"][0]) self.assertEqual( - core["scenario-runner"]["depends_on"], + core["scenario_runner"]["depends_on"], {"mint-readiness": {"condition": "service_completed_successfully"}}, ) diff --git a/scripts/test_runtime_topology.py b/scripts/test_runtime_topology.py index 791a3dd..f322087 100644 --- a/scripts/test_runtime_topology.py +++ b/scripts/test_runtime_topology.py @@ -655,7 +655,7 @@ def test_hosted_relays_keep_runtime_and_source_read_only(self) -> None: services.update(compose["services"]) for authority in ("cra", "nia", "mosd", "sipf", "nagdi"): - service = services[f"{authority}-relay"] + service = services[f"{authority}_relay"] self.assertEqual( service["command"], ["serve", "--runtime", f"/etc/relay/{authority}/runtime.yaml"], @@ -688,7 +688,7 @@ def test_hosted_programme_services_receive_only_their_application_secrets( compose["secrets"][secret_name], {"environment": "SOLMARA_DEMO_CLIENT_PRIVATE_JWK"}, ) - for service_name in ("scenario-runner", "child-benefit-federator", "portal"): + for service_name in ("scenario_runner", "child_benefit_federator", "portal"): service = services[service_name] self.assertEqual( service["secrets"], @@ -712,7 +712,7 @@ def test_hosted_programme_services_receive_only_their_application_secrets( ) self.assertEqual( - services["scenario-runner"]["environment"]["CHILD_BENEFIT_FEDERATOR_URL"], + services["scenario_runner"]["environment"]["CHILD_BENEFIT_FEDERATOR_URL"], "${SOLMARA_CHILD_BENEFIT_FEDERATOR_PUBLIC_BASE_URL:-https://child-benefit.solmara.registrystack.org}", ) self.assertEqual( @@ -720,19 +720,19 @@ def test_hosted_programme_services_receive_only_their_application_secrets( "${SOLMARA_CHILD_BENEFIT_FEDERATOR_PUBLIC_BASE_URL:-https://child-benefit.solmara.registrystack.org}", ) self.assertEqual( - services["child-benefit-federator"]["environment"][ + services["child_benefit_federator"]["environment"][ "CHILD_BENEFIT_FEDERATOR_HOST" ], "0.0.0.0", ) self.assertEqual( - services["child-benefit-federator"]["environment"][ + services["child_benefit_federator"]["environment"][ "CHILD_BENEFIT_FEDERATOR_PORT" ], "8080", ) - for service_name in ("home", "static-metadata"): + for service_name in ("home", "static_metadata"): service = services[service_name] self.assertNotIn("secrets", service, service_name) environment = service.get("environment", {})