假设配置图列出如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
namespace: ${namespace}
data:
my-config.yaml: |-
keyA:
keyB: a-value
如何使用keyB
命令从configmap中获取a-value
(即kubectl
)的值?
PS:我当时正在考虑使用-o jsonpath
或-o 'go-template=...
选项,但我无法弄清楚正确的语法。
您可以使用data.my-config.yaml
或jsonpath
获得go-template
值。
[jsonpath
的示例:
$ kubectl get cm my-configmap -o "jsonpath={.data['my-config\.yaml']}"
keyA:
keyB: a-value
[go-template
的示例:
$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}'
keyA:
keyB: a-value
注意,通过在YAML上使用|-
,您正在定义Multiline YAML String,这意味着返回的值是一个带有换行符的单个字符串(\n
)。
[如果仅需要keyB
值,则可以使用输出来为YAML处理器提供数据,例如yq
。例如:
yq
由于此问题被标记为jq,并且yq只是jq的包装,所以这是一个使用yq以及grep和sed的解决方案:
$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}' | yq -r .keyA.keyB
a-value
当然,最好使用与上面最后一行类似的grep / sed组合,而完全不使用yq。