Skip to content

Commit 8a92bfb

Browse files
Make version checking more flexible (#686)
1 parent 374d20c commit 8a92bfb

File tree

2 files changed

+37
-14
lines changed

2 files changed

+37
-14
lines changed

kr8s/_api.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import httpx_ws
2222
from cachetools import TTLCache # type: ignore
2323
from cryptography import x509
24+
from packaging.version import InvalidVersion
2425
from packaging.version import parse as parse_version
2526

2627
from ._auth import KubeAuth
@@ -271,18 +272,32 @@ async def async_version(self) -> dict:
271272

272273
async def _check_version(self) -> None:
273274
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+
274295
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
278298
):
279299
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}",
286301
UserWarning,
287302
stacklevel=2,
288303
)
@@ -711,8 +726,6 @@ async def create(self, resources: list[APIObject]):
711726

712727
@property
713728
def __version__(self) -> str:
714-
from . import __version__
715-
716729
return f"kr8s/{__version__}"
717730

718731
@property

kr8s/tests/test_api.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,11 +513,21 @@ def test_create_sync(example_pod_spec, example_service_spec):
513513
service.delete()
514514

515515

516-
async def test_bad_kubernetes_version():
516+
@pytest.mark.parametrize(
517+
"version",
518+
[
519+
"1.27.0",
520+
"v1.27.0",
521+
"1.27.0-eks-113cf36",
522+
"v1.27.0-eks-113cf36",
523+
"asdkjhaskdjhasd",
524+
],
525+
)
526+
async def test_bad_kubernetes_version(version):
517527
api = await kr8s.asyncio.api()
518528
keep = api.async_version
519-
api.async_version = AsyncMock(return_value={"gitVersion": "1.27.0"})
520-
with pytest.warns(UserWarning):
529+
api.async_version = AsyncMock(return_value={"gitVersion": version})
530+
with pytest.warns(UserWarning, match=version):
521531
await api._check_version()
522532
api.async_version = keep
523533

0 commit comments

Comments
 (0)