【发布时间】:2021-01-08 20:41:32
【问题描述】:
我正在寻找一种方法来合并来自两个独立 YAML 的数组(将一个附加到另一个)。但是,YAML 有一个用 {} 包裹的字段(不在数组中),可以用运行时值替换。即
# yaml a
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
namespace: default
name: {clusterRoleName}
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
# yaml b
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
namespace: default
name: {clusterRoleName}
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "watch", "list"]
# desired
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
namespace: default
name: {clusterRoleName}
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "watch", "list"]
为此,我使用的是 yq 版本 2.14。我试过yq merge -a=append a.yaml b.yaml,它可以根据需要处理规则数组,但将name: {clusterRoleName} 视为JSON 并输出:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: {ClusterRoleName: ''}
...
有没有办法只合并一个字段,或者忽略特定的键或值类型?如果有人能够建议另一种方法,我也不会为此使用 yq。
【问题讨论】:
-
你能升级到最近的版本吗? v4 中有很多新功能
-
升级可能是一种选择,尽管这种特定用途是大型项目的一部分,因此理想的解决方案是找到适用于现有版本的解决方案。如果在 v4 中有一个干净的方式,虽然会感兴趣 - 会检查一下谢谢:)