kubernetes - 以编程方式应用多资源 Kubernetes YAML 文件中的单个资源
问题描述
我有一个包含三个配置映射的文件,如下所示。
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 中,正如我在如何从 Linux shell 脚本中解析 YAML 文件?
使用 Python 版本 - kislyuk/yq
yq -y 'select(.data.TEST == "three")' yaml
Go 版本 - mikefarah/yq
yq e 'select(.data.TEST == "three")' yaml
推荐阅读
- java - @Autowire 添加 Spring AOP 后返回 null
- python - Python Panda.read_csv 轮得到导入错误?
- android-studio - 无法解决 Intel x86 Atom 系统映像的依赖关系
- java - 我正在尝试检查某些坐标是否相同,但它失败了,我不知道为什么
- amazon-web-services - 在 $connect 路由中使用 apigwManagementApi.postToConnection 失败
- python - 字段删除时出现 IntegrityError 的原因?
- bash - 对话框实用程序中单选列表项的不同键盘快捷键
- ruby - 如何为每个响应设置“最大等待时间”,如果没有响应则进入下一步
- asp.net - 如何使用 AddHandler AddressOf
- arrays - Mongodb 多键索引无法正常工作