这是一个 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"
我该如何修复这个缩进?
答案1
方法 1:使用-c
( --compact-output
) 选项杰奇,为您提供单行文档。
方法 2:将整个configuration.yml
文件转换为 JSON,使用杰奇以 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)