shell 如何通过bash脚本将对象添加到yaml中

ruarlubt  于 2023-04-07  发布在  Shell
关注(0)|答案(2)|浏览(222)

我有大约200个值。yaml文件在多个目录,我需要纠正,如果它是必需的。循环找到文件是一个不是问题,但如何编辑/更新文件没有yq使用bash脚本。
所以bash脚本需要检查values.yaml文件是否包含数组:containers如果有,请添加object imageprefix:“”在imagename下面。但是有时候容器节中的值.yaml已经添加了这样的对象,必须跳过它,并且不重复。
我的yaml文件看起来像

service:
  path: /
  ports:
    - port: 6055

containers:
  container1:
    name: service
    org: "company:"
    imagename: thirdparty-service
    tagprefix: "-"

volumes:
- name: pod-logs
  emptyDir: {}

envMap:
  env:
    N_PERROUTE: 20
    NUM_STREAM_THREADS_CONFIG: 10
    NUM_STREAM_T

输出

service:
  path: /
  ports:
    - port: 6055

containers:
  container1:
    name: service
    org: "company:"
    imagename: thirdparty-service
    imageprefix: ""
    tagprefix: "-"
      periodSeconds: 30

volumes:
- name: pod-logs
  emptyDir: {}

envMap:
  env:
    N_PERROUTE: 20
    NUM_STREAM_THREADS_CONFIG: 10
    NUM_STREAM_T
ktecyv1j

ktecyv1j1#

你可以用awk来做:

script.awk

/tagprefix: "-"/ {
    printf "%s\n      periodSeconds: 30\n", $0
    next
}
/imagename: thirdparty-service/ {
    printf "%s\n    imageprefix: \"\"\n", $0
    next
}
{ print }
  • 假设输入存储在文件input.yml中
  • 这样使用它:awk -f script.awk input.yml
  • 正如在评论中提到的那样,在python这样的语言中使用专用的yaml库更加灵活。
  • 这个解决方案是超级具体到您的yaml格式。
  • 例如,如果你有两次tagprefix: "-"行,它将添加两次periodSeconds行。这个解决方案不验证yaml层次结构。
  • 但它对你要求的特定目的有效。
jq6vz3qz

jq6vz3qz2#

Bash + sed:

if grep -q '^containers:' input.yml
then
sed -i '/imagename:/a \ \ \ \ imageprefix: ""' input.yml
fi

相关问题