envsubst um arquivo yaml que usa identificação

0

Este é um mapa de configuração do yaml do kubernetes

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

E o $TESTOBJECT é um exemplo de objeto json como

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

A maneira como tento resolvê-lo é extrair o objeto usando jq e depois injetá-lo com envsubst. O problema é que a identificação está errada fazendo assim

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

Como posso corrigir o recuo?

    
por Gert Cuykens 26.07.2018 / 17:08

1 resposta

1

Método 1: Use a opção -c ( --compact-output ) de jq , fornecendo um documento de linha única.

Método 2: Converta o arquivo configuration.yml inteiro em JSON, use jq para substituir a variável de uma maneira compatível com JSON, converta-a de volta para YAML.

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

Método 3: Use uma linguagem de programação com seu próprio suporte a 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)
    
por 26.07.2018 / 17:58