git.delta.rocks / jrsonnet / refs/commits / 8d4a7a16f575

difftreelog

source

cmds/fleet/src/main.rs1.6 KiBsourcehistory
1pub mod cmds;2pub mod command;3pub mod host;4pub mod keys;56mod fleetdata;78use std::io;910use anyhow::{anyhow, Result};11use structopt::clap::AppSettings::*;12use structopt::StructOpt;1314use cmds::{build_systems::BuildSystems, info::Info, secrets::Secrets};15use host::{Config, FleetOpts};16use tracing::{info, metadata::LevelFilter};17use tracing_subscriber::EnvFilter;1819#[derive(StructOpt)]20enum Opts {21	/// Prepare systems for deployments22	BuildSystems(BuildSystems),23	/// Secret management24	Secrets(Secrets),25	/// Config parsing26	Info(Info),27}2829#[derive(StructOpt)]30#[structopt(31	version = "1.0",32	author,33	global_setting(ColorAuto),34	global_setting(ColoredHelp)35)]36struct RootOpts {37	#[structopt(flatten)]38	fleet_opts: FleetOpts,39	#[structopt(subcommand)]40	command: Opts,41}4243async fn run_command(config: &Config, command: Opts) -> Result<()> {44	match command {45		Opts::BuildSystems(c) => c.run(config).await?,46		Opts::Secrets(s) => s.run(config).await?,47		Opts::Info(i) => i.run(config).await?,48	};49	Ok(())50}5152#[tokio::main]53async fn main() -> Result<()> {54	let filter = EnvFilter::from_default_env().add_directive(LevelFilter::INFO.into());55	tracing_subscriber::FmtSubscriber::builder()56		.with_env_filter(filter)57		.without_time()58		.with_target(false)59		.with_writer(|| {60			// eprintln!("Line");61			io::stderr()62		})63		.try_init()64		.map_err(|e| anyhow!("Failed to initialize logger: {}", e))?;6566	info!("Starting");67	let opts = RootOpts::from_args();68	let config = opts.fleet_opts.build()?;6970	match run_command(&config, opts.command).await {71		Ok(()) => {72			config.save()?;73			Ok(())74		}75		Err(e) => {76			let _ = config.save();77			Err(e)78		}79	}80}