如何使用 kubectl 和 jsonpath 将 configmap 的内容保存到文件中?
How to save content of a configmap to a file with kubectl and jsonpath?
我正在尝试将 configmap 的内容保存到本地硬盘驱动器上的文件中。 Kubectl 支持 select 使用 JSONPath,但我找不到我需要 select 文件内容的表达式。
配置映射是使用命令创建的
kubectl create configmap my-configmap --from-file=my.configmap.json=my.file.json
当我运行
kubectl describe configmap my-configmap
我看到以下输出:
Name: my-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
my.file.json:
----
{
"key": "value"
}
Events: <none>
我得到的最远的 select 文件内容是这样的:
kubectl get configmap my-configmap -o jsonpath="{.data}"
输出
map[my.file.json:{
"key": "value"
}]
我想要的输出是
{
"key": "value"
}
JSONPath 拼图的最后一块是什么?
有一个开放的issue at the Kubernetes GitHub repo with a list of things that needs to be fixed in regards to kubectl (and JSONpath), one of them are issue 16707json路径模板输出应该是json。
编辑:
这个怎么样:
kubectl get cm my-configmap -o jsonpath='{.data.my\.file\.json}'
我刚刚意识到我有 另一个与这个问题相关(有点)的问题。上面的命令应该输出你的想法!
如果你有能力使用jq
,那么你可以使用下面的方法,例如按选择器“列出”所有配置映射,并提取文件:
readarray -d $'[=10=]' -t a < <(kubectl get cm -l grafana=dashboards -o json | jq -cj '.items[] | . as $cm | .data | to_entries[] | [ ($cm.metadata.name + "-" + .key), .value ][]+"\u0000"') ; count=0; while [ $count -lt ${#a[@]} ]; do echo "${a[$((count + 1))]}" > ${a[$count]}; count=$(( $count + 2)); done
这使用 kubectl
(使用 -l
作为标签选择器)获取所有配置映射。接下来它通过 jq
对它们进行管道传输,创建具有空字节终止的键值对(键还包含 configmap 的名称,这样我确保了重复的文件名不是问题)。然后它将其读入 bash 数组,以步骤 2 遍历该数组。创建包含内容的文件。
这也适用于包含换行符的文件配置映射值。
我正在尝试将 configmap 的内容保存到本地硬盘驱动器上的文件中。 Kubectl 支持 select 使用 JSONPath,但我找不到我需要 select 文件内容的表达式。
配置映射是使用命令创建的
kubectl create configmap my-configmap --from-file=my.configmap.json=my.file.json
当我运行
kubectl describe configmap my-configmap
我看到以下输出:
Name: my-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
my.file.json:
----
{
"key": "value"
}
Events: <none>
我得到的最远的 select 文件内容是这样的:
kubectl get configmap my-configmap -o jsonpath="{.data}"
输出
map[my.file.json:{
"key": "value"
}]
我想要的输出是
{
"key": "value"
}
JSONPath 拼图的最后一块是什么?
有一个开放的issue at the Kubernetes GitHub repo with a list of things that needs to be fixed in regards to kubectl (and JSONpath), one of them are issue 16707json路径模板输出应该是json。
编辑:
这个怎么样:
kubectl get cm my-configmap -o jsonpath='{.data.my\.file\.json}'
我刚刚意识到我有
如果你有能力使用jq
,那么你可以使用下面的方法,例如按选择器“列出”所有配置映射,并提取文件:
readarray -d $'[=10=]' -t a < <(kubectl get cm -l grafana=dashboards -o json | jq -cj '.items[] | . as $cm | .data | to_entries[] | [ ($cm.metadata.name + "-" + .key), .value ][]+"\u0000"') ; count=0; while [ $count -lt ${#a[@]} ]; do echo "${a[$((count + 1))]}" > ${a[$count]}; count=$(( $count + 2)); done
这使用 kubectl
(使用 -l
作为标签选择器)获取所有配置映射。接下来它通过 jq
对它们进行管道传输,创建具有空字节终止的键值对(键还包含 configmap 的名称,这样我确保了重复的文件名不是问题)。然后它将其读入 bash 数组,以步骤 2 遍历该数组。创建包含内容的文件。
这也适用于包含换行符的文件配置映射值。