github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/config/README.md (about) 1 ## WARNING: This documentation is not complete. 2 3 # Configs 4 5 This directory contains all of the configs needed to run M3 in a variety of modes (local, clustered, etc.) 6 7 ## How-To 8 9 Below are instructions for how to generate a `yaml` file for the clustered M3DB jsonnet file. Other jsonnet files follow a similar pattern. 10 11 1. Navigate to `./m3db/clustered-etcd` directory 12 2. Add any changes to either the `db` or `coordinator` sections of the config that you want to change from the base file (`m3dbnode.libsonnet`) in `m3dbnode_cmd.libsonnet` using local variables. For example, to change the listen address of the `coordinator` as well as input the hosts and IP addresses of the etcd nodes: 13 14 ``` 15 local lib = import 'm3dbnode.libsonnet'; 16 17 local cluster = { 18 HOST1_ETCD_ID: "host_name1", 19 HOST1_ETCD_IP_ADDRESS: "host_ip1", 20 HOST2_ETCD_ID: "host_name2", 21 HOST2_ETCD_IP_ADDRESS: "host_ip2", 22 HOST3_ETCD_ID: "host_name3", 23 HOST3_ETCD_IP_ADDRESS: "host_ip3", 24 }; 25 26 local coordinator = { 27 "listenAddress": { 28 "type": "config", 29 "value": "localhost:7208" 30 }, 31 }; 32 33 std.manifestYamlDoc(lib(cluster, coordinator)) 34 ``` 35 36 3. Run the following `jsonnet` command. This will generate a file called `generated.yaml` within the directory. 37 ``` 38 make config-gen 39 ``` 40 41 ## Configuration Schemas 42 43 At this time, each service's configuration is defined as a Go struct in a corresponding `config` package. For instance, `m3aggregator`'s config is in [src/cmd/services/m3aggregator/config/config.go](https://github.com/m3db/m3/blob/master/src/cmd/services/m3aggregator/config/config.go). 44 45 Validation is done using [https://godoc.org/gopkg.in/go-playground/validator.v2](https://godoc.org/gopkg.in/go-playground/validator.v2), look for `validate` tags in the structs. 46 47 ## Advanced: Environment Variable Interpolation 48 M3 uses [go.uber.org/config](https://godoc.org/go.uber.org/config) to load its configuration. This means that we support environment variable interpolation of configs. For example: 49 50 Given the following config: 51 52 ``` 53 foo: ${MY_ENV_VAR} 54 ``` 55 56 and an environment of `MY_ENV_VAR=bar`, the interpolated YAML will be: 57 58 ``` 59 foo: bar 60 ``` 61 62 This can be useful for further tweaking your configuration without generating different files for every config permutation.