【发布时间】:2021-04-30 06:47:51
【问题描述】:
我有一个包含三个配置映射的文件,如下所示。
apiVersion: v1
data:
TEST: "one"
kind: ConfigMap
metadata:
name: test-config-one
---
apiVersion: v1
data:
TEST: "two"
kind: ConfigMap
metadata:
name: test-config-two
---
apiVersion: v1
data:
TEST: "three"
kind: ConfigMap
metadata:
name: test-config-three
我正在尝试仅将 test-config-three 应用于集群。我知道我可以将其拆分为自己的文件并运行 kubectl apply -f test-config-three.yaml,但有没有办法做到这一点而无需创建新文件?
我希望能够做类似的事情:
cat file.yml | yq <get only test-config-three> | kubectl apply -f -
但yq 似乎不支持在文件中查找单个资源。我还查看了kubesplit 之类的工具,但它们倾向于将所有资源输出到单独的文件中。
有没有办法在不创建新文件的情况下从包含多个资源的 yaml 文件中隔离和输出单个资源?
更新
感谢@Inian 在下面的回答,我能够让这个完整的命令正常工作。
cat file.yml | yq e 'select(.data.TEST == "three")' - | kubectl apply -f -
【问题讨论】:
-
您使用的是哪个版本的
yq? Python 还是 Go 版本?发布yq --version的输出 -
我不敢相信有人有一个和我完全一样的用例。这帮助了我!非常感谢 OP 和 @Inian
标签: kubernetes yaml kubectl yq