You need to enable JavaScript to run this app.
导航

JsonPatch 覆写语法

最近更新时间2024.01.19 14:39:13

首次发布时间2023.12.13 19:07:12

jsonpatch是通用的覆写语法,适用于指定路径整体覆写字段的场景,资源覆盖面广但覆写颗粒度较粗。本文为您介绍jsonpatch覆写语法的整体语义和典型使用示例。

整体语义

覆写语法

jsonpatch覆写语法由 path、operator、value 三部分组成,整体语法介绍如下:

  • pathjsonpatch中的path表示目标覆写字段的路径。
  • operatorjsonpatch中的operator表示支持的操作,包括:add、remove、replace。
    • add: 向资源追加一个或多个元素。
    • remove: 从资源中删除一个或多个元素。
    • replace: 替换资源中的一个或多个元素。
  • valuejsonpatch中的value表示目标覆写字段的值。

覆写规则

operator 操作针对有存量字段、无存量字段、空值时的覆写规则如下:

说明

✔️表示允许操作、❌表示报错、- 表示不涉及,其余文字说明表示较复杂的行为。

operator有存量字段无存量字段新值允许为空
add整体替换✔️✔️
replace整体替换✔️✔️
remove整体删除-

使用限制

  • JsonPatch 覆写语法虽然覆盖面广,但只能整体替换、添加或删除 Yaml 中的字段,没法做到更细粒度的字段覆写。
  • 通过 JsonPatch 覆写语法中的remove整体删除字段时,若操作对象并无存量内容,将会报错。
  • JsonPatch 覆写语法中,路径中的 / 字符不需要转义,但实际修改字段中的 / 需要转义为 ~1。例如:/metadata/annotations/service.beta.kubernetes.io/volcengine-loadbalancer-name 转义后为 /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-name

典型示例

示例一:替换镜像地址

此差异化策略示例表示替换镜像地址,适用于容器镜像地址存放位置不同的场景。

apiVersion: core.kubeadmiral.io/v1alpha1
kind: OverridePolicy
metadata:
  name: dp-override
  namespace: default
spec:
  overrideRules:
    - targetClusters:
        #clusters:
          #- ClusterID-01 
        clusterSelector:
          cluster.dcp.volcengine.com/cluster-provider: Vke 
      overriders:
        jsonpatch:
          - path: "/spec/template/spec/containers/0/image"
            operator: replace
            value: "nginx:latest"  

示例二:添加注解配置

此差异化策略示例表示添加多个注解(annotation),适用于通过注解实现定制化需求的场景。

apiVersion: core.kubeadmiral.io/v1alpha1
kind: OverridePolicy
metadata:
  name: volc-service-override
  namespace: default
spec:
  overrideRules:
  - overriders:
      jsonpatch:
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-name
        value: test-svc 
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-subnet-id
        value: subnet-rrfc0aqw0yrkv0x58dutf68 
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-address-type
        value: PUBLIC
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-isp-type
        value: BGP
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-eip-billing-type
        value: "2"
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-bandwidth
        value: "25"
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-ip-version
        value: ipv4
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-spec
        value: small_1

示例三:删除注解配置

此差异化策略示例表示将/data/example目录下的字段删除,适用于字段存在多余的场景。

apiVersion: core.kubeadmiral.io/v1alpha1
kind: OverridePolicy
metadata:
  name: service-override
  namespace: default
spec:
  overrideRules:
  - overriders:
      jsonpatch:
      - operator: remove
        path: /data/example