Skip to content

Commit

Permalink
Merge pull request #451 from opencybersecurityalliance/config-env-vars
Browse files Browse the repository at this point in the history
Use environment variables in configuration files
  • Loading branch information
subbyte authored Dec 24, 2023
2 parents 6881573 + e32bc67 commit 1b47d2e
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
4 changes: 2 additions & 2 deletions packages/kestrel_core/src/kestrel/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
def load_default_config():
_logger.debug(f"Loading default config file...")
default_config = load_data_file("kestrel", "config.yaml")
return yaml.safe_load(default_config)
return yaml.safe_load(os.path.expandvars(default_config))


def load_user_config(config_path_env_var, config_path_default):
Expand All @@ -27,7 +27,7 @@ def load_user_config(config_path_env_var, config_path_default):
try:
with open(config_path, "r") as fp:
_logger.debug(f"User configuration file found: {config_path}")
config = yaml.safe_load(fp)
config = yaml.safe_load(os.path.expandvars(fp.read()))
except FileNotFoundError:
_logger.debug(f"User configuration file not exist.")
return config
Expand Down
60 changes: 60 additions & 0 deletions packages/kestrel_core/tests/test_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import kestrel.config as cfg
import os


def test_env_vars_in_config():

test_config = """---
credentials:
username: $TEST_USER
password: $TEST_PASSWORD
"""
os.environ["TEST_USER"] = "test-user"
os.environ["TEST_PASSWORD"] = "test-password"
os.environ["KESTREL_CONFIG"] = os.path.join(os.sep, "tmp", "config.yaml")

with open(os.getenv("KESTREL_CONFIG"), "w") as fp:
fp.write(test_config)
config = cfg.load_config()
assert config["credentials"]["username"] == "test-user"
assert config["credentials"]["password"] == "test-password"


def test_env_vars_in_config_overwrite():

test_config = """---
credentials:
username: ${TEST_USER}
password: ${TEST_PASSWORD}
debug:
cache_directory_prefix: $KESTREL_CACHE_DIRECTORY_PREFIX
"""
os.environ["TEST_USER"] = "test-user"
os.environ["TEST_PASSWORD"] = "test-password"
os.environ["KESTREL_CONFIG"] = os.path.join(os.sep, "tmp", "config.yaml")
os.environ["KESTREL_CACHE_DIRECTORY_PREFIX"] = "Kestrel2.0-"
with open(os.getenv("KESTREL_CONFIG"), "w") as fp:
fp.write(test_config)
config = cfg.load_config()
assert config["credentials"]["username"] == "test-user"
assert config["credentials"]["password"] == "test-password"
assert config["debug"]["cache_directory_prefix"] == "Kestrel2.0-"

def test_empty_env_var_in_config():
test_config = """---
credentials:
username: ${TEST_USER}
password: ${TEST_PASSWORD}
debug:
cache_directory_prefix: $I_DONT_EXIST
"""
os.environ["TEST_USER"] = "test-user"
os.environ["TEST_PASSWORD"] = "test-password"
os.environ["KESTREL_CONFIG"] = os.path.join(os.sep, "tmp", "config.yaml")
os.environ["KESTREL_CACHE_DIRECTORY_PREFIX"] = "Kestrel2.0-"
with open(os.getenv("KESTREL_CONFIG"), "w") as fp:
fp.write(test_config)
config = cfg.load_config()
assert config["credentials"]["username"] == "test-user"
assert config["credentials"]["password"] == "test-password"
assert config["debug"]["cache_directory_prefix"] == "$I_DONT_EXIST"

0 comments on commit 1b47d2e

Please sign in to comment.