如何简化含重复键值的YAML文件 避免多环境下重复编写URL配置
YAML重复内容简化方案
完全可以通过YAML原生语法配合简单的Python逻辑实现简化,以下是两种最常用的落地方式:
方式1:YAML极简写法(推荐,维护成本最低)
如果你的所有环境路径后缀都是固定的pod/one/two/volume,可以直接把后缀逻辑放到Python侧处理,YAML只需要保存各环境的前缀即可:
简化后的YAML文件
prefix: development: 'https://url-dev.mydomain.com' staging: 'https://url-staging.mydomain.com' test: 'https://url-test.mydomain.com' production: 'https://url-production.mydomain.com'
对应Python读取逻辑
import yaml # 固定路径后缀配置 FIXED_PATHS = ["pod", "one", "two", "volume"] with open("你的配置文件路径.yaml", "r", encoding="utf-8") as f: raw_config = yaml.safe_load(f) # 运行时自动拼接生成完整配置 full_config = {} for env, prefix in raw_config["prefix"].items(): full_config[env] = {path: f"{prefix}/{path}" for path in FIXED_PATHS} # 后续使用和之前完全一致,例如获取开发环境pod地址:full_config["development"]["pod"]
方式2:YAML原生锚点+占位符(适合后缀可能变动的场景)
如果路径后缀会经常调整,不想修改Python代码,可以用YAML的锚点语法抽离通用路径模板,只在Python侧加一步简单的占位符替换:
简化后的YAML文件
# 抽离通用路径模板,所有环境共用这一份配置 x-common-path-template: &common-path-template pod: '{{prefix}}/pod' one: '{{prefix}}/one' two: '{{prefix}}/two' volume: '{{prefix}}/volume' development: <<: *common-path-template # 合并通用模板 prefix: 'https://url-dev.mydomain.com' staging: <<: *common-path-template prefix: 'https://url-staging.mydomain.com' test: <<: *common-path-template prefix: 'https://url-test.mydomain.com' production: <<: *common-path-template prefix: 'https://url-production.mydomain.com'
对应Python读取逻辑
import yaml with open("你的配置文件路径.yaml", "r", encoding="utf-8") as f: raw_config = yaml.safe_load(f) full_config = {} for env, env_conf in raw_config.items(): prefix = env_conf.pop("prefix") full_config[env] = {k: v.replace("{{prefix}}", prefix) for k, v in env_conf.items()} # 使用方式和之前完全一致
内容的提问来源于stack exchange,提问作者Srikanth Jeeva
相关产品推荐
相关产品推荐

