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}