envsubst файла YAML, который использует identation

это карта конфигурации Kubernetes yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: $CONFIG_NAME
  namespace: processing
data:
  configuration.json: |
    {
      "test" : $TESTOBJECT
    }

и $TESTOBJECT является примером объекта json, как

{
  "sample1":"sample1",
  "sample2":"sample2"
}

то, как я пытаюсь решить это, чтобы извлечь объект с помощью jq, а затем ввести его с envsubst. Проблема в том, что identation неправильно делает это так

#!/bin/bash
export TESTOBJECT=$(jq .formats configuration.json)
envsubst '$TESTOBJECT' < "configuration.yml" > "configuration2.yml"

как я могу исправить вмятину?

15
задан Gert Cuykens
21.03.2023 0:00 Количество просмотров материала 2915
Распечатать страницу

1 ответ

метод 1: Используйте -c (--compact-output опция)jq, давая вам однострочный документ.

Метод 2: преобразовать весь configuration.yml файл в JSON, используйте jq чтобы заменить переменную на JSON-совместимую, преобразуйте ее обратно в YAML.

yaml2json configuration.yaml \
  | jq --slurpfile obj configuration.json \
    '(.data | .["configuration.json"]) = ({test: $obj[0] | .formats} | tojson)' \
  | json2yaml > configuration2.yaml

Метод 3: используйте язык программирования с собственной поддержкой YAML и JSON:

#!/usr/bin/env python3
import json, yaml
with open("configuration.yml", "r") as fh:
    yconf = yaml.load(fh)
with open("configuration.json", "r") as fh:
    jconf = json.load(fh)
jconf = {"test": jconf["formats"]}
yconf["data"]["configuration.json"] = json.dumps(jconf)
with open("configuration2.yml", "w") as fh:
    yaml.dump(yconf, stream=fh)
1
отвечен grawity 2023-03-22 07:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх