Skip to main content

rkubectl_app/cli/command/
configmap.rs

1use k8s::openapi::ByteString;
2
3use super::*;
4
5#[derive(Clone, Debug, Subcommand)]
6pub enum ConfigMap {
7    Show {
8        configmap: String,
9        data: Option<Vec<String>>,
10    },
11}
12
13impl ConfigMap {
14    pub async fn exec(&self, context: &Context) -> RkResult<()> {
15        match self {
16            Self::Show { configmap, data } => self.show(context, configmap, data.as_deref()).await,
17        }
18    }
19
20    async fn show(
21        &self,
22        context: &Context,
23        configmap: &str,
24        data: Option<&[String]>,
25    ) -> RkResult<()> {
26        let configmap = context.kubeapi().configmaps()?.get(configmap).await?;
27        let items = configmap
28            .binary_data
29            .unwrap_or_default()
30            .into_iter()
31            .filter(|(key, _)| data.is_none_or(|items| items.contains(key)))
32            .collect::<Vec<_>>();
33        decode_binary_items(items);
34
35        let items = configmap
36            .data
37            .unwrap_or_default()
38            .into_iter()
39            .filter(|(key, _)| data.is_none_or(|items| items.contains(key)))
40            .collect::<Vec<_>>();
41        if items.len() == 1 {
42            // context.ui().show(items[0].clone(), &params);
43            println!("{}", items[0].1);
44        } else {
45            context.show(items);
46            // decode_string_items(items);
47        }
48
49        Ok(())
50    }
51}
52
53fn _decode_string_items(items: Vec<(String, String)>) {
54    if items.len() == 1 {
55        println!("{}", items[0].1);
56        // context.ui().show(items[0], &params)
57    } else {
58        items
59            .into_iter()
60            .for_each(|(key, item)| println!("{key}: {item}"))
61    }
62}
63
64fn decode_binary_items(items: Vec<(String, ByteString)>) {
65    let single_item = items.len() == 1;
66    items
67        .into_iter()
68        // .map(|(key, value)| (key, String::from_utf8_lossy(&value.0)))
69        .for_each(|(key, value)| {
70            let item = String::from_utf8_lossy(&value.0);
71            if single_item {
72                println!("{item}")
73            } else {
74                println!("{key}: {item}")
75            }
76        });
77}