1

我有一个包含许多 Kubernetes YAML 对象的文件。我正在寻找一种从文本文件中删除所有 K8s Secret YAML 对象的方法,这些对象由"kind: Secret"YAML 块中包含的字符串标识。这应该删除从“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
---
4

3 回答 3

3

yq可以做到这一点(和jq下面)

pip install yq
yq --yaml-output 'select(.kind != "Secret")' input.yaml

您可能需要在示例末尾删除空文档,这会导致输出有点奇怪

请注意,还有一个不同的yq实用程序似乎没有做什么jq,所以我不知道如何使那个工作。

于 2020-06-25T06:26:42.963 回答
0

---使用命令awk在每次出现时拆分文件的 shell 脚本怎么样?(有关示例,请参阅此链接的第 5 节和第 6 节。)这样,脚本可以分别评估每个部分,并将不对应的部分发送Secret到新的输出文件。

于 2020-06-25T06:33:53.713 回答
0

纯粹使用正则表达式,您可能会搜索

(^|---).*?kind: Secret.*?(---|$)

并替换为:

---

在这里测试。

注意:最后,您可能---需要“手动”删除一些额外内容 - 但这应该没什么大不了的。

于 2020-06-25T06:44:55.583 回答