Inline Patch

A kustomization file supports patching in three ways:

  • patchesStrategicMerge: A list of patch files where each file is parsed as a Strategic Merge Patch.
  • patchesJSON6902: A list of patches and associated targetes, where each file is parsed as a JSON Patch and can only be applied to one target resource.
  • patches: A list of patches and their associated targets. The patch can be applied to multiple objects. It auto detects whether the patch is a Strategic Merge Patch or JSON Patch.

Since 3.2.0, all three support inline patch, where the patch content is put inside the kustomization file as a single string. With this feature, no separate patch files need to be created.

Make a base kustomization containing a Deployment resource.

Define a place to work:

DEMO_HOME = $(mktemp -d) 

/base

Define a common base:

$ cd $DEMO_HOME $ mkdir base $ cd base 

Create a Sample Pod File and Kustomize file in base

$ vim kustomization.yaml 
# kustomization.yaml contents resources: - deployments.yaml 
# deployments.yaml contents apiVersion: apps/v1 kind: Deployment metadata:  name: deploy spec:  template:  metadata:  labels:  foo: bar  spec:  containers:  - name: nginx  image: nginx  args:  - arg1  - arg2 

PatchesStrategicMerge

patch

Create an overlay and add an inline patch in patchesStrategicMerge field to the kustomization file to change the image from nginx to nginx:latest.

$ cd $DEMO_HOME $ mkdir smp_patch $ cd smp_patch 

Create a Kustomize file in smp_patch

# kustomization.yaml contents resources: - ../base  patchesStrategicMerge: - |-  apiVersion: apps/v1  kind: Deployment  metadata:  name: deploy  spec:  template:  spec:  containers:  - name: nginx  image: nginx:latest 

Running kustomize build, in the output confirm that image is updated successfully.

apiVersion: apps/v1 kind: Deployment metadata:  name: deploy spec:  template:  metadata:  labels:  foo: bar  spec:  containers:  - args:  - arg1  - arg2  image: nginx:latest  name: nginx 

$patch: delete and $patch: replace also work in the inline patch. Change the inline patch to delete the container nginx.

patch: delete

$ cd $DEMO_HOME $ mkdir smp_delete $ cd smp_delete 

Create a Kustomize file in smp_delete

# kustomization.yaml contents resources: - ../base  patchesStrategicMerge: - |-  apiVersion: apps/v1  kind: Deployment  metadata:  name: deploy  spec:  template:  spec:  containers:  - name: nginx  $patch: delete 

Running kustomize build, in the output confirm that image is updated successfully.

apiVersion: apps/v1 kind: Deployment metadata:  name: deploy spec:  template:  metadata:  labels:  foo: bar  spec:  containers: [] 

patch: replace

$ cd $DEMO_HOME $ mkdir smp_replace $ cd smp_replace 

Create a Kustomize file in smp_replace

# kustomization.yaml contents resources: - ../base  patchesStrategicMerge: - |-  apiVersion: apps/v1  kind: Deployment  metadata:  name: deploy  spec:  template:  spec:  containers:  - name: nginx  image: nginx:1.7.9  $patch: replace 

Running kustomize build, in the output confirm that image is updated successfully. Since we are replacing notice that the arguments set in the base file are gone.

apiVersion: apps/v1 kind: Deployment metadata:  name: deploy spec:  template:  metadata:  labels:  foo: bar  spec:  containers:  - image: nginx:1.7.9  name: nginx 

PatchesJson6902

Create an overlay and add an inline patch in patchesJSON6902 field to the kustomization file to change the image from nginx to nginx:latest.

$ cd $DEMO_HOME $ mkdir json $ cd json 

Create a Kustomize file in json

# kustomization.yaml contents resources: - ../base  patchesJSON6902: - target:  group: apps  version: v1  kind: Deployment  name: deploy  patch: |-  - op: replace  path: /spec/template/spec/containers/0/image  value: nginx:latest 

Running kustomize build, in the output confirm that image is updated successfully.

apiVersion: apps/v1 kind: Deployment metadata:  name: deploy spec:  template:  metadata:  labels:  foo: bar  spec:  containers:  - args:  - arg1  - arg2  image: nginx:latest  name: nginx 

Patches

Create an overlay and add an inline patch in patches field to the kustomization file to change the image from nginx to nginx:latest.

$ cd $DEMO_HOME $ mkdir patch $ cd patch 

Create a Kustomize file in patch

# kustomization.yaml contents resources: - ../base  patches: - target:  kind: Deployment  name: deploy  patch: |-  apiVersion: apps/v1  kind: Deployment  metadata:  name: deploy  spec:  template:  spec:  containers:  - name: nginx  image: nginx:latest 

Running kustomize build, in the output confirm that image is updated successfully.

apiVersion: apps/v1 kind: Deployment metadata:  name: deploy spec:  template:  metadata:  labels:  foo: bar  spec:  containers:  - args:  - arg1  - arg2  image: nginx:latest  name: nginx 

Last modified November 25, 2020: multibase and inline patch examples added (1bbf9d4)