патч oc / kubectl заменяет всю строку - PullRequest
0 голосов
/ 13 февраля 2020

Я использую патч o c с op для замены одной строки в развертывании, следующая команда: -

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 Ответ

1 голос
/ 13 февраля 2020

Операция ' replace ' работает как удаление / добавление всего значения:

Эта операция функционально идентична операции удаления для значения, за которой сразу следует операция Операция «add» в том же месте со значением замены.

Нет такой операции JSON исправления как частичное значение замены ( RFC6902 , RFC7386 )

Вы можете получить изображение как:

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

Затем манипулируйте значением с помощью sed и используйте его в 'o c patch'

...