git.delta.rocks / jrsonnet / refs/commits / 6ca3e00a2ff9

difftreelog

source

src/cmds/generate_secrets.rs1.1 KiBsourcehistory
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	/// If set - remove orphaned secrets21	#[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			//let keys = KeyDb::open(&db)?;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}