|
21 | 21 | import httpx_ws |
22 | 22 | from cachetools import TTLCache # type: ignore |
23 | 23 | from cryptography import x509 |
| 24 | +from packaging.version import InvalidVersion |
24 | 25 | from packaging.version import parse as parse_version |
25 | 26 |
|
26 | 27 | from ._auth import KubeAuth |
@@ -271,18 +272,32 @@ async def async_version(self) -> dict: |
271 | 272 |
|
272 | 273 | async def _check_version(self) -> None: |
273 | 274 | version = await self.async_version() |
| 275 | + git_version = version["gitVersion"] |
| 276 | + |
| 277 | + supported_message = ( |
| 278 | + f"Supported versions for kr8s {__version__} are " |
| 279 | + f"{KUBERNETES_MINIMUM_SUPPORTED_VERSION}" |
| 280 | + " to " |
| 281 | + f"{KUBERNETES_MAXIMUM_SUPPORTED_VERSION}." |
| 282 | + ) |
| 283 | + |
| 284 | + try: |
| 285 | + # Remove variant suffix if present before parsing, e.g v1.32.9-eks-113cf36 -> v1.32.9 |
| 286 | + version = parse_version(git_version.split("-")[0]) |
| 287 | + except InvalidVersion: |
| 288 | + warnings.warn( |
| 289 | + f"Unable to parse Kubernetes version {git_version}. {supported_message}", |
| 290 | + UserWarning, |
| 291 | + stacklevel=2, |
| 292 | + ) |
| 293 | + return |
| 294 | + |
274 | 295 | if ( |
275 | | - parse_version(version["gitVersion"]) < KUBERNETES_MINIMUM_SUPPORTED_VERSION |
276 | | - or parse_version(version["gitVersion"]) |
277 | | - > KUBERNETES_MAXIMUM_SUPPORTED_VERSION |
| 296 | + version < KUBERNETES_MINIMUM_SUPPORTED_VERSION |
| 297 | + or version > KUBERNETES_MAXIMUM_SUPPORTED_VERSION |
278 | 298 | ): |
279 | 299 | warnings.warn( |
280 | | - f"Kubernetes version {version['gitVersion']} is not supported. " |
281 | | - f"Supported versions for kr8s {__version__} are " |
282 | | - f"{KUBERNETES_MINIMUM_SUPPORTED_VERSION}" |
283 | | - f" to " |
284 | | - f"{KUBERNETES_MAXIMUM_SUPPORTED_VERSION}" |
285 | | - ".", |
| 300 | + f"Kubernetes version {git_version} is not supported. {supported_message}", |
286 | 301 | UserWarning, |
287 | 302 | stacklevel=2, |
288 | 303 | ) |
@@ -711,8 +726,6 @@ async def create(self, resources: list[APIObject]): |
711 | 726 |
|
712 | 727 | @property |
713 | 728 | def __version__(self) -> str: |
714 | | - from . import __version__ |
715 | | - |
716 | 729 | return f"kr8s/{__version__}" |
717 | 730 |
|
718 | 731 | @property |
|
0 commit comments