Files
kustomize/examples/jsonpatch.md
2018-09-07 11:55:12 -07:00

1.8 KiB

Demo: applying a json patch

A kustomization file supports customizing resources via JSON patches.

The example below modifies an Ingress object with such a patch.

Make a kustomization containing an ingress resource.

DEMO_HOME=$(mktemp -d)

cat <<EOF >$DEMO_HOME/kustomization.yaml
resources:
- ingress.yaml
EOF

cat <<EOF >$DEMO_HOME/ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: my-api
          servicePort: 80
EOF

Declare a JSON patch file to update two fields of the Ingress object:

  • change host from foo.bar.com to foo.bar.io
  • change servicePort from 80 to 8080
cat <<EOF >$DEMO_HOME/ingress_patch.json
[
  {"op": "replace", "path": "/spec/rules/0/host", "value": "foo.bar.io"},
  {"op": "replace", "path": "/spec/rules/0/http/paths/0/backend/servicePort", "value": 8080}
]
EOF

Apply the patch by adding patchesJson6902 field in kustomization.yaml

cat <<EOF >>$DEMO_HOME/kustomization.yaml
patchesJson6902:
- target:
    group: extensions
    version: v1beta1
    kind: Ingress
    name: my-ingress
  path: ingress_patch.json
EOF

Running kustomize build $DEMO_HOME, in the ourput confirm that host has been updated correctly.

test 1 == \
  $(kustomize build $DEMO_HOME | grep "host: foo.bar.io" | wc -l); \
  echo $?

Running kustomize build $DEMO_HOME, in the ourput confirm that the servicePort has been updated correctly.

test 1 == \
  $(kustomize build $DEMO_HOME | grep "servicePort: 8080" | wc -l); \
  echo $?