以编程方式应用多资源Kubernetes YAML文件中的单个资源

以编程方式应用多资源Kubernetes YAML文件中的单个资源,kubernetes,yaml,kubectl,yq,Kubernetes,Yaml,Kubectl,Yq,我有一个包含三个配置映射的文件,如下所示 apiVersion:v1 数据: 测试:“一” 种类:配置地图 元数据: 名称:测试配置一 --- 版本:v1 数据: 测试:“两个” 种类:配置地图 元数据: 名称:测试配置二 --- 版本:v1 数据: 测试:“三” 种类:配置地图 元数据: 名称:测试配置三 我试图仅将test-config-three应用于集群。我知道我可以将其分解成自己的文件并运行kubectl apply-f test config three.yaml,但是有没有一种方

我有一个包含三个配置映射的文件,如下所示

apiVersion:v1 数据: 测试:“一” 种类:配置地图 元数据: 名称:测试配置一 --- 版本:v1 数据: 测试:“两个” 种类:配置地图 元数据: 名称:测试配置二 --- 版本:v1 数据: 测试:“三” 种类:配置地图 元数据: 名称:测试配置三 我试图仅将
test-config-three
应用于集群。我知道我可以将其分解成自己的文件并运行
kubectl apply-f test config three.yaml
,但是有没有一种方法可以做到这一点而不必创建新文件

我希望能够做一些事情,比如:

cat file.yml | yq | kubectl apply-f-
但是
yq
似乎不支持在文件中查找单个资源。我还研究了一些工具,如,但它们倾向于将所有资源输出到单独的文件中

有没有一种方法可以在不创建新文件的情况下从包含多个资源的yaml文件中隔离和输出单个资源

更新

多亏@Inian在下面的回答,我才能够让这个完整的命令生效

cat file.yml | yq e'选择(.data.TEST==“三”)-| kubectl应用-f-

如果您有python,您可以尝试以下操作

export MYFILE=file.yml
export DOC_NUMBER=2

python3 -c "import yaml; print(yaml.dump(list(yaml.safe_load_all(open('"$MYFILE"')))["$DOC_NUMBER"]))" | kubectl apply -f -
yaml.safe\u load\u all(打开(“$MYFILE”)
将yaml文件中的所有文档加载到列表中。然后,您将使用
[“$DOC\u NUMBER”]
选择“$DOC\u NUMBER”文档


yaml.dump
将加载的对象转储回yaml格式,然后打印出来。

实现了两个版本的
yq
,一个是Python版本,另一个是Go版本,正如我在

使用Python版本-kislyuk/yq

yq-y'选择(.data.TEST==“三”)'yaml
Go版本-mikefarah/yq

yq e'选择(.data.TEST==“三”)'yaml

您使用的是哪个版本的
yq
?Python还是Go版本?发布
yq--version
的输出,谢谢。我用的是围棋版。