@@ -101,54 +101,66 @@ async fn cluster_client(
101101 local_ns : & str ,
102102 client : Client ,
103103) -> crate :: Result < Client > {
104- let client = match cluster_ref {
105- None => client,
106- Some ( cluster_ref) => {
107- let secret_ns = cluster_ref
108- . kube_config
109- . secret_ref
110- . namespace
111- . as_deref ( )
112- . unwrap_or ( local_ns) ;
113- let secrets: Api < Secret > = Api :: namespaced ( client, secret_ns) ;
114- let secret_ref = & cluster_ref. kube_config . secret_ref ;
115- let sec = secrets. get ( & secret_ref. name ) . await ?;
116-
117- if secret_ns != local_ns {
118- verify_kubeconfig_secret_access ( local_ns, & sec) ?;
104+ let client =
105+ match cluster_ref {
106+ None => client,
107+ Some ( cluster_ref) => {
108+ let secret_ns = cluster_ref
109+ . kube_config
110+ . secret_ref
111+ . namespace
112+ . as_deref ( )
113+ . unwrap_or ( local_ns) ;
114+ let secrets: Api < Secret > = Api :: namespaced ( client, secret_ns) ;
115+ let secret_ref = & cluster_ref. kube_config . secret_ref ;
116+ let sec = secrets. get ( & secret_ref. name ) . await . map_err ( |e| {
117+ match secret_ns == local_ns {
118+ true => crate :: Error :: from ( e) ,
119+ false => {
120+ debug ! (
121+ "error accessing kubeconfig secret in remote namespace: {}" ,
122+ e
123+ ) ;
124+ UnauthorizedKubeconfigAccess ( )
125+ }
126+ }
127+ } ) ?;
128+
129+ if secret_ns != local_ns {
130+ verify_kubeconfig_secret_access ( local_ns, & sec) ?;
131+ }
132+
133+ let kube_config = kube:: config:: Kubeconfig :: from_yaml (
134+ std:: str:: from_utf8 (
135+ & sec. data
136+ . unwrap ( )
137+ . get ( & secret_ref. key )
138+ . ok_or_else ( || {
139+ Error :: MissingKeyError (
140+ secret_ref. key . clone ( ) ,
141+ secret_ref. name . clone ( ) ,
142+ secret_ns. to_string ( ) ,
143+ )
144+ } ) ?
145+ . 0 ,
146+ )
147+ . map_err ( Error :: KubeconfigUtf8Error ) ?,
148+ ) ?;
149+ let mut config =
150+ Config :: from_custom_kubeconfig ( kube_config, & Default :: default ( ) ) . await ?;
151+
152+ if let Some ( ref namespace) = cluster_ref. namespace {
153+ config. default_namespace = namespace. clone ( ) ;
154+ }
155+
156+ debug ! ( ?config. cluster_url, "connecting to remote cluster" ) ;
157+ let remote_client = kube:: Client :: try_from ( config) ?;
158+ let version = remote_client. apiserver_version ( ) . await ?;
159+ debug ! ( ?version, "remote cluster version" ) ;
160+
161+ remote_client
119162 }
120-
121- let kube_config = kube:: config:: Kubeconfig :: from_yaml (
122- std:: str:: from_utf8 (
123- & sec. data
124- . unwrap ( )
125- . get ( & secret_ref. key )
126- . ok_or_else ( || {
127- Error :: MissingKeyError (
128- secret_ref. key . clone ( ) ,
129- secret_ref. name . clone ( ) ,
130- secret_ns. to_string ( ) ,
131- )
132- } ) ?
133- . 0 ,
134- )
135- . map_err ( Error :: KubeconfigUtf8Error ) ?,
136- ) ?;
137- let mut config =
138- Config :: from_custom_kubeconfig ( kube_config, & Default :: default ( ) ) . await ?;
139-
140- if let Some ( ref namespace) = cluster_ref. namespace {
141- config. default_namespace = namespace. clone ( ) ;
142- }
143-
144- debug ! ( ?config. cluster_url, "connecting to remote cluster" ) ;
145- let remote_client = kube:: Client :: try_from ( config) ?;
146- let version = remote_client. apiserver_version ( ) . await ?;
147- debug ! ( ?version, "remote cluster version" ) ;
148-
149- remote_client
150- }
151- } ;
163+ } ;
152164 Ok ( client)
153165}
154166
0 commit comments