使用 pyyaml 从 yaml 解析环境变量

Parse environment variable from yaml with pyyaml

我有以下 yaml 文件:

config:
  username: admin
  password: ${SERVICE_PASSWORD}
  service: https://${SERVICE_HOST}/service

如何从环境中加载密码和主机值?

为了加载环境变量,您需要添加一些样板来帮助 pyyaml 找到并解析这些值:

import yaml, re, os

env_pattern = re.compile(r".*?${(.*?)}.*?")
def env_constructor(loader, node):
    value = loader.construct_scalar(node)
    for group in env_pattern.findall(value):
        value = value.replace(f"${{{group}}}", os.environ.get(group))
    return value

yaml.add_implicit_resolver("!pathex", env_pattern)
yaml.add_constructor("!pathex", env_constructor)

print(yaml.load("""
config:
  username: admin
  password: ${SERVICE_PASSWORD}
  service: https://${SERVICE_HOST}/service
"""))