diff --git a/tox_docker/config.py b/tox_docker/config.py index 6ec0118..d3bd5f4 100644 --- a/tox_docker/config.py +++ b/tox_docker/config.py @@ -101,6 +101,19 @@ def __repr__(self) -> str: return repr(str(self)) +class ContainerVar: + def __init__(self, config_line: str) -> None: + if not ENV_VAR.match(config_line): + raise ValueError(f"{config_line!r} is not a valid environment variable") + self.container_var = config_line + + def __str__(self) -> str: + return self.container_var + + def __repr__(self) -> str: + return repr(str(self)) + + class Link: def __init__(self, config_line: str) -> None: target, sep, alias = config_line.partition(":") @@ -155,6 +168,7 @@ def __init__( healthcheck_retries: Optional[int] = None, expose: Optional[Collection[ExposedPort]] = None, host_var: Optional[HostVar] = None, + container_var: Optional[ContainerVar] = None, links: Optional[Collection[Link]] = None, volumes: Optional[Collection[Volume]] = None, ) -> None: @@ -167,6 +181,7 @@ def __init__( self.environment: Mapping[str, str] = environment or {} self.expose: Collection[ExposedPort] = expose or [] self.host_var = str(host_var) if host_var else "" + self.container_var = str(container_var) if container_var else "" self.links: Collection[Link] = links or [] self.mounts: Collection[Mount] = [v.docker_mount for v in volumes or ()] @@ -234,6 +249,12 @@ def register_config(self) -> None: default=None, desc="environment variable to pass hostname or IP of container to testenv", ) + self.add_config( + keys=["container_var"], + of_type=Optional[ContainerVar], + default=None, + desc="environment variable to pass the name of the container to testenv", + ) self.add_config( keys=["links"], of_type=List[Link], diff --git a/tox_docker/plugin.py b/tox_docker/plugin.py index b6e38c4..d7e84f1 100644 --- a/tox_docker/plugin.py +++ b/tox_docker/plugin.py @@ -83,6 +83,13 @@ def get_host_env_var(container_config: ContainerConfig) -> str: return escape_env_var(f"{container_config.name}_HOST") +def get_container_env_var(container_config: ContainerConfig) -> str: + if container_config.container_var: + return container_config.container_var + + return escape_env_var(f"{container_config.name}_CONTAINER") + + def get_env_vars( container_config: ContainerConfig, container: Container ) -> Mapping[str, str]: @@ -102,7 +109,8 @@ def get_env_vars( gateway_ip = get_gateway_ip(container) env_var = get_host_env_var(container_config) env[env_var] = gateway_ip - + env_var = get_container_env_var(container_config) + env[env_var] = container_config.runas_name return env