Извлечь файл yaml из переменной в файле yaml

У меня есть простой файл yaml:

# replicas: number of pods
replicas: 1
# test
hello: world

Я храню это на карте конфигурации kubernetes:

apiVersion: v1
data:
  helm_values: |
    # replicas: number of pods
    replicas: 1
    # test
    hello: world
kind: ConfigMap
metadata:
  creationTimestamp: 2018-07-30T06:07:38Z

Теперь я хочу извлечь внутренний файл yaml из configmap. Пытаясь yq я получаю:

$ VAR=$(oc get configmap backoffice-deployer -o yaml | yq .data.helm_values)
$ echo $VAR
"# replicas: number of pods\nreplicas: 1\n# test\nhello: world\n"

Если я пытаюсь отобразить или распечатать VAR в файл, он не отформатирован так, как оригинальный файл.

Какой самый простой способ в bash вернуть извлеченные данные в формате исходного файла в bash?

1 ответ

Решение

Я не могу точно воспроизвести ваш код, но вот что я получаю (OSX, bash v4.4.23, yq v2.1.0):

var=$(cat test.yaml | yq r - data.helm_values)
echo "$var"

с выходом

# replicas: number of pods
replicas: 1
# test
hello: world

Если я забуду цитаты, (echo $var), затем:

# replicas: number of pods replicas: 1 # test hello: world

(без разрывов строк, нет \n).

Я могу еще дальше обработать это:

echo "$var" | yq r - hello
# => world

С yq v2.6.0 аргументы команды изменились:

var=$(cat test.yaml | yq -r .data.helm_values)
echo "$var"
Другие вопросы по тегам