Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fernferret/envy
Automatically add environment variables to pflag instances
https://github.com/fernferret/envy
Last synced: about 2 months ago
JSON representation
Automatically add environment variables to pflag instances
- Host: GitHub
- URL: https://github.com/fernferret/envy
- Owner: fernferret
- License: mit
- Created: 2022-03-27T19:40:15.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-11-25T18:42:22.000Z (about 1 year ago)
- Last Synced: 2024-10-11T03:21:41.138Z (3 months ago)
- Language: Go
- Size: 270 KB
- Stars: 1
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# envy
Automatically load flags as environment variables with pflag!
## Install
```console
go install github.com/fernferret/envy
```## About
There are a lot of solutions for loaing environment variables, but I find a lot
of them very heavy/confusing. All I wanted was:* Something to crawl the flags I'd defined and read from a `PFX_` + `flag`
* A way to define exclusions for desstructive flags that **must** be set
explicitly
* A way to define exclusions for "well known" variables like `$KUBECONFIG`
* Don't mangle the default value in the flag help if an envvar was setEnter: envy. The basic idea and name came from
https://github.com/jamiealquiza/envy, however this version requires using cobra
which I find a bit overkill for some of my small apps. It also didn't support
some of the extended features like `Disable` and `SetEnvName`.The order of values is kept very simple:
1. Flag value
2. Environment value
3. Default flag valueThis means the flag value, like `--foo=x`, will always take priority. If it's
not set, then the environment variable will be checked, and if that's not set
envy will use the default flag value.## Usage
Here's a really simple use case, with more examples in the documentation.
```go
package mainimport (
"fmt""github.com/fernferret/envy"
"github.com/spf13/pflag"
)func main() {
url := pflag.String("url", "http://localhost:8080", "set the url")
once := pflag.Bool("once", false, "only run processing once")// Don't use FOO_URL, instead use MY_HTTP_URL as the env var
envy.SetEnvName("url", "MY_HTTP_URL")// Parse items with a prefix of MYAPP_
envy.Parse("MYAPP")pflag.Parse()
fmt.Printf("url was %s\n", *url)
fmt.Printf("once was %v\n", *once)
}
``````console
# Environment defaults show up in brackets, these are unset
./foo -h
Usage of ./foo:
--once only run processing once [MYAPP_ONCE]
--url string set the url [MY_HTTP_URL] (default "http://localhost:8080")
pflag: help requested./foo --once
url was http://localhost:8080
once was true# Now let's set both envvars, booleans are set with just "true" or "false"
export MYAPP_ONCE true
export MY_HTTP_URL https://www.google.com# Environment defaults show up inside the brackets if set at runtime
./foo -h
Usage of ./foo:
--once only run processing once [MYAPP_ONCE true]
--url string set the url [MY_HTTP_URL https://www.google.com] (default "http://localhost:8080")
pflag: help requested# Load both values from envvars
./foo
url was https://www.google.com
once was true# Flags *always* take priority
./foo --once=false
url was https://www.google.com
once was false
```