git.delta.rocks / fleet / refs/commits / 35b93190d1f0

difftreelog

feat use files for host keys

Yaroslav Bolyukin2021-03-09parent: #f89d040.patch.diff

1 file changed

modifiedsrc/cmds/fetch_keys.rsdiffbeforeafterboth
before · src/cmds/fetch_keys.rs
1use crate::db::{2	keys::{list_hosts, KeyDb},3	Db, DbData,4};5use anyhow::Result;6use clap::Clap;7use log::info;89#[derive(Clap)]10pub struct FetchKeys {11	/// Fetch if already exists the following hosts12	#[clap(short = 'f', long)]13	force_hosts: Vec<String>,14	/// If true - remove orphaned keys15	#[clap(long)]16	cleanup: bool,17}1819impl FetchKeys {20	pub fn run(self) -> Result<()> {21		let db = Db::new(".fleet")?;22		let hosts = list_hosts()?;23		let mut keys = KeyDb::open(&db)?;24		for host in hosts.iter() {25			let force = self.force_hosts.contains(&host);26			keys.ensure_key_loaded(host, force)?;27		}28		let orphans: Vec<_> = hosts.iter().filter(|h| !keys.has_key(h)).cloned().collect();29		if !orphans.is_empty() {30			if self.cleanup {31				info!("Removed orphan host keys:");32			} else {33				info!("Orphan host keys found, run with --cleanup to remove them from db:");34			}35			for key in orphans {36				info!("- {}", key);37				if self.cleanup {38					keys.remove_key(&key)39				}40			}41		}42		Ok(())43	}44}
after · src/cmds/fetch_keys.rs
1use crate::host::FleetOpts;2use anyhow::Result;3use clap::Clap;4use log::{info, warn};56#[derive(Clap)]7pub struct FetchKeys {8	#[clap(flatten)]9	fleet_opts: FleetOpts,1011	/// If true - remove orphaned keys12	#[clap(long)]13	cleanup: bool,14}1516impl FetchKeys {17	pub fn run(self) -> Result<()> {18		let fleet = self.fleet_opts.build()?;19		let hosts = fleet.list_hosts()?;20		for host in hosts.iter() {21			if host.skip() {22				warn!("Skipped host {}", host.hostname);23				continue;24			}25			host.key()?;26		}27		let orphans: Vec<_> = fleet.list_orphaned_keys()?;28		if !orphans.is_empty() {29			if self.cleanup {30				info!("Removed orphan host keys:");31			} else {32				info!("Orphan host keys found, run with --cleanup to remove them from db:");33			}34			for (name, path) in orphans {35				info!("- {}", name);36				if self.cleanup {37					std::fs::remove_file(path)?;38				}39			}40		}41		Ok(())42	}43}