Source code for runway.cfngin.lookups.handlers.envvar

"""Environment variable lookup."""

# pyright: reportIncompatibleMethodOverride=none
import logging
import os
from typing import Any

from typing_extensions import Final, Literal

from ....lookups.handlers.base import LookupHandler
from ...utils import read_value_from_path

LOGGER = logging.getLogger(__name__)


[docs]class EnvvarLookup(LookupHandler): """Environment variable lookup.""" DEPRECATION_MSG = "envvar Lookup has been deprecated; use the env lookup instead" TYPE_NAME: Final[Literal["envvar"]] = "envvar" """Name that the Lookup is registered as."""
[docs] @classmethod def handle(cls, value: str, **_: Any) -> str: # pylint: disable=arguments-differ """Retrieve an environment variable. Args: value: Parameter(s) given to this lookup. Example: :: # With CFNgin we would reference the environment variable like this: conf_key: ${envvar ENV_VAR_NAME} You can optionally store the value in a file, ie:: $ cat envvar_value.txt ENV_VAR_NAME and reference it within CFNgin (NOTE: the path should be relative to the CFNgin config file):: conf_key: ${envvar file://envvar_value.txt} # Both of the above would resolve to conf_key: ENV_VALUE """ LOGGER.warning("${envvar %s}: %s: ${env %s}", value, cls.DEPRECATION_MSG, value) value = read_value_from_path(value) try: return os.environ[value] except KeyError as exc: raise ValueError(f'EnvVar "{value}" does not exist') from exc