use super::*;
#[derive(Clone, Debug, Args)]
pub struct Get {
#[command(flatten)]
params: ShowParams,
#[arg(long, conflicts_with = "regular")]
raw: Option<String>,
#[arg(group = "regular", long)]
subresource: Option<String>,
#[arg(group = "regular", required = true)]
resources: Option<Vec<String>>,
}
impl Get {
pub async fn exec(&self, context: &Context) -> RkResult<()> {
let kubeapi = context.kubeapi();
if let Some(raw) = self.raw.as_deref() {
let name = raw.strip_prefix("/").unwrap_or(raw);
let text = kubeapi.raw_get(name).await?;
println!("{text}");
} else {
let resources = self.resources(kubeapi)?;
let mut params = self.params;
params.show_kind |= resources.len() > 1;
let namespace = kubeapi.show_namespace();
for resource in resources {
let data = resource.get(kubeapi).await?;
let output = context.output_deprecated();
println!("{}", data.output(namespace, params, output));
}
}
Ok(())
}
fn resources(&self, kubeapi: &Kubeapi) -> kube::Result<Vec<ResourceArg>> {
let resources = self.resources.as_deref().unwrap_or_default();
ResourceArg::from_strings(resources, kubeapi)
.inspect(|resources| info!(args=?self.resources, ?resources))
.map_err(|_err| kube::Error::LinesCodecMaxLineLengthExceeded)
}
}