@@ -118,30 +118,63 @@ def create_kubernetes_object(
118
118
return obj
119
119
120
120
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 :
128
122
current_context_name = kubeconfig_data .get ("current-context" )
129
123
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
+ )
137
134
138
135
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
140
154
141
155
context_entry ["context" ]["namespace" ] = namespace
142
156
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
145
178
146
179
147
180
def apply_kubernetes_yaml (yaml_file : str ) -> bool :
@@ -194,29 +227,6 @@ def delete_pod(
194
227
raise
195
228
196
229
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
-
220
230
def snapshot_bitcoin_datadir (
221
231
pod_name : str , chain : str , local_path : str = "./" , filters : list [str ] = None
222
232
) -> None :
0 commit comments