Как использовать команду kubectl для получения значения из файла yaml в файле конфигурации k8s? - PullRequest
1 голос
/ 17 октября 2019

Предположим, что configmap указан следующим образом:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
  namespace: ${namespace}
data:
  my-config.yaml: |-
    keyA:
      keyB: a-value

Как я могу получить значение keyB (то есть a-value) из configmap с помощью команды kubectl?

PS: я думал об использовании опций -o jsonpath или -o 'go-template=..., но не смог понять правильный синтаксис.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Поскольку этот вопрос помечен как jq, а yq - просто оболочка для jq, вот одно решение, использующее только yq:

yq -r '.data."my-config.yaml"' configmap.yml |
  yq .keyA.keyB

Конечно, было бы также неплохо использовать grep /Комбинация sed в соответствии с:

 grep keyB: | sed 's/.*keyB: *//'

Это может быть сделано с первым вызовом yq, показанным выше, или вообще без использования yq, хотя, конечно, есть много предостережений, которые согласуются с таким подходом.

0 голосов
/ 17 октября 2019

Вы можете получить значение 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, вы определяете многострочную строку YAML , что означает, что возвращаемое значение представляет собой одну строку с разрывами строки на ней (\n).

Если вам нужно только значение keyB, вы можете использовать свой выход для подачи на процессор YAML, например yq. Например:

$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}' | yq -r .keyA.keyB
a-value
...