@@ -6,7 +6,7 @@ use crate::k8s::dynamic_object::TypeMetaNamespaced;
66use crate :: k8s:: utils:: { get_namespace, get_type_meta} ;
77use either:: Either ;
88use k8s_openapi:: api:: apps:: v1:: { DaemonSet , Deployment , StatefulSet } ;
9- use k8s_openapi:: api:: core:: v1:: ConfigMap ;
9+ use k8s_openapi:: api:: core:: v1:: { ConfigMap , Secret } ;
1010use k8s_openapi:: apimachinery:: pkg:: apis:: meta:: v1:: { APIResourceList , ObjectMeta } ;
1111use kube:: api:: ObjectList ;
1212use kube:: api:: entry:: Entry ;
@@ -157,6 +157,17 @@ impl SyncK8sClient {
157157 . block_on ( self . async_client . get_configmap_key ( name, namespace, key) )
158158 }
159159
160+ // Gets the decoded secret key assuming it contains a String.
161+ pub fn get_secret_key (
162+ & self ,
163+ name : & str ,
164+ namespace : & str ,
165+ key : & str ,
166+ ) -> Result < Option < String > , K8sError > {
167+ self . runtime
168+ . block_on ( self . async_client . get_secret_key ( name, namespace, key) )
169+ }
170+
160171 pub fn set_configmap_key (
161172 & self ,
162173 name : & str ,
@@ -256,6 +267,35 @@ impl AsyncK8sClient {
256267 Ok ( list)
257268 }
258269
270+ /// Gets the decoded secret key assuming it contains a String.
271+ pub async fn get_secret_key (
272+ & self ,
273+ name : & str ,
274+ namespace : & str ,
275+ key : & str ,
276+ ) -> Result < Option < String > , K8sError > {
277+ let secret_client = Api :: < Secret > :: namespaced ( self . client . clone ( ) , namespace) ;
278+
279+ let Some ( secret) = secret_client. get_opt ( name) . await ? else {
280+ debug ! ( "Secret {}:{} not found" , namespace, name) ;
281+ return Ok ( None ) ;
282+ } ;
283+
284+ let Some ( data) = secret. data else {
285+ debug ! ( "Secret {}:{} missing data" , namespace, name) ;
286+ return Ok ( None ) ;
287+ } ;
288+
289+ let Some ( value) = data. get ( key) else {
290+ debug ! ( "Secret {}:{} missing key {}" , namespace, name, key) ;
291+ return Ok ( None ) ;
292+ } ;
293+
294+ let v = std:: str:: from_utf8 ( & value. 0 )
295+ . map_err ( |e| K8sError :: Generic ( format ! ( "decoding secret key: {}" , e) ) ) ?;
296+ Ok ( Some ( v. to_string ( ) ) )
297+ }
298+
259299 pub async fn delete_configmap_collection (
260300 & self ,
261301 namespace : & str ,
@@ -276,20 +316,22 @@ impl AsyncK8sClient {
276316 let cm_client: Api < ConfigMap > =
277317 Api :: < ConfigMap > :: namespaced ( self . client . clone ( ) , namespace) ;
278318
279- if let Some ( cm) = cm_client. get_opt ( name) . await ? {
280- if let Some ( data) = cm. data {
281- if let Some ( key) = data. get ( key) {
282- return Ok ( Some ( key. clone ( ) ) ) ;
283- }
284- debug ! ( "ConfigMap {} missing key {}" , name, key)
285- } else {
286- debug ! ( "ConfigMap {} missing data" , name)
287- }
288- } else {
289- debug ! ( "ConfigMap {} not found" , name)
290- }
319+ let Some ( cm) = cm_client. get_opt ( name) . await ? else {
320+ debug ! ( "ConfigMap {}:{} not found" , namespace, name) ;
321+ return Ok ( None ) ;
322+ } ;
323+
324+ let Some ( data) = cm. data else {
325+ debug ! ( "ConfigMap {}:{} missing data" , namespace, name) ;
326+ return Ok ( None ) ;
327+ } ;
328+
329+ let Some ( value) = data. get ( key) else {
330+ debug ! ( "ConfigMap {}:{} missing key {}" , namespace, name, key) ;
331+ return Ok ( None ) ;
332+ } ;
291333
292- Ok ( None )
334+ Ok ( Some ( value . clone ( ) ) )
293335 }
294336
295337 pub async fn set_configmap_key (
0 commit comments