как извлечь определенное c значение из configmap с помощью клиента o c - PullRequest
4 голосов
/ 05 мая 2020

Моя конфигурационная карта выглядит так:

apiVersion: v1
data:
  my-data.yaml |2-
   #data comes here
kind: ConfigMap

Можно ли извлечь содержимое ключа my-data.yaml с помощью

oc get configmap

или любой другой команды oc?

например

oc get configmap myconfigmap  -o=yaml <[only my-data.yaml]>

Ответы [ 3 ]

4 голосов
/ 05 мая 2020

Я хотел бы продемонстрировать пример команды, о которой "coderanger" упоминал ранее.

Этот пример преобразовал из yaml в json и отфильтровал ".keyname" с помощью команды "jq" после этого. Вы также можете использовать команду «yq» вместо комбинации python однострочника и jq.

oc get configmap/myconfigmap \
   -o "jsonpath={ .data['my-data\.yaml']}" | \
   python -c 'import sys, yaml, json; y=yaml.load(sys.stdin.read()); print json.dumps(y)' | \
   jq '. | .keyname'

Надеюсь, это вам поможет.

1 голос
/ 05 мая 2020

Существуют некоторые обходные пути оболочки для синтаксического анализа файлов yaml:

yq

Вы можете использовать yq, процессор YAML командной строки, созданный на основе jq.

Вы можете загрузить его и найти документацию по адресу http://mikefarah.github.io/yq/.

niet

Другой инструмент - openuado / niet

Niet похож на xmllint или jq , но для данных YAML и JSON вы можете использовать его для нарезки и фильтрации, а также отображения и преобразования структурированных data.

Вы можете легко извлекать данные, используя простые выражения или используя расширенные функции xpath для доступа к нетривиальным данным.

Вы можете легко преобразовать формат YAML в формат JSON и наоборот.

bash-yaml для чистого bash

Для чистого bash вы можете попробовать:

jasperes/bash-yaml

Прочтите файл yaml и создайте переменные в bash

Простой 41-строчный-bash сценарий использует только sed и awk для синтаксического анализа yaml -файл и создайте из него переменные.

mrbaseman/parse_yaml

parse_yaml предоставляет функцию bash, которая позволяет анализировать простые файлы YAML. Результатом является код оболочки, который определяет переменные оболочки, которые содержат проанализированные значения. bash не поддерживает многомерные массивы. Поэтому для каждого значения создается отдельная переменная, а имя переменной состоит из имен всех уровней в файле yaml, склеенных вместе с разделителем, который по умолчанию равен _

1 голос
/ 05 мая 2020

Нет. Насколько видит Кубе, это всего лишь одна длинная струна. Вы можете использовать режим вывода пути json, чтобы отфильтровать только одно значение. А затем проанализируйте его с помощью jq или yq. Или просто используйте jq дважды :)

...