【问题标题】:How to save content of a configmap to a file with kubectl and jsonpath?如何使用 kubectl 和 jsonpath 将 configmap 的内容保存到文件中?
【发布时间】:2018-08-09 13:58:12
【问题描述】:

我正在尝试将配置映射的内容保存到本地硬盘驱动器上的文件中。 Kubectl 支持使用 JSONPath 进行选择,但我找不到只选择文件内容所需的表达式。

configmap 是使用命令创建的

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>

我得到的最远,所以只选择文件内容是这样的:

 kubectl get configmap my-configmap -o jsonpath="{.data}"

哪些输出

map[my.file.json:{
    "key": "value"
}]

我想要的输出是

{
  "key": "value"
}

JSONPath 拼图的最后一块是什么?

【问题讨论】:

    标签: kubernetes jsonpath kubectl configmap


    【解决方案1】:

    在 Kubernetes GitHub 存储库中有一个开放的 issue,其中列出了关于 kubectl(和 JSONpath)需要修复的问题,其中之一是问题 16707 jsonpath 模板输出应该是 json

    编辑:

    这个怎么样:

    kubectl get cm my-configmap -o jsonpath='{.data.my\.file\.json}'
    

    我刚刚意识到我有answered 另一个与此相关(有点)的问题。上面的命令应该会输出你的想法!

    【讨论】:

    • 它可以工作,但是如果配置映射包含多个密钥并且希望在事先不知道密钥的情况下下载所有文件怎么办?
    【解决方案2】:

    如果您有能力使用jq,那么您可以使用以下方法,例如通过选择器“列出”所有配置映射,并提取文件:

    readarray -d $'\0' -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 对它们进行管道传输,创建带有空字节终止的键值对(键还包含配置映射的名称,这样我确保重复的文件名不是问题)。然后它将它读入一个 bash 数组,以 2 的步骤迭代数组。使用内容创建文件。

    这也适用于包含换行符的文件配置映射值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 2015-06-24
      相关资源
      最近更新 更多