如何在yq版本4中添加列表项

Bry*_*yon 4 yq

我正在将脚本从 yq 3 迁移到 yq 4,但无法让一件事正常工作。

我有以下 YAML,并想在 targetNamespaces 之后添加一个列表项:

apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: businessautomation-operator
  namespace: rhpam-user1
spec:
  targetNamespaces:
Run Code Online (Sandbox Code Playgroud)

所以输出应该是:

apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: businessautomation-operator
  namespace: rhpam-user1
spec:
  targetNamespaces:
  - rhpam-user1
Run Code Online (Sandbox Code Playgroud)

此命令用于更改名称空间:

yq eval '.metadata.namespace = "rhpam-user1"' -i ./file.yaml
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时,我收到错误:

yq eval '.spec.targetNamespaces[+] = "rhpam-user1"'  -i ./file.yaml 

Error: '' expects 2 args but there is 1
Run Code Online (Sandbox Code Playgroud)

我似乎无法正确理解新的 yq 命令结构......

Ini*_*ian 5

如果targetNamespaces要用作数组类型,则需要将目标字符串括在 中[..]+=如下所示(在版本 4.11.2 上测试)

yq '.spec.targetNamespaces += [ "rhpam-user1" ]' ./file.yaml 
Run Code Online (Sandbox Code Playgroud)

如果输出按预期显示,请使用该-i标志来就地替换文件。

请参阅mikefarah/yq - 相对追加


注意:从4.18.1开始,yq 的eval/e命令是默认命令,不再需要指定。