1
0
mirror of https://github.com/go-micro/go-micro.git synced 2024-11-24 08:02:32 +02:00
go-micro/config/source/env
2019-08-20 22:32:47 +01:00
..
env_test.go Source watcher ErrStoppedWatcher and fixed test 2019-08-20 22:32:47 +01:00
env.go add config 2019-05-30 23:11:13 +01:00
options.go add config 2019-05-30 23:11:13 +01:00
README.md add config 2019-05-30 23:11:13 +01:00
watcher.go Source watcher ErrStoppedWatcher and fixed test 2019-08-20 22:32:47 +01:00

Env Source

The env source reads config from environment variables

Format

We expect environment variables to be in the standard format of FOO=bar

Keys are converted to lowercase and split on underscore.

Example

DATABASE_ADDRESS=127.0.0.1
DATABASE_PORT=3306

Becomes

{
    "database": {
        "address": "127.0.0.1",
        "port": 3306
    }
}

Prefixes

Environment variables can be namespaced so we only have access to a subset. Two options are available:

WithPrefix(p ...string)
WithStrippedPrefix(p ...string)

The former will preserve the prefix and make it a top level key in the config. The latter eliminates the prefix, reducing the nesting by one.

Example:

Given ENVs of:

APP_DATABASE_ADDRESS=127.0.0.1
APP_DATABASE_PORT=3306
VAULT_ADDR=vault:1337

and a source initialized as follows:

src := env.NewSource(
    env.WithPrefix("VAULT"),
    env.WithStrippedPrefix("APP"),
)

The resulting config will be:

{
    "database": {
        "address": "127.0.0.1",
        "port": 3306
    },
    "vault": {
        "addr": "vault:1337"
    }
}

New Source

Specify source with data

src := env.NewSource(
	// optionally specify prefix
	env.WithPrefix("MICRO"),
)

Load Source

Load the source into config

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

// Load file source
conf.Load(src)