如何在yq v4中实现两个YAML文件的Pod容器配置合并追加?
yq v4 实现Pod容器追加注入
需求说明
要将fileA.yaml中定义的代理容器,追加到fileB.yaml的Pod容器列表中,最终得到包含两个容器的Pod配置。旧版yq可用yq m -a append fileA.yaml fileB.yaml实现,但yq v4语法有变化,需用新写法。
配置文件示例
fileA.yaml(待注入的容器配置)
apiVersion: v1 kind: Pod metadata: name: envoy-pod spec: containers: - name: proxy-container image: envoyproxy/envoy:v1.12.2 ports: - containerPort: 80
fileB.yaml(目标Pod配置)
apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: k8s.gcr.io/busybox env: - name: DB_URL value: postgres://db_url:5432
yq v4 实现命令
使用yq v4的数组追加语法,执行以下命令即可完成容器注入:
yq eval '.spec.containers += load("fileA.yaml").spec.containers' fileB.yaml
如果需要直接修改原文件(原地编辑),添加-i参数:
yq eval -i '.spec.containers += load("fileA.yaml").spec.containers' fileB.yaml
执行结果
执行后会生成期望的Pod配置:
apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: k8s.gcr.io/busybox env: - name: DB_URL value: postgres://db_url:5432 - name: proxy-container image: envoyproxy/envoy:v1.12.2 ports: - containerPort: 80
命令解释
.spec.containers:定位到目标Pod的容器列表节点+=:yq v4中用于数组追加的运算符load("fileA.yaml").spec.containers:加载fileA.yaml并提取其中的容器列表内容
内容的提问来源于stack exchange,提问作者lankan
相关产品推荐
相关产品推荐

