Apply application

The apply-application workflow step modifies the way in which the application is deployed in Kubernetes. The default approach is to deploy each component of the application sequentially, which is reflected on its status as:

Workflow status for a standard deployment
workflow:
    appRevision: apply-application-v1:3c04ce51c92daa8b
    contextBackend:
      ...
    finished: false
    message: executing
    mode: DAG
    ...
    steps:
    - firstExecuteTime: "<date_time>"
      id: s4b7uh6xsc
      lastExecuteTime: "<date_time>"
      name: component1
      phase: succeeded
      type: apply-component
    - firstExecuteTime: "<date_time>"
      id: hxgypfnk99
      lastExecuteTime: "<date_time>"
      message: wait healthy
      name: component2
      phase: running
      reason: Wait
      type: apply-component
    suspend: false
    terminated: false

With this trait, the system decides the best way to deploy the application and produces a single step in the workflow status:

Workflow status for an application using apply-application
  workflow:
    appRevision: apply-application-v1:58d9daa92f971d4c
    contextBackend:
      ...
    finished: false
    message: executing
    mode: StepByStep
    ...
    steps:
    - firstExecuteTime: "<date_time>"
      id: kjxg67og9w
      lastExecuteTime: "<date_time>"
      message: wait healthy
      name: apply-app
      phase: running
      reason: Wait
      type: apply-application
    suspend: false
    terminated: false

The following snippet shows an application that makes use of the apply-application workflow step to modify its deployment approach:

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: my-app
  annotations: 
    version: "v0.0.1"
    description: "My apply-application application"
spec:
  components:
    - name: component1
      type: worker
      properties:
        image: my-app-image:v1.0.0
        cmd: ["cmd"]     
        cpu: "0.25"
        memory: "200Mi"
    - name: component2
      type: worker
      properties:
        image: my-app-image:v1.0.0
        cmd: ["cmd"]     
        cpu: "0.25"
        memory: "200Mi"
      traits:
        - type: scaler
          properties:
            replicas: 1
  workflow:
    steps:
    - name: apply-app
      # Apply all the traits and the components in an application
      type: apply-application # Set to apply-application 
      # No arguments required