下面是我的testfile.yaml
:
---
kind: Pod
metadata:
name: amazing-application
---
kind: Deployment
metadata:
name: amazing-deployment
---
kind: Service
metadata:
name: amazing-deployment
---
kind: Service
metadata:
name: tea-service
我的目标是将其分成 4 个文件,其中文件名是 .metadata.name
,文件所在的目录是 .kind
。
我已经实现了我想要的:
for kind in $(yq e '.kind' testfile.yaml | awk '!/^(---)/' | uniq);
do
mkdir "$kind"
cd "$kind"
yq 'select(.kind == "'$kind'")' ../testfile.yaml | yq -s '.metadata.name'
cd ..;
done
我想知道的是如何获得唯一的组合映射,或者以某种方式使用多个标准来分割测试文件而不是通过循环。
有没有办法使用yq
和-s
或select
来选择kind和metadata.name在该个体中是唯一的文档(文档以“---”分隔)?
因为如果您执行 yq -s '.kind' testfile.yaml
,它将生成三个 yaml 文件,而不是四个。与 yq -s '.metadata.name' testfile.yaml 相同;我们得到三个文件,因为并非所有名称
都是唯一的 - 其中一个丢失了。
最佳答案
有几种方法可以直接在 yq 中执行此操作。
首先,您可以使用字符串与另一个属性连接来获得唯一的文件名:
yq -s '(.kind | downcase) + "_" + .metadata.name' testfile.yaml
这将创建如下文件:
deployment_amazing-deployment.yml
pod_amazing-application.yml
service_amazing-deployment.yml
service_tea-service.yml
或者您可以使用内置的 $index 来使文件名唯一:
yq -s '.metadata.name + "_" + $index'
这将创建:
amazing-application_0.yml
amazing-deployment_1.yml
amazing-deployment_2.yml
tea-service_3.yml
免责声明:我写了 yq
关于kubernetes - yq 分割种类和唯一名称 : -s is not keeping unique kind and metadata. 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75888239/