use super::*;
#[derive(Clone, Debug, Args)]
#[command(arg_required_else_help(true), verbatim_doc_comment)]
pub struct CreateGenericSecret {
name: String,
#[arg(long, value_parser = EnvFile::value_parser())]
from_env_file: Vec<EnvFile>,
#[arg(long, value_parser = File::value_parser())]
from_file: Vec<File>,
#[arg(long, value_parser = KeyValue::value_parser())]
from_literal: Vec<KeyValue<String>>,
}
impl CreateGenericSecret {
pub async fn secret(&self) -> kube::Result<corev1::Secret> {
let data = self
.all_inputs()
.map_err(|_err| kube::Error::LinesCodecMaxLineLengthExceeded)?
.map(|kv| kv.into_pair());
let secret = corev1::Secret::opaque(&self.name).data(data);
Ok(secret)
}
fn all_inputs(&self) -> io::Result<impl Iterator<Item = KeyValue<k8s::ByteString>>> {
let literal = self.literal();
let file = self.file()?;
let enf_file = self.env_file()?;
Ok(literal.chain(file).chain(enf_file))
}
fn env_file(&self) -> io::Result<impl Iterator<Item = KeyValue<k8s::ByteString>>> {
let items = self
.from_env_file
.iter()
.map(EnvFile::load)
.collect::<io::Result<Vec<_>>>()?
.into_iter()
.flatten()
.map(|kv| kv.byte_string());
Ok(items)
}
fn file(&self) -> io::Result<impl Iterator<Item = KeyValue<k8s::ByteString>>> {
let items = self
.from_file
.iter()
.map(|file| file.load())
.collect::<io::Result<Vec<_>>>()?
.into_iter()
.flatten()
.map(|kv| kv.byte_string());
Ok(items)
}
fn literal(&self) -> impl Iterator<Item = KeyValue<k8s::ByteString>> {
self.from_literal
.iter()
.cloned()
.map(KeyValue::<String>::byte_string)
}
}