fix(fm): onboard partner apps with capability kind workload

Every federated deploy failed at the receiving operator. When FM-B onboards a partner's app it creates a service specification at SRM-B, and it still asked for capability kind deploy_workload. SRM renamed that kind to workload (ADR-0056: a capability kind names a capability, not an operation, with no alias for the old name), so SRM-B answered 400 and FM-B returned 500 to the partner's OnboardApplication.

sequenceDiagram
    participant FA as FM-A
    participant FB as FM-B
    participant SB as SRM-B
    FA->>FB: POST /{ctx}/application/onboarding
    FB->>SB: POST /internal/catalog/service-specifications (capability_kind)
    Note over FB,SB: before: deploy_workload, 400, FM-A gets 500<br/>after: workload, 201
    FB-->>FA: 200

The change is the one value in inbound_onboarding.py and the test that pinned it. OEG already sends workload.

Found running the full Release 2 deploy on the two-operator docker harness with auth on (App Provider, OEG-A, SRM-A, command.fm.service.deploy, FM-A, EWBI, FM-B, SRM-B). With this fix every hop completes: OEG-A reports the instance ready and both FMs record install-app completed. Unit tests: 310 pass.

Not fixed here, and not FM's: SRM's deploy on refactor/tf-sdk-ports doesn't call TF-SDK yet, so nothing runs on the partner's cluster even though SRM-B reports the order completed. Raised with SRM.

Merge request reports

Loading
+1 −1
Changes for src/federation_manager/application/inbound_onboarding.py: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ class InboundOnboardingService:
                "service_capability_requirements": [
                    {
                        "ref": "require-workload-deployment",
                        "capability_kind": "deploy_workload",
                        "capability_kind": "workload",
                        "domain_kind": "compute",
                        "is_required": True,
                    }
+1 −1
Changes for tests/test_inbound_onboarding.py: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ def test_onboarding_creates_a_specification_the_partner_can_deploy() -> None:
    assert unit["artifact_ref"] == "nginx:1.27-alpine"
    assert unit["resource_requirements"]["compute"]["cpu_millicores"] == 500
    assert unit["resource_requirements"]["interfaces"][0]["port"] == 80
    assert spec["service_capability_requirements"][0]["capability_kind"] == "deploy_workload"
    assert spec["service_capability_requirements"][0]["capability_kind"] == "workload"
    stored = h.catalogue.resources[(h.partner.id, APPLICATION, f"{APP_ID}:1.0.0")]
    assert UUID(stored["service_specification_id"]) == UUID(spec["service_specification"]["id"])

Loading