invia un file yaml che utilizza l'identificazione


0

Questa è una mappa di configurazione di kubernetes yaml

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

E il $TESTOBJECTè un esempio di oggetto json come

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

Il modo in cui provo a risolverlo è estrarre l'oggetto usando jq e quindi iniettarlo con envsubst. Il problema è che l'identificazione è sbagliata nel farlo in questo modo

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

Come posso correggere il rientro?

Risposte:


1

Metodo 1: utilizzare l' opzione -c( --compact-output) di jq , fornendo un documento a riga singola.

Metodo 2: convertire l'intero configuration.ymlfile in JSON, utilizzare jq per sostituire la variabile in modo compatibile con JSON, convertirlo nuovamente in YAML.

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

Metodo 3: utilizzare un linguaggio di programmazione con il proprio supporto YAML e 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.