oc / kubectl补丁替换了整行

时间:2020-02-13 11:06:27

标签: docker openshift kubectl

我正在使用带op的oc补丁替换部署中的一个字符串,以下是命令:-

oc patch dc abc --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value": "ab-repository/" },{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value": "bc-repository/" }]'

它正在做什么,它在下面进行了更改:-

Before:- ab-repository/ab:1.0.0
After:- bc-repository/

这是我想要的:-

Before:- ab-repository/ab:1.0.0
After:- bc-repository/ab:1.0.0

请让我知道我在这里做错了。

以下是YAML

apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
  name: ruleengine
  namespace: apps
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    name: ruleengine
  strategy:
    activeDeadlineSeconds: 21600
    resources: {}
    rollingParams:
      intervalSeconds: 1
      updatePeriodSeconds: 1
    type: Rolling
  template:
    metadata:
      creationTimestamp: null
      labels:
        name: ruleengine
    spec:
      containers:
      - image: ab-repository/ab:1.0.0 ### containers should be provided in the form of an array

1 个答案:

答案 0 :(得分:1)

'replace'操作的作用类似于删除/添加整个值:

此操作在功能上与“删除”操作相同 值,然后立即在同一位置执行“添加”操作 具有替换值的位置。

没有这样的JSON修补程序操作,例如部分替换值(RFC6902RFC7386

您可以得到如下图像:

oc get dc ruleengine -o=jsonpath='{..image}'

然后使用sed操纵值并在“ oc patch”中使用它