micro/config/source/consul
magodo 7acd249147 config consul source supports slash as prefix
`config.NewConfig()` with consul source will both read from consul
and watch consul for changes. Hence, the `prefix` is used in these
2 cases:

- read case: it is used to strip path based on the `KVPair` returned
from consul `kv.List()` method
- watch case: it is used as the `key` of watch query (`keyprefix` type)

So for *watch case*, the `key` is leagal to be `/` for watching change
on root. While for *read case*, because `KVPair.Key` is always stripped
off the leading slash, so if user specified some `prefix` with leading
slash, we should strip it also.

An extream case would be: user want's to read & watch node in root dir.
One would specify `prefix` as `/`, and it should work then.
2019-06-21 16:35:48 +08:00
..
consul.go config consul source supports slash as prefix 2019-06-21 16:35:48 +08:00
options.go add config 2019-05-30 23:11:13 +01:00
README.md config consul source supports slash as prefix 2019-06-21 16:35:48 +08:00
util.go config consul source supports slash as prefix 2019-06-21 16:35:48 +08:00
watcher.go add config 2019-05-30 23:11:13 +01:00

Consul Source

The consul source reads config from consul key/values

Consul Format

The consul source expects keys under the default prefix /micro/config

Values are expected to be json

// set database
consul kv put micro/config/database '{"address": "10.0.0.1", "port": 3306}'
// set cache
consul kv put micro/config/cache '{"address": "10.0.0.2", "port": 6379}'

Keys are split on / so access becomes

conf.Get("micro", "config", "database")

New Source

Specify source with data

consulSource := consul.NewSource(
	// optionally specify consul address; default to localhost:8500
	consul.WithAddress("10.0.0.10:8500"),
	// optionally specify prefix; defaults to /micro/config
	consul.WithPrefix("/my/prefix"),
  // optionally strip the provided prefix from the keys, defaults to false
  consul.StripPrefix(true),
)

Load Source

Load the source into config

// Create new config
conf := config.NewConfig()

// Load file source
conf.Load(consulSource)