Uploaded image for project: 'Service Binding'
  1. Service Binding
  2. APPSVC-1340

Service Classes: Create or Update

XMLWordPrintable

    • Icon: Story Story
    • Resolution: Done
    • Icon: Major Major
    • Primaza 0.1
    • None
    • Service Binding
    • None
    • 2
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Feature: Create or Update Service Class

      Background:
      Given Primaza Cluster "main" is running
      And Worker Cluster "worker" for ClusterEnvironment "worker" is running
      And Clusters "main" and "worker" can communicate
      And On Primaza Cluster "main", Worker "worker"'s ClusterContext secret "primaza-kw" for ClusterEnvironment "worker" is published
      And On Worker Cluster "worker", service namespace "services" for ClusterEnvironment "worker" exists
      And On Primaza Cluster "main", Resource is created
      """
      apiVersion: primaza.io/v1alpha1
      kind: ClusterEnvironment
      metadata:
      name: worker
      namespace: primaza-system
      spec:
      environmentName: dev
      clusterContextSecret: primaza-kw
      serviceNamespaces:

      • "services"
        """
        And On Worker Cluster "worker", Primaza Service Agent exists into namespace "services"
        And On Primaza Cluster "main", Resource is created
        """
        apiVersion: primaza.io/v1alpha1
        kind: ServiceClass
        metadata:
        name: demo-service-sc
        namespace: primaza-system
        spec:
        constraints:
        environments:
      • dev
        resource:
        apiVersion: stable.example.com/v1
        kind: Backend
        serviceEndpointDefinitionMapping:
      • name: host
        jsonPath: .spec.host
        serviceClassIdentity:
      • name: type
        value: backend
      • name: provider
        value: stable.example.com
      • name: version
        value: v1
        """
        And On Worker Cluster "worker", Resource "ServiceClass" with name "demo-service-sc" exists in namespace "services"
        And jsonpath ".spec.resource.serviceClassIdentity[0].value" on "serviceclasses.primaza.io/demo-service-sc:services" in cluster "worker" is "backend"

      Scenario: On Service Class update, Primaza control plane forwards it into all matching services namespace
      When On Primaza Cluster "main", Resource is updated
      """
      apiVersion: primaza.io/v1alpha1
      kind: ServiceClass
      metadata:
      name: demo-service-sc
      namespace: primaza-system
      spec:
      constraints:
      environments:

      • dev
        resource:
        apiVersion: stable.example.com/v1
        kind: Backend
        serviceEndpointDefinitionMapping:
      • name: host
        jsonPath: .spec.host
        serviceClassIdentity:
      • name: type
        value: backend-update
      • name: provider
        value: stable.example.com
      • name: version
        value: v1
        """
        Then jsonpath ".spec.resource.serviceClassIdentity[0].value" on "serviceclasses.primaza.io/demo-service-sc:services" in cluster "worker" is "backend-update"
      Show
      Feature: Create or Update Service Class Background: Given Primaza Cluster "main" is running And Worker Cluster "worker" for ClusterEnvironment "worker" is running And Clusters "main" and "worker" can communicate And On Primaza Cluster "main", Worker "worker"'s ClusterContext secret "primaza-kw" for ClusterEnvironment "worker" is published And On Worker Cluster "worker", service namespace "services" for ClusterEnvironment "worker" exists And On Primaza Cluster "main", Resource is created """ apiVersion: primaza.io/v1alpha1 kind: ClusterEnvironment metadata: name: worker namespace: primaza-system spec: environmentName: dev clusterContextSecret: primaza-kw serviceNamespaces: "services" """ And On Worker Cluster "worker", Primaza Service Agent exists into namespace "services" And On Primaza Cluster "main", Resource is created """ apiVersion: primaza.io/v1alpha1 kind: ServiceClass metadata: name: demo-service-sc namespace: primaza-system spec: constraints: environments: dev resource: apiVersion: stable.example.com/v1 kind: Backend serviceEndpointDefinitionMapping: name: host jsonPath: .spec.host serviceClassIdentity: name: type value: backend name: provider value: stable.example.com name: version value: v1 """ And On Worker Cluster "worker", Resource "ServiceClass" with name "demo-service-sc" exists in namespace "services" And jsonpath ".spec.resource.serviceClassIdentity [0] .value" on "serviceclasses.primaza.io/demo-service-sc:services" in cluster "worker" is "backend" Scenario: On Service Class update, Primaza control plane forwards it into all matching services namespace When On Primaza Cluster "main", Resource is updated """ apiVersion: primaza.io/v1alpha1 kind: ServiceClass metadata: name: demo-service-sc namespace: primaza-system spec: constraints: environments: dev resource: apiVersion: stable.example.com/v1 kind: Backend serviceEndpointDefinitionMapping: name: host jsonPath: .spec.host serviceClassIdentity: name: type value: backend-update name: provider value: stable.example.com name: version value: v1 """ Then jsonpath ".spec.resource.serviceClassIdentity [0] .value" on "serviceclasses.primaza.io/demo-service-sc:services" in cluster "worker" is "backend-update"
    • AppSvc Sprint 236

      Owner: Architect:

      Francesco Ilario

      Story (Required)

      As a Primaza Developer,
      I would like Primaza to use CreateOrUpdate on Service Classes
      so that Service Classes can be updated in service namespaces

      Background (Required)

      As of now, Primaza is just creating the Service Class in service namespaces.
      That means that if a Service Class is updated in Primaza's Control Plane, it won't be updated in service namespaces.

      We want to fill this gap, by implementing the update flow.

      Discussion for PR 131 may be of interest.

      See epic for arch document link.

      Glossary

      See glossary in architecture document

      Out of scope

      NA

      In Scope

      • update service class

      Approach(Required)

      We can leverage on controllerutil.CreateOrUpdate in pkg/primaza/controlplane/serviceclasses.go to easily implement this logic.

      Demo requirements(Required)

      NA

      Dependencies

      NA

      Edge Case

      NA

      BDD Tests

      You can find BDD Test specification for this story in the "Testing Instruction" Field Tab or in the GitHub Issue linked to this story.
      Click here for all BDD Tests Issues.

      Acceptance Criteria

      • Development
        ServiceClass controller updates Service Classes in service namespaces
      • QE
        There are test cases for Service Classes update
      • Docs
        There is a page in our docs dedicated to explaining Service Classes update
        Update architecture document with any changes while implementing

      INVEST Checklist

      Dependencies identified
      Blockers noted and expected delivery timelines set
      Design is implementable
      Acceptance criteria agreed upon
      Story estimated

      Legend

      Unknown
      Verified
      Unsatisfied

              ansadler@redhat.com Andy Sadler
              rh-ee-filario Francesco Ilario
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: