@@ -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
147180def 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-
220230def snapshot_bitcoin_datadir (
221231 pod_name : str , chain : str , local_path : str = "./" , filters : list [str ] = None
222232) -> None :
0 commit comments