如何读取 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()]))
我将环境变量存储在 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()]))