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