capact icon indicating copy to clipboard operation
capact copied to clipboard

Add an option to update backend for already existing TypeInstance

Open mszostok opened this issue 3 years ago • 1 comments

Description

Make the backend.id mutable. Currently, it's saved on the root of the TypeInstance (same as typeRef) and cannot be changed via GraphQL mutation. This should be change from immutable to become mutable.

We don't need to change mutation GraphQL syntax:

mutation CreateTypeInstances {
  createTypeInstances(
    in: {
     typeInstances: [
      {
        alias: "helm-release"
        typeRef: { path: "cap.type.helm.chart.release", revision: "0.1.0" }
        value: {
          key: "test" # same as it was
        }
        backend: {
          id: "123" # it's like that already.
          context: { # new property of type `Any!`
            name: "release-name",
            namespace: "release-namespace",
          }
        }
      }
    ]
  }
  ) {
    id
    alias
  }
}

but we need to change how it is handled by Local Hub and save it under TypeInstanceRevision.

Acceptance Criteria

  • Update Local Hub mutation to save backend under TypeInstanceRevision.
  • Change query syntax:
    query GetTypeInstance($typeInstanceID: ID!) {
      typeInstance(id: $typeInstanceID) {
        id
        typeRef {
          path
          revision
        }
        backend { # remove this backend entry
          id
          abstract
        }    
        lockedBy
        latestResourceVersion {
            resourceVersion
            createdBy
            metadata {
              attributes {
                path
                revision
              }
            }
            spec {
              value
            }
            backend {
              # id <- new fields
              # abstract <- new fields
              context { # new property of type `Any!`
                name
                namespace
              }
            }
        }
      }
    }
    
  • Update related documentation and examples.
  • Add integration test coverage that backend can be changed.

Related issues

See epic #604 for reason and use cases.

mszostok avatar Feb 15 '22 13:02 mszostok

If implemented we need to ensure that delegated storage backends will work properly, see discussion in: https://github.com/capactio/capact/pull/644#discussion_r814720864

mszostok avatar Feb 26 '22 08:02 mszostok