Skip to content

Commit 66d74b6

Browse files
committed
k8s: update namespace and context checking fns
1 parent b943c81 commit 66d74b6

File tree

1 file changed

+50
-40
lines changed

1 file changed

+50
-40
lines changed

src/warnet/k8s.py

Lines changed: 50 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -118,30 +118,63 @@ def create_kubernetes_object(
118118
return obj
119119

120120

121-
def set_context_namespace(namespace: str):
122-
"""
123-
Set the default kubeconfig context to the specified namespace.
124-
"""
125-
with open(KUBECONFIG) as file:
126-
kubeconfig_data = yaml.safe_load(file)
127-
121+
def get_context_entry(kubeconfig_data: dict) -> dict:
128122
current_context_name = kubeconfig_data.get("current-context")
129123
if not current_context_name:
130-
raise ValueError("No current context set in kubeconfig.")
131-
132-
context_entry = None
133-
for context in kubeconfig_data.get("contexts", []):
134-
if context["name"] == current_context_name:
135-
context_entry = context
136-
break
124+
raise K8sError(f"Could not determine current context from config data: {kubeconfig_data}")
125+
126+
context_entry = next(
127+
(
128+
ctx
129+
for ctx in kubeconfig_data.get("contexts", [])
130+
if ctx.get("name") == current_context_name
131+
),
132+
None,
133+
)
137134

138135
if not context_entry:
139-
raise ValueError(f"Context '{current_context_name}' not found in kubeconfig.")
136+
raise K8sError(f"Context '{current_context_name}' not found in kubeconfig.")
137+
138+
return context_entry
139+
140+
141+
def set_context_namespace(namespace: str) -> None:
142+
"""
143+
Set the namespace within the KUBECONFIG's current context
144+
"""
145+
try:
146+
kubeconfig_data = open_kubeconfig()
147+
except K8sError as e:
148+
raise K8sError(f"Could not open KUBECONFIG: {KUBECONFIG}") from e
149+
150+
try:
151+
context_entry = get_context_entry(kubeconfig_data)
152+
except K8sError as e:
153+
raise K8sError(f"Could not get context entry for {KUBECONFIG}") from e
140154

141155
context_entry["context"]["namespace"] = namespace
142156

143-
with open(KUBECONFIG, "w") as file:
144-
yaml.safe_dump(kubeconfig_data, file)
157+
try:
158+
write_kubeconfig(kubeconfig_data)
159+
except Exception as e:
160+
raise K8sError(f"Could not write to KUBECONFIG: {KUBECONFIG}") from e
161+
162+
163+
def get_default_namespace() -> str:
164+
try:
165+
kubeconfig_data = open_kubeconfig()
166+
except K8sError as e:
167+
raise K8sError(f"Could not open KUBECONFIG: {KUBECONFIG}") from e
168+
169+
try:
170+
context_entry = get_context_entry(kubeconfig_data)
171+
except K8sError as e:
172+
raise K8sError(f"Could not get context entry for {KUBECONFIG}") from e
173+
174+
# TODO: need to settle on Warnet's "default" namespace
175+
namespace = context_entry["context"].get("namespace", "warnet")
176+
177+
return namespace
145178

146179

147180
def apply_kubernetes_yaml(yaml_file: str) -> bool:
@@ -194,29 +227,6 @@ def delete_pod(
194227
raise
195228

196229

197-
def get_default_namespace() -> str:
198-
with open(KUBECONFIG) as file:
199-
kubeconfig_data = yaml.safe_load(file)
200-
201-
current_context_name = kubeconfig_data.get("current-context")
202-
if not current_context_name:
203-
raise ValueError("No current context set in kubeconfig.")
204-
205-
context_entry = None
206-
for context in kubeconfig_data.get("contexts", []):
207-
if context["name"] == current_context_name:
208-
context_entry = context
209-
break
210-
211-
if not context_entry:
212-
raise ValueError(f"Context '{current_context_name}' not found in kubeconfig.")
213-
214-
# TODO: need to setting on Warnet's "default" namespace
215-
namespace = context_entry["context"].get("namespace", "warnet")
216-
217-
return namespace
218-
219-
220230
def snapshot_bitcoin_datadir(
221231
pod_name: str, chain: str, local_path: str = "./", filters: list[str] = None
222232
) -> None:

0 commit comments

Comments
 (0)