greentic-deployer 0.4.8

Greentic pack deployer generating multi-cloud IaC + manifests
Documentation
use clap::Parser;

use greentic_deployer::{
    apply,
    config::{CliArgs, DeployerConfig},
};

#[tokio::main]
async fn main() {
    let cli = CliArgs::parse();
    match DeployerConfig::from_env_and_args(cli) {
        Ok(config) => {
            if !config.config_warnings.is_empty() {
                eprintln!("configuration warnings:");
                for warning in &config.config_warnings {
                    eprintln!("- {warning}");
                }
            }
            if config.explain_config || config.explain_config_json {
                if config.explain_config_json {
                    let payload = serde_json::json!({
                        "config": &config.greentic,
                        "provenance": &config.provenance,
                        "warnings": &config.config_warnings,
                    });
                    println!("{}", serde_json::to_string_pretty(&payload).unwrap());
                } else {
                    println!("greentic config (resolved):");
                    println!(
                        "{}",
                        serde_json::to_string_pretty(&config.greentic).unwrap()
                    );
                    println!("provenance: {:#?}", config.provenance);
                    if !config.config_warnings.is_empty() {
                        println!("warnings:");
                        for w in &config.config_warnings {
                            println!("- {w}");
                        }
                    }
                }
                return;
            }
            if let Err(err) = apply::run(config).await {
                eprintln!("error: {err}");
                std::process::exit(1);
            }
        }
        Err(err) => {
            eprintln!("configuration error: {err}");
            std::process::exit(1);
        }
    }
}