我有一个包含许多 Kubernetes YAML 对象的文件。 我正在寻找一种从文本文件中删除所有 K8s 秘密 YAML 对象的方法,该对象由 YAML 块中包含的"kind: Secret"
字符串标识。这应该删除从"apiVersion"到表示下一个对象开始的"---"之前的所有内容。
我研究过Sed,Python和yq工具,但没有运气。 YAML 可以按任意顺序包含任意数量的机密。
如何自动剥离这些"秘密"块?
apiVersion: v1
data:
username: dGVzdAo=
password: dGVzdHBhc3N3b3JkCg==
kind: Secret
metadata:
name: my-secret-1
type: Opaque
---
apiVersion: v1
kind: Pod
metadata:
name: test-site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: rss-reader
image: nickchase/rss-php-nginx:v1
ports:
- containerPort: 88
---
apiVersion: v1
data:
username: dGVzdAo=
password: dGVzdHBhc3N3b3JkCg==
kind: Secret
metadata:
name: my-secret-2
type: Opaque
---
yq
可以做到这一点(jq
下面(
pip install yq
yq --yaml-output 'select(.kind != "Secret")' input.yaml
您可能需要在示例末尾删除 null 文档,它会导致输出中出现一些奇怪
请注意,还有一个不同的yq
实用程序似乎没有执行jq
所做的事情,因此我不确定如何使该实用程序工作。
使用命令awk在每次出现---
时拆分文件的 shell 脚本怎么样?(有关示例,请参阅此链接的第 5 节和第 6 节。这样,脚本可以单独评估每个部分,并将与Secret
不对应的部分发送到新的输出文件。
纯粹使用正则表达式,您可以搜索
(^|---).*?kind: Secret.*?(---|$)
并替换为:
---
在这里测试。
注意:最后,您可能有一些额外的---
需要"手动"删除 - 但这应该不是什么大问题。