From 4b60eb8c680baf01b298661c2a7389d8eb4105a2 Mon Sep 17 00:00:00 2001 From: Michael Schilonka Date: Tue, 9 Aug 2022 22:38:25 +0200 Subject: [PATCH 1/3] feat(client): fallback 'gefyra run' namespace from kubeconfig --- client/gefyra/__main__.py | 1 - client/gefyra/api/run.py | 13 +++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/client/gefyra/__main__.py b/client/gefyra/__main__.py index d9b371c8..2539cfa5 100644 --- a/client/gefyra/__main__.py +++ b/client/gefyra/__main__.py @@ -80,7 +80,6 @@ "-n", "--namespace", help="the namespace for this container to run in", - default="default", ) run_parser.add_argument( "--env", diff --git a/client/gefyra/api/run.py b/client/gefyra/api/run.py index cbdb220e..e173d90c 100644 --- a/client/gefyra/api/run.py +++ b/client/gefyra/api/run.py @@ -68,7 +68,7 @@ def run( ports: dict = None, detach: bool = True, auto_remove: bool = True, - namespace: str = "default", + namespace: str = None, env: list = None, env_from: str = None, config=default_configuration, @@ -80,6 +80,15 @@ def run( from gefyra.local.cargo import probe_wireguard_connection from docker.errors import APIError + # #125: Fallback to namespace in kube config + if namespace is None: + from kubernetes.config import kube_config + _, active_context = kube_config.list_kube_config_contexts() + namespace = active_context["context"].get("namespace") or "default" + ns_source = "kubeconfig" + else: + ns_source = "--namespace argument" + dns_search = f"{namespace}.svc.cluster.local" config = set_gefyra_network_from_cargo(config) # @@ -146,7 +155,7 @@ def run( logger.info( f"Container image '{', '.join(container.image.tags)}' started with name '{container.name}' in " - f"Kubernetes namespace '{namespace}'" + f"Kubernetes namespace '{namespace}' (from {ns_source})" ) if detach: return True From 6d995560945c043e28bf96d15a858e73203cae91 Mon Sep 17 00:00:00 2001 From: Michael Schilonka Date: Tue, 9 Aug 2022 22:42:12 +0200 Subject: [PATCH 2/3] fix(client): code styling --- client/gefyra/api/run.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/gefyra/api/run.py b/client/gefyra/api/run.py index e173d90c..c6e7eda7 100644 --- a/client/gefyra/api/run.py +++ b/client/gefyra/api/run.py @@ -83,6 +83,7 @@ def run( # #125: Fallback to namespace in kube config if namespace is None: from kubernetes.config import kube_config + _, active_context = kube_config.list_kube_config_contexts() namespace = active_context["context"].get("namespace") or "default" ns_source = "kubeconfig" From e25228648245645a74102926220cd19fbf5e5cf0 Mon Sep 17 00:00:00 2001 From: Michael Schilonka Date: Wed, 10 Aug 2022 09:48:03 +0200 Subject: [PATCH 3/3] feat(client): add tests for namespace retrieval --- .github/workflows/python-tester.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/python-tester.yaml b/.github/workflows/python-tester.yaml index 85bea0e1..b37042eb 100644 --- a/.github/workflows/python-tester.yaml +++ b/.github/workflows/python-tester.yaml @@ -113,6 +113,22 @@ jobs: test $? -eq 0 curl localhost:8000 test $? -eq 0 + - name: Run gefyra run with no given namespace and no fallback (uses default) + working-directory: ./client + run: | + poetry run coverage run -a -m gefyra run -i pyserver -N mypyserver1 + test $? -eq 0 + test $(docker inspect mypyserver1 --format {{.HostConfig.DnsSearch}}) == [default.svc.cluster.local] + docker kill mypyserver1 + - name: Run gefyra run with default namespace from kubeconfig (uses 'fancy') + working-directory: ./client + run: | + kubectl config set-context --current --namespace=fancy + poetry run coverage run -a -m gefyra run -i pyserver -N mypyserver2 + test $? -eq 0 + test $(docker inspect mypyserver2 --format {{.HostConfig.DnsSearch}}) == [fancy.svc.cluster.local] + kubectl config set-context --current --namespace=default + docker kill mypyserver2 - name: Run gefyra bridge with invalid deployment working-directory: ./client shell: bash --noprofile --norc -o pipefail {0}