Generate Claim Manifest

Action ID: terasky:claim-template
NPM Package:

@terasky/backstage-plugin-scaffolder-backend-module-terasky-utils

Description

Templates a claim manifest based on input parameters

Input Schema

PropertyTypeDescriptionRequired
kindstring-
clustersarray-
nameParamstring-
apiVersionstring-
ownerParamstring-
parametersobject-
excludeParamsarray-
namespaceParamstring-
removeEmptyParamsboolean-

Output Schema

PropertyTypeDescriptionRequired
manifeststring-
filePathsarray-

Usage Examples

Generate a service claim for a single production cluster

Templates a claim manifest for a microservice deployed to one cluster. Excludes internal notes and removes empty values. Bootstraps a workspace with fetch:template and logs results with debug:log.

Copy
steps:
  - id: fetch-base
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .
      values:
        name: ${{ parameters.componentId }}
        description: "Service claim for ${{ parameters.componentId }}"

  - id: generate-claim
    action: terasky:claim-template
    input:
      parameters:
        serviceName: ${{ parameters.componentId }}
        kubeNamespace: ${{ parameters.namespace }}
        owner: ${{ parameters.owner }}
        tier: backend
        env: prod
        replicas: 3
        image: "ghcr.io/acme/orders:1.2.3"
        internalNotes: ${{ parameters.notes }}
      nameParam: serviceName
      namespaceParam: kubeNamespace
      excludeParams:
        - internalNotes
      apiVersion: platform.example.com/v1alpha1
      kind: ServiceClaim
      clusters:
        - prod-us-east-1
      removeEmptyParams: true
      ownerParam: owner

  - id: show-claim
    action: debug:log
    input:
      message: |
        Generated claim manifest:
        ${{ steps.generate-claim.output.manifest }}
        Files written:
        ${{ steps.generate-claim.output.filePaths }}

Multi cluster database claim keeping empty fields for defaults

Generates a database claim for dev and staging clusters. Keeps empty fields so downstream defaults can apply.

Copy
steps:
  - id: generate-db-claim
    action: terasky:claim-template
    input:
      parameters:
        dbName: ${{ parameters.database }}
        kubeNamespace: ${{ parameters.namespace }}
        owner: ${{ parameters.owner }}
        engine: postgres
        version: "15"
        storageGiB: ""
        backupRetentionDays: ""
      nameParam: dbName
      namespaceParam: kubeNamespace
      excludeParams: []
      apiVersion: database.acme.io/v1
      kind: DatabaseClaim
      clusters:
        - dev
        - staging
      removeEmptyParams: false
      ownerParam: owner

  - id: log
    action: debug:log
    input:
      message: |
        Database claim manifest:
        ${{ steps.generate-db-claim.output.manifest }}

Preview environment claim across selected clusters using dynamic naming

Creates a preview claim for pull request environments across user selected clusters. Excludes debug flags and removes empty values.

Copy
steps:
  - id: generate-preview-claim
    action: terasky:claim-template
    input:
      parameters:
        serviceName: "${{ parameters.appId }}-pr-${{ parameters.prNumber }}"
        kubeNamespace: "preview-${{ parameters.prNumber }}"
        owner: ${{ parameters.owner }}
        image: "ghcr.io/acme/${{ parameters.appId }}:${{ parameters.sha }}"
        prNumber: ${{ parameters.prNumber }}
        debugFlag: true
        featureToggles:
          - canary
      nameParam: serviceName
      namespaceParam: kubeNamespace
      excludeParams:
        - debugFlag
      apiVersion: platform.example.com/v1alpha1
      kind: PreviewAppClaim
      clusters: ${{ parameters.targetClusters }}
      removeEmptyParams: true
      ownerParam: owner

  - id: log-preview
    action: debug:log
    input:
      message: |
        Preview claim files:
        ${{ steps.generate-preview-claim.output.filePaths }}

Generate claim and publish to a GitHub repository

Bootstraps a repository with fetch:template, templates the claim, then publishes the workspace with publish:github.

Copy
steps:
  - id: prepare-repo
    action: fetch:template
    input:
      url: ./repo-skeleton
      targetPath: .
      values:
        name: ${{ parameters.componentId }}
        owner: ${{ parameters.owner }}

  - id: generate-claim
    action: terasky:claim-template
    input:
      parameters:
        claimName: ${{ parameters.componentId }}
        kubeNamespace: ${{ parameters.namespace }}
        owner: ${{ parameters.owner }}
        serviceLevel: gold
        region: us-west
        apiToken: ${{ parameters.apiToken }}
      nameParam: claimName
      namespaceParam: kubeNamespace
      excludeParams:
        - apiToken
      apiVersion: platform.acme.io/v1alpha1
      kind: ServiceClaim
      clusters:
        - prod-us-west-2
        - prod-us-east-1
      removeEmptyParams: true
      ownerParam: owner

  - id: publish
    action: publish:github
    input:
      repoUrl: ${{ parameters.repoUrl }} # e.g. github.com?owner=acme-platform&repo=orders-claim
      defaultBranch: main
      protect: true
      description: "Service claim for ${{ parameters.componentId }}"

Platform team claim with strict exclusion and multi region rollout

Creates a platform gateway claim rolled out to multiple production clusters. Excludes deprecated and note fields and removes empty values.

Copy
steps:
  - id: generate-platform-claim
    action: terasky:claim-template
    input:
      parameters:
        serviceName: platform-gateway
        kubeNamespace: platform
        owner: platform-team
        capacity: "large"
        escalationPolicy: "oncall-platform"
        secretsRef: ""
        notes: ""
        deprecatedFlag: false
      nameParam: serviceName
      namespaceParam: kubeNamespace
      excludeParams:
        - deprecatedFlag
        - notes
      apiVersion: platform.example.com/v1alpha1
      kind: GatewayClaim
      clusters:
        - prod-eu-central-1
        - prod-eu-west-1
        - prod-us-east-1
      removeEmptyParams: true
      ownerParam: owner

  - id: log-output
    action: debug:log
    input:
      message: |
        Gateway claim manifest saved to:
        ${{ steps.generate-platform-claim.output.filePaths }}