Это карта конфигурации yaml kubernetes

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

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

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

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

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

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

1 ответ1

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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .