rkubectl_app/cli/command/
configmap.rs1use 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 println!("{}", items[0].1);
44 } else {
45 context.show(items);
46 }
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 } 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 .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}