kubelet/volume/
secret.rs

1use std::path::PathBuf;
2
3use k8s_openapi::api::core::v1::{KeyToPath, Secret};
4use k8s_openapi::ByteString;
5
6use super::*;
7
8pub(crate) async fn populate(
9    secret: Secret,
10    path: &PathBuf,
11    items: &Option<Vec<KeyToPath>>,
12) -> anyhow::Result<VolumeType> {
13    tokio::fs::create_dir_all(path).await?;
14    let data = secret.data.unwrap_or_default();
15    let data = data.into_iter().map(|(key, ByteString(data))| async move {
16        match mount_setting_for(&key, items) {
17            ItemMount::MountAt(mount_path) => {
18                let file_path = path.join(mount_path);
19                tokio::fs::write(file_path, &data).await
20            }
21            ItemMount::DoNotMount => Ok(()),
22        }
23    });
24    futures::future::join_all(data)
25        .await
26        .into_iter()
27        .collect::<tokio::io::Result<_>>()?;
28
29    Ok(VolumeType::Secret)
30}