1use std::collections::HashSet;23use anyhow::Result;4use clap::Clap;5use log::info;67use crate::{8 db::{9 secret::{list_secrets, SecretDb},10 Db, DbData,11 },12 host::FleetOpts,13};1415#[derive(Clap)]16pub struct GenerateSecrets {17 #[clap(flatten)]18 fleet_opts: FleetOpts,1920 21 #[clap(long)]22 cleanup: bool,23}2425impl GenerateSecrets {26 pub fn run(self) -> Result<()> {27 let db = Db::new(".fleet")?;28 let mut secrets = SecretDb::open(&db)?;2930 let defined_secrets = list_secrets()?;31 for (secret, data) in defined_secrets.iter() {32 33 secrets.ensure_generated(&self.fleet_opts, secret, data)?;34 }35 let key_names = defined_secrets36 .keys()37 .filter(|s| !secrets.has_secret(s))38 .cloned()39 .collect::<HashSet<_>>();40 if !key_names.is_empty() {41 if self.cleanup {42 info!("Removed orphan secrets:");43 } else {44 info!("Orphan secrets found, run with --cleanup to remove them from db:");45 }46 for key in key_names {47 info!("- {}", key);48 if self.cleanup {49 secrets.remove_secret(&key)50 }51 }52 }5354 Ok(())55 }56}