如何读取 yaml 文件并将 yaml 文件值输出为环境变量?

How do I read a yaml file and outputting the yaml file values as environment variables?

我将环境变量存储在 YAML 文件中。 YAML 文件被第三方服务用于部署。

我想知道是否有一种方法可以获取我正在使用的 YAML 文件,以便我可以访问我的数据库凭据以在应用程序部署后 运行 进行迁移?

YAML 示例:

env_variables:
  DATABASE_CONNECTION_ADDRESS: 'localhost'
  DATABASE_PORT: '5432'
  DATABASE_NAME: 'a-db'
  DATABASE_USERNAME: 'user'
  DATABASE_PASSWORD: 'password'
  IS_DEBUG: 'false'
  GS_BUCKET_NAME: image-bucket

我的主要动机是此部署 运行 在管道中进行,我不想将这些环境变量中的每一个重复保存在它们自己的秘密中,并将此 YAML 文件存储为秘密所以第三方服务可以访问它。

如果您的环境中安装了 Python 并且可以在其中安装 ruamel.yaml,您可以获取以下 one-liner 的输出:

python -c 'from pathlib import Path; from ruamel.yaml import YAML; print("".join([f"{k}={v}\n" for k, v in YAML().load(Path("example.yaml"))["env_variables"].items()]))' 

它的输出是:

DATABASE_CONNECTION_ADDRESS=localhost
DATABASE_PORT=5432
DATABASE_NAME=a-db
DATABASE_USERNAME=user
DATABASE_PASSWORD=password
IS_DEBUG=false
GS_BUCKET_NAME=image-bucket

正如 Jeff Schaller 所建议的那样,您可能想要引用值并转义字符串中可能出现的任何单引号。这可以通过在 one-liner.

中将 {v} 更改为 {v!r} 轻松实现

作为程序:

#!/usr/bin/env python3

from pathlib import Path
from ruamel.yaml import YAML

file_in = Path("example.yaml")

yaml = YAML()
env_data = yaml.load(file_in)["env_variables"]
print("".join([f"{k}={v!r}\n" for k, v in env_data.items()]))