From 450c89bad81d4dae6364035a542903584a8ac99e Mon Sep 17 00:00:00 2001 From: Jacob Tomlinson Date: Thu, 16 May 2024 09:44:05 +0100 Subject: [PATCH] Add kubectl-ng config current-context (#375) --- examples/kubectl-ng/kubectl_ng/_config.py | 20 +++++++++++++++++++ examples/kubectl-ng/kubectl_ng/cli.py | 12 ++++++++--- .../kubectl_ng/tests/test_kng_config.py | 15 ++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 examples/kubectl-ng/kubectl_ng/_config.py create mode 100644 examples/kubectl-ng/kubectl_ng/tests/test_kng_config.py diff --git a/examples/kubectl-ng/kubectl_ng/_config.py b/examples/kubectl-ng/kubectl_ng/_config.py new file mode 100644 index 00000000..9be2ae56 --- /dev/null +++ b/examples/kubectl-ng/kubectl_ng/_config.py @@ -0,0 +1,20 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024, Kr8s Developers (See LICENSE for list) +# SPDX-License-Identifier: BSD 3-Clause License +import typer + +import kr8s + +config = typer.Typer( + no_args_is_help=True, + name="config", + help="Modify kubeconfig files.", +) + + +@config.command(name="current-context", help="Display the current-context") +def config_current_context(): + """Display the current context.""" + try: + typer.echo(kr8s.api().auth.kubeconfig.current_context) + except KeyError: + typer.echo("error: current-context is not set") diff --git a/examples/kubectl-ng/kubectl_ng/cli.py b/examples/kubectl-ng/kubectl_ng/cli.py index 3ea06ebb..507aba9a 100644 --- a/examples/kubectl-ng/kubectl_ng/cli.py +++ b/examples/kubectl-ng/kubectl_ng/cli.py @@ -7,6 +7,7 @@ from ._api_resources import api_resources from ._api_versions import api_versions +from ._config import config from ._create import create from ._delete import delete from ._exec import kexec @@ -26,10 +27,14 @@ def wrapper(*args, **kwargs): def register(app, func, alias=None): if asyncio.iscoroutinefunction(func): func = _typer_async(func) - if alias is not None: - app.command(alias)(func) + if isinstance(func, typer.Typer): + assert alias, "Typer subcommand must have an alias." + app.add_typer(func, name=alias) else: - app.command()(func) + if alias is not None: + app.command(alias)(func) + else: + app.command()(func) app = typer.Typer(no_args_is_help=True) @@ -41,6 +46,7 @@ def register(app, func, alias=None): register(app, version) register(app, wait) register(app, kexec, "exec") +register(app, config, "config") def go(): diff --git a/examples/kubectl-ng/kubectl_ng/tests/test_kng_config.py b/examples/kubectl-ng/kubectl_ng/tests/test_kng_config.py new file mode 100644 index 00000000..1f7698b7 --- /dev/null +++ b/examples/kubectl-ng/kubectl_ng/tests/test_kng_config.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024, Kr8s Developers (See LICENSE for list) +# SPDX-License-Identifier: BSD 3-Clause License +from kubectl_ng.cli import app +from typer.testing import CliRunner + +import kr8s + +runner = CliRunner() + + +def test_create_and_delete(): + current_context = kr8s.api().auth.kubeconfig.current_context + result = runner.invoke(app, ["config", "current-context"]) + assert result.exit_code == 0 + assert current_context in result.stdout