一个项目能够快速迭代上线,肯定少不了测试环境。而开发如果要在本地切换使用测试环境的配置,一般是手动修改,还可能提交到生产环境,会非常繁琐。

因此一个“伟大”的工具诞生了:easyconf

GitHub - nixihz/easyconf: Allow to generate config file from template and data.
Allow to generate config file from template and data. - nixihz/easyconf

我们需要准备两个物料:一个是模板文件,一个是配置文件。

  1. configmap_tpl.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: demp
  namespace: dev
data:
  config.yaml: |
    server:
      http:
        name: demo
        addr: ":8080"
        server_config:
          read_timeout: 10
          write_timeout: 15
          read_header_timeout: 12
          idle_timeout: 8
    mysql:
      default:
        dsn: "{{ .mysql__default__dsn }}"
        is_debug: "{{ .mysql__default__is_debug }}"
        
  1. config-dev.yaml
local:
  mysql__default__dsn: "username@tcp(127.0.0.1:3306)/dev?charset=utf8"
  mysql__default__is_debug: true

k8s:
  mysql__default__dsn: "username@tcp(demo.com:3306)/prod?charset=utf8"
  mysql__default__is_debug: false

执行一下命令即可生成本地配置文件和 测试文件的 yaml文件。

easyconf -r local -t ./configmap_tpl.yaml -f ./config-dev.yaml -o ./configs/

easyconf -r k8s -t ./configmap_tpl.yaml -f ./config-dev.yaml -o ./configs/configmap.yaml

输出文件:

configs/config.yaml

server:
  http:
    name: demo
    addr: ":8080"
    server_config:
      read_timeout: 10
      write_timeout: 15
      read_header_timeout: 12
      idle_timeout: 8
mysql:
  default:
    dsn: "username@tcp(127.0.0.1:3306)/dev?charset=utf8"
    is_debug: "true"
            

configs/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: demp
  namespace: dev
data:
  config.yaml: |
    server:
      http:
        name: demo
        addr: ":8080"
        server_config:
          read_timeout: 10
          write_timeout: 15
          read_header_timeout: 12
          idle_timeout: 8
    mysql:
      default:
        dsn: "username@tcp(demo.com:3306)/prod?charset=utf8"
        is_debug: "false"