|
19 | 19 | from podman.domain.secrets import SecretsManager |
20 | 20 | from podman.domain.system import SystemManager |
21 | 21 | from podman.domain.volumes import VolumesManager |
| 22 | +from podman.errors.exceptions import PodmanConnectionError |
22 | 23 |
|
23 | 24 | logger = logging.getLogger("podman") |
24 | 25 |
|
@@ -114,27 +115,38 @@ def from_env( |
114 | 115 | Client used to communicate with a Podman service. |
115 | 116 |
|
116 | 117 | Raises: |
117 | | - ValueError when required environment variable is not set |
| 118 | + PodmanConnectionError: When connection to service fails or environment is invalid |
118 | 119 | """ |
119 | | - environment = environment or os.environ |
120 | | - credstore_env = credstore_env or {} |
121 | | - |
122 | | - if version == "auto": |
123 | | - version = None |
124 | | - |
125 | | - kwargs = { |
126 | | - 'version': version, |
127 | | - 'timeout': timeout, |
128 | | - 'tls': False, |
129 | | - 'credstore_env': credstore_env, |
130 | | - 'max_pool_size': max_pool_size, |
131 | | - } |
132 | | - |
133 | | - host = environment.get("CONTAINER_HOST") or environment.get("DOCKER_HOST") or None |
134 | | - if host is not None: |
135 | | - kwargs['base_url'] = host |
136 | | - |
137 | | - return PodmanClient(**kwargs) |
| 120 | + try: |
| 121 | + environment = environment or os.environ |
| 122 | + credstore_env = credstore_env or {} |
| 123 | + |
| 124 | + if version == "auto": |
| 125 | + version = None |
| 126 | + |
| 127 | + kwargs = { |
| 128 | + 'version': version, |
| 129 | + 'timeout': timeout, |
| 130 | + 'tls': False, |
| 131 | + 'credstore_env': credstore_env, |
| 132 | + 'max_pool_size': max_pool_size, |
| 133 | + } |
| 134 | + |
| 135 | + host = environment.get("CONTAINER_HOST") or environment.get("DOCKER_HOST") or None |
| 136 | + if host is not None: |
| 137 | + kwargs['base_url'] = host |
| 138 | + |
| 139 | + return PodmanClient(**kwargs) |
| 140 | + except Exception as exc: |
| 141 | + error_msg = "Failed to initialize Podman client from environment" |
| 142 | + if isinstance(exc, ValueError): |
| 143 | + error_msg = "Invalid environment configuration for Podman client" |
| 144 | + elif isinstance(exc, (ConnectionError, TimeoutError)): |
| 145 | + error_msg = "Failed to connect to Podman service" |
| 146 | + |
| 147 | + raise PodmanConnectionError( |
| 148 | + message=error_msg, environment=environment, host=host, original_error=exc |
| 149 | + ) from exc |
138 | 150 |
|
139 | 151 | @cached_property |
140 | 152 | def containers(self) -> ContainersManager: |
|
0 commit comments