pathenvconfig

package module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 13, 2022 License: MIT Imports: 8 Imported by: 1

README

pathenvconfig

A lot like https://github.com/kelseyhightower/envconfig, but supports sourcing secrets from mounted files.

Instead of needing to specify a secret like POSTGRES_PASSWORD as an environment variable (which might be a bad idea), you can specify POSTGRES_PASSWORD_FILE=/path/to/secret.txt, where /path/to/secret.txt contains the password.

Usage

Define a struct to hold your configuration values:

type MyConfig struct {
	DatabaseConnectionString string `required:"true"`
	TimeoutSeconds           int    `default:"10"`
}

Then you can load values into an instance of this struct my calling:

config := MyConfig{}
pathenvconfig.Process("MY_APP", &config)

This will populate the fields of the struct by inspecting environment variables. The first field can be specified with the environment variable

export MY_APP_DATABASE_CONNECTION_STRING="user=someone password=xyz dbname=mydb host=postgres port=5432"

Or you can provide an environment variable with the suffix _FILE that contains a path to a file that contains the actual connection string:

export MY_APP_DATABASE_CONNECTION_STRING_FILE="/path/to/a/file.txt"
Nested Structs

Nested structs are also supported:

type DatabaseConfig struct {
	User     string `required:"true"`
	Password string `required:"true"`
}

type MyConfig struct {
	Database       DatabaseConfig
	TimeoutSeconds int            `default:"10"`
}

The properties can be set with these environment variables:

  • MY_APP_DATABASE_USER or MY_APP_DATABASE_USER_FILE
  • MY_APP_DATABASE_PASSWORD or MY_APP_DATABASE_PASSWORD_FILE
  • MY_APP_TIMEOUT or MY_APP_TIMEOUT_FILE

Documentation

Index

Constants

View Source
const (
	EnvironmentVariableFileSuffix = "_FILE"
)

Variables

View Source
var ErrInvalidSpecification = errors.New("specification must be a struct pointer")

Functions

func Process

func Process(prefix string, spec interface{}) error

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL