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", {})