我正在将脚本从 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 命令结构......
如果targetNamespaces要用作数组类型,则需要将目标字符串括在 中[..],+=如下所示(在版本 4.11.2 上测试)
yq '.spec.targetNamespaces += [ "rhpam-user1" ]' ./file.yaml
Run Code Online (Sandbox Code Playgroud)
如果输出按预期显示,请使用该-i标志来就地替换文件。
注意:从4.18.1开始,yq 的eval/e命令是默认命令,不再需要指定。