controller/
configmap.rs

1use crate::Error;
2use k8s_openapi::api::core::v1::ConfigMap;
3use kube::{
4    api::{Api, ObjectMeta, Patch, PatchParams, PostParams},
5    Client,
6};
7use std::collections::BTreeMap;
8
9use tracing::{debug, error, info, warn};
10
11
12pub async fn create_configmap_ifnotexist(
13    client: Client,
14    namespace: &str,
15    cm_name: &str,
16) -> Result<(), Error> {
17    let cm_api: Api<ConfigMap> = Api::namespaced(client, namespace);
18
19    match cm_api.get(cm_name).await {
20        Ok(o) => {
21            debug!("Configmap {} already exists", o.metadata.name.unwrap());
22        }
23        Err(e) => {
24            warn!("{e}  -- creating configmap");
25            create_configmap(cm_api, cm_name, namespace).await?;
26        }
27    };
28    Ok(())
29}
30
31pub async fn create_configmap(
32    cm_api: Api<ConfigMap>,
33    cm_name: &str,
34    pg_postmaster: &str,
35) -> Result<(), Error> {
36    let cm = ConfigMap {
37        metadata: ObjectMeta {
38            name: Some(cm_name.to_string()),
39            namespace: Some(pg_postmaster.to_owned()),
40            ..Default::default()
41        },
42        ..Default::default()
43    };
44
45    let pp = PostParams::default();
46    match cm_api.create(&pp, &cm).await {
47        Ok(o) => {
48            info!("Created empty configmap: {}", o.metadata.name.unwrap());
49        }
50        Err(e) => {
51            error!("Failed to create empty configmap: {}", e);
52        }
53    };
54    Ok(())
55}
56
57pub async fn set_configmap(
58    client: Client,
59    namespace: &str,
60    cm_name: &str,
61    data: BTreeMap<String, String>,
62) -> Result<(), Error> {
63    let cm_api: Api<ConfigMap> = Api::namespaced(client, namespace);
64    let cm = ConfigMap {
65        metadata: ObjectMeta {
66            name: Some(cm_name.to_string()),
67            ..Default::default()
68        },
69        data: Some(data),
70        ..Default::default()
71    };
72
73    let patch_params = PatchParams::apply("cntrlr");
74    let patch = Patch::Apply(&cm);
75
76    match cm_api.patch(cm_name, &patch_params, &patch).await {
77        Ok(o) => {
78            debug!("Set configmap: {}", o.metadata.name.unwrap());
79        }
80        Err(e) => {
81            error!("Failed to set configmap: {}", e);
82        }
83    };
84    Ok(())
85}