The json-merge-patch trait permits to patch the rendered component to modify its structure, and or parameters. Notice that this trait will work for webservice, and worker component definitions. This trait is useful to patch options not yet supported by the components, but its usage is generally discourage for maintainability reason. The same behavior can be obtained with a combination of traits such as annotations, labels, or sidecar.
The following snippets shows an example application that uses a json-merge-patch trait to modify the resulting labels (
label2), adding a new container
apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: json-patch-app annotations: version: "v0.0.1" description: "My json-patch application" spec: components: - name: json-patch-component type: webservice properties: image: my-app-image:v1.0.0 cmd: ["server", "run"] cpu: "0.25" memory: "200Mi" labels: label1: value1 label2: value2 traits: - type: json-merge-patch # Set to json-merge-patch properties: # EXAMPLES spec: # replace replicas replicas: 2 template: metadata: labels: # Update pod label label1: updated # Remove pod label label2: null spec: containers: # Add a new container - name: container-updated image: busybox:1.34 command: ["sleep", "864000"] resources: requests: cpu: 200m memory: 100Mi