微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 yq 更新 yaml 数组

如何解决使用 yq 更新 yaml 数组

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

apiVersion: batch/v1
kind: Job
Metadata:
  name: test004
spec:
  template:
    spec:
      containers:
        - name: "eee"
          image: "test"
          command: ["a","b","c"]

想要

apiVersion: batch/v1
kind: Job
Metadata:
  name: test004
spec:
  template:
    spec:
      containers:
        - name: "eee"
          image: "test"
          command: ["a","c","d"]
yq  -i n --style  myfile.yaml 'spec.template.spec.containers[0].command' "["a","d"]"

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

解决方法

您可以将字段 [+] 表示法用于 append fields in yq v3。所以你的命令导致

yq --style double w -i myfile.yaml 'spec.template.spec.containers[0].command[+]' "c"

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

或者,如果您想更新整个数组 command,您可以在 v4 中进行。请注意,这会在与 OP 中显示的内容不同的行中创建数组条目。见YAML Multi-Line Arrays

yq e '.spec.template.spec.containers[0].command |= ["a","b","c","d"] | ..style="double"' yaml

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。