如何解析一个JSON秘密到仓库的YAML ?



我在Vault中有一个秘密,它真的很"复杂"。JSON的结构,这意味着它不仅仅是一个键/值,而是在不同的子级别有几个键。

我需要以某种方式获得这个秘密并将其转换为该JSON的YAML表示。如果它是一个简单的结构(像几个k/v在同一级别),我可以使用像

这样简单的东西。
{{- with secret "secret/foo" -}}
{{ range $k, $v := .Data.data }}
{{ $k }}: {{ $v }}
{{- end }}
{{- end }}

然而,由于情况并非如此,并且JSON的结构很复杂,因此试图提出一个模板是相当不可能的。

然而,我发现Vault使用Consul模板,Consul有一个parseYAML函数,所以我的问题是,我如何才能模板这个,以便我得到.Data.data的所有内容并将其翻译成YAML?

我尝试了几种类似的方法:

{{- with secret "secret/foo" -}}
{{ .Data.data| parseYAML }}
{{- end }}

但我总是得到相同的错误wrong type for value; expected string; got map[string]interface {}"

更新样本yaml:

apiVersion: v1
kind: ServiceAccount
metadata:
name: app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
annotations:
vault.hashicorp.com/agent-inject: 'true'
vault.hashicorp.com/agent-inject-secret-foo: 'secret/foo'
vault.hashicorp.com/agent-inject-template-secret-foo: |
{{- with secret "secret/foo" -}}
{{ .Data.data| parseYAML }}
{{- end }}
vault.hashicorp.com/role: 'app'
spec:
containers:
- name: app
image: 'app:1.0.0'
serviceAccountName: app

,其中secret/foo是一个没有明确结构的长JSON。一个随机的例子(实际的JSON大约有300行)。

{
"a": {
"a": "a",
"b": "b",
"c": {
"a": "a",
"b": {
"c": "c"
},
"d": "a"
},
"e": {
"a": {
"b": {
"c": {
"a": "a",
"b": "b"
}
}
}
}
}
}

好吧,把这个弄清楚。

{{- with secret "secret/foo" -}}
{{ .Data.data| toYAML }}
{{- end }}

这是正确的,但正确的函数不是parseYAML,而是toYAML

相关内容

  • 没有找到相关文章

最新更新