go - 如何为多个环境和突变的组合生成配置

标签 go configuration config go-templates gomplate

我正在尝试使用gomplate作为配置生成器。我现在面临的问题是存在多个突变和需要以不同方式配置应用程序的环境。我想以某种在模板和源数据中尽可能减少重复的方式实现用户友好和可读的方式。
其背后的动机是生成了可在以下gomplate中使用的源数据app_config,如下所示:

feature_a={{ index (datasource "app_config").features.feature_a .Env.APP_MUTATION .Env.ENV_NAME | required }}
feature_b={{ index (datasource "app_config").features.feature_b .Env.APP_MUTATION .Env.ENV_NAME | required }}
基本上我想要这个源数据
features:
    feature_a:
        ~: true
    feature_b:
        mut_a:
            ~: false
            dev: true
            test: true
        mut_b:
            ~: true
转换为该结果(用作app_config gomplate数据源)
features:
    feature_a:
        mut_a:
            dev: true
            test: true
            load: true
            staging: true
            prod: true
        mut_b:
            dev: true
            test: true
            load: true
            staging: true
            prod: true
    feature_b:
        mut_a:
            dev: true
            test: true
            load: false
            staging: false
            prod: false
        mut_b:
            dev: true
            test: true
            load: true
            staging: true
            prod: true
给定数据源platform被定义为
mutations:
    - mut_a
    - mut_b
environments:
    - dev
    - test
    - load
    - staging
    - prod
我选择使用~声明未定义的每个环境或突变都将获得~后面的值。
这应该在最低级别为环境且最低级别为突变之前的假设下进行。除非未定义环境,否则在这种情况下,突变级别最低,适用于所有突变和环境。但是我知道这带来了额外的复杂性,因此我想使用始终定义突变的简化变体:
features:
    feature_a:
        mut_a: true
        mut_b: true
    feature_b:
        mut_a:
            ~: false
            dev: true
            test: true
        mut_b:
            ~: true
但是,由于我刚接触gomplate,因此不确定它是否适合此工作。
我欢迎每一个反馈。

最佳答案

经过进一步调查,我决定使用单独的工具可以更好地解决此问题。

关于go - 如何为多个环境和突变的组合生成配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62598691/

相关文章:

go - Go中对象的大小

c - 在 Go 程序中使用 C 代码时未声明的标识符

go - 如何在不知道值类型的情况下访问 map 的键?

c++ - 在 NetBeans 8.0 中的什么位置分配 SDL 2.0.3 目录?

linux-kernel - 读取linux设备驱动中的配置文件

go - 将 SIGTERM 发送到 Ginkgo 测试套件时出现误报

c# - 在没有 SetSPN 的情况下查询/更改 Windows 域上的 SPN

ios - RemoveProfile 命令在 iOS MDM 协议(protocol)中不起作用

c - C unix 中的文件配置、创建和使用

F# NLog 配置文件