使用 yq 更新 yaml 数组

Ray*_*n D 2 yaml yq

我有以下 yaml,我想替换命令字段

apiVersion: batch/v1
kind: Job
metadata:
  name: test004
spec:
  template:
    spec:
      containers:
        - name: "eee"
          image: "test"
          command: ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

apiVersion: batch/v1
kind: Job
metadata:
  name: test004
spec:
  template:
    spec:
      containers:
        - name: "eee"
          image: "test"
          command: ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)
yq  -i n --style  myfile.yaml 'spec.template.spec.containers[0].command' "["a", "b", "c","d"]"
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标yq,我尝试使用样式但没有成功,如果我将其更改为简单字符串,它可以工作,但当我想传递完整数组时则不行,知道吗?

Ini*_*ian 5

您可以使用字段[+]表示法在 yq v3 中附加字段。所以你的命令结果是

yq --style double w -i myfile.yaml 'spec.template.spec.containers[0].command[+]' "c"
Run Code Online (Sandbox Code Playgroud)

上面的命令将条目附加"c"到数组中。

或者,如果您想更新整个数组,command您可以在 v4 中执行。请注意,这会在单独的行中创建数组条目,而不是OP中显示的行。请参阅YAML 多行数组

yq e '.spec.template.spec.containers[0].command |= ["a", "b", "c","d"] | ..style="double"' yaml
Run Code Online (Sandbox Code Playgroud)

请注意,yq v4 已经存在并且支持更强大的路径表达式和操作。有关说明,请参阅从 v3 升级