将yaml配置文件转换为环境变量

问题描述 投票:0回答:4

给定一个如下所示的 yaml 配置文件:

key1:
   key11: value1
   key12: value2
key2:
   key21: value3

如何将 bash 脚本(最好使用 yq)中的它转换为以字符串为前缀的环境变量?

env
所需的输出:

TF_VAR_key11=value1
TF_VAR_key12=value2
TF_VAR_key21=value3
yaml yq
4个回答
1
投票

假设输入的子元素中 key 和 value 之间缺少空格是故意的,所以我们只是处理包含

:
的字符串值数组,并用空格分隔。

yq '.[] | split(" ") | .[] | split(":") | "TF_VAR_" + .[0] + "=" + .[1]' file.yaml

您使用的是 yq

 的哪种实现
?这适用于 mikefarah/yq。要与 kislyuk/yq 一起使用,请添加
-r
选项。


1
投票

如果您在 Bash 中编写脚本,则可以将 yq 和 jq 与导出命令一起使用:

#!/bin/bash

# Read the YAML file and convert it to JSON using 'yq' and 'jq' tools
json=$(yq eval '. | tojson' input.yaml)

# Set each key-value pair as an environment variable
while IFS== read -r key value; do
  export "$key"="$value"
done < <(echo "$json" | jq -r 'to_entries[] | "\(.key)=\(.value)"')

# To check the env vars
printenv

0
投票

您首先将 YAML 配置加载到内存中。

from yaml import loads

with open("config.yaml") as f:
    config = loads(f.read())

然后,迭代字典值,它们看起来也是字典。对于每个字典,将 key=val 对写入新文件。

env_str = ""
for inner_dict in config.values():
    for key, val in inner_dict.items():
        env_str = f"TF_VAR_{key}={val}\n"

0
投票

按照建议使用 python 是简单易读的,如果你需要在 bash 中完成所有操作,你可以检查这个线程,它有各种解决方案:
如何从 Linux shell 脚本解析 YAML 文件?

© www.soinside.com 2019 - 2024. All rights reserved.