使用yq使用artifacthub更新yaml文件.io注释



我有一个bash脚本,它正在用artifacthub更新一个helm yaml文件。io注释。然而,我的脚本使用的变量,我认为,需要命令使用双引号而不是单引号。同样,artifacthub.io会导致工件和io分离的问题。更新"changes"one_answers"images"注释,可以使用哪条yq命令?我也试过使用sed,但无济于事。

annotations:
artifacthub.io/changes: |
- Fixed linting issues.
artifacthub.io/images: |
- name: transmission
image: ghcr.io/linuxserver/transmission:3.00-r0-ls75

我尝试了下面的方法,但是没有成功。

image=foo
yq e ".annotations."artifacthub.io/images"="${image}"" -i "${chart_file_path}"

为了使yq查询尽可能具有可读性,我尽量避免转义双引号。通过在yq查询周围使用单引号,不需要转义双引号。此外,单引号可以关闭并重新打开,以将bash变量连接到查询。

对于带有特殊字符的键,需要将它们括在双引号中括号和:.annotations.["artifacthub.io/images"]

给定文件:

# file.yml
annotations:
artifacthub.io/changes: |
- Fixed linting issues.
artifacthub.io/images: |
- name: transmission
image: ghcr.io/linuxserver/transmission:3.00-r0-ls75

执行此脚本:

image="foo"
yq eval '.annotations.["artifacthub.io/images"] = "'${image}'"' file.yml
#       |              |                     |    ||        |||
#       |              |                     |    ||        ||└> (a.1) close yq query
#       |              |                     |    ||        |└> (c) end string value
#       |              |                     |    ||        └> (a.2) open yq query (end concatenation)
#       |              |                     |    |└> (a.2) close yq query (start concatenation)
#       |              |                     |    └> (c) start string value
#       |              |                     └> (b) end key w/ special chars
#       |              └> (b) start key w/ special chars
#       └> (a.1) open yq query

生成以下输出:

annotations:
artifacthub.io/changes: |
- Fixed linting issues.
artifacthub.io/images: |-
foo

最新更新