Skip to main content

Stacked environment variable management system.

Project description

envstack

Stacked environment variable management system. The lightweight, easy to use "rez" alternative for production pipelines.

Environment variables are declared in namespaced .env files using yaml syntax. The default stack declares env variables in stack.env files. You can create any new stack by creating new .env files, e.g. to create a new thing stack just create thing.env files in any given context.

Installation

The easiest way to install:

$ pip install envstack

Alternatively,

$ git clone https://github.com/rsgalloway/envstack
$ cd envstack
$ python setup.py install

The install process will automatically attempt to install the default stack.env file to the default env file directory defined $DEFAULT_ENV_DIR. Note: The siteconf sitecustomize.py module may override $DEFAULT_ENV_DIR.

If installing from source, you can use distman to install envstack and the default stack.env file using the provided dist.json file:

$ distman

Quickstart

The stack namespace is the default environment stack. Running the envstack command should show you the default environment stack:

$ envstack
ENV=prod
HELLO=world
LOG_LEVEL=INFO
DEFAULT_ENV_DIR=${DEPLOY_ROOT}/env
DEPLOY_ROOT=${ROOT}/${ENV}
ROOT=${HOME}/.local/envstack

Modify the environment stack by editing stack.env or by creating new contextual stack.env files up on the filesystem.

You can execute any command inside the default stacked environment like this:

$ envstack -- [COMMAND]

For example, use the echo command to see the resolved value of $HELLO (note: we have to escape it first to it's not pre-expanded in the shell):

$ envstack -- echo \$HELLO
world

Any command can be run in an envstack environment by preceeding the command with --:

$ envstack -- python -c "import os; print(os.environ['HELLO'])"
world

Creating Stacks

To create a new environment stack, create a new namespaced .env file. For example thing.env (the stack namespace is "thing"):

all: &default
  FOO: bar

To see the resolved environment for the thing environment stack, run:

$ envstack thing
FOO 'bar'

Variables can reference other variables defined elsewhere (but cannot be circular):

all: &default
  BAR: $FOO

Variables can be platform specific (and inherit the defaults):

linux:
  <<: *default
  HELLO: world

Environment files can include other namespaced environments (all stacks inherit the default stack.env automatically).

include: ['other']

Context

Environment stacks are hierarchical, so values for $FOO defined in .env files lower in the filesystem (lower in scope) override those defined higher up (higher in scope):

${DEFAULT_ENV_DIR}
/stack.env
/show/stack.env
/show/seq/stack.env
/show/seq/shot/stack.env
/show/seq/shot/task/stack.env

If you are working in the task directory, those envstack $VARs will override the $VARs defined in the shot, seq, show and root directories.

Usage

To see the default environment for any given stack:

$ envstack [STACK]

To resolve one or more environment vars for a given stack:

$ envstack [STACK] -r [VAR [VAR ...]]

To trace where one or more environment vars is being set:

$ envstack [STACK] -t [VAR [VAR ...]]

To get the list of source files for a given stack:

$ envstack [STACK] --sources

Python API

To init the environment stack, use the init function:

>>> envstack.init("thing")
>>> os.getenv("FOO")
'bar'

Alternatively, envstack.getenv uses the default environment stack stack and can be a drop-in replacement for os.getenv

>>> import envstack
>>> envstack.getenv("HELLO")
'world'

Running Commands

To run any command line executable inside of an environment stack, where [COMMAND] is the command to run:

$ envstack [STACK] -- [COMMAND]

For example, running python in the default stack (reading from the default stack.env file):

$ envstack -- python -c "import os; print(os.environ['HELLO'])"
world

Same command but using the "thing" stack"

$ envstack thing -- python -c "import os; print(os.environ['FOO'])"
bar

To source the environment in your current shell, source the output of --export (and create an alias for convenience):

$ source <(envstack --export)
$ alias esinit='source <(envstack $ARG --export)'

In Windows command prompt:

for /f "usebackq" %i in (`envstack --export`) do %i

Config

Default config settings are in the config.py module. The following environment variables are supported:

Variable Description
$DEFAULT_ENV_DIR the folder containing the default env stack files
$DEFAULT_ENV_STACK the name of the default env stack namespace (default "stack")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

envstack-0.5.1.tar.gz (22.3 kB view details)

Uploaded Source

File details

Details for the file envstack-0.5.1.tar.gz.

File metadata

  • Download URL: envstack-0.5.1.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.10

File hashes

Hashes for envstack-0.5.1.tar.gz
Algorithm Hash digest
SHA256 54b6635b50a91b29519f0f46b64da7163f3541553472ff7c4401f47877b23a51
MD5 77d1c4758353a94049acbdadfdca7b33
BLAKE2b-256 edd16b1cf236522afde71001343f7227a55b4e47663cf67a0f11cdcdd4c50292

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page