1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
mod aws;
mod cli;
pub mod config;
pub mod credentials;
mod exec;
pub mod exit;
mod providers;
mod saml;
mod utils;
use crate::cli::{CliAction, CliSubAction};
use crate::config::{aws::AwsConfig, CrowbarConfig};
use crate::credentials::aws as CredentialsProvider;
use crate::exec::Executor;
use anyhow::Result;
use env_logger::{Builder, WriteStyle};
use log::info;
pub fn run() -> Result<()> {
let cli = cli::config()?;
let mut logger = Builder::new();
logger
.filter_level(cli.log_level.into())
.filter_module("aws_smithy_http_tower", log::LevelFilter::Off)
.filter_module("aws_config", log::LevelFilter::Off)
.filter_module("aws_http", log::LevelFilter::Off)
.write_style(WriteStyle::Never)
.init();
let force_new_credentials = cli.force;
let cli_action = cli.action;
let location = cli.location;
let crowbar_config = CrowbarConfig::with_location(location).read()?;
let aws_config = AwsConfig::new()?;
let executor = Executor::default();
match cli_action {
CliAction::Profiles { action } => {
match action {
CliSubAction::Add { profile } => {
crowbar_config.add_profile(&profile)?.write()?;
aws_config.add_profile(&profile)?.write()?;
println!("Profile {} added successfully!", profile.name)
}
CliSubAction::Delete { profile_name } => {
crowbar_config.delete_profile(&profile_name)?.write()?;
aws_config.delete_profile(&profile_name)?.write()?;
println!("Profile {} deleted successfully", profile_name)
}
CliSubAction::List {} => crowbar_config.list_profiles()?,
}
Ok(())
}
CliAction::Exec { command, profile } => {
let credentials = CredentialsProvider::fetch_aws_credentials(
profile,
crowbar_config,
force_new_credentials,
)?;
let exec = executor.set_command(command).set_credentials(credentials);
let _exit = exec.run()?.wait();
Ok(())
}
CliAction::Creds { profile, print } => {
let aws_credentials = CredentialsProvider::fetch_aws_credentials(
profile,
crowbar_config,
force_new_credentials,
)?;
if print {
println!("{}", aws_credentials);
} else {
info!("Please run with the -p switch to print the credentials to stdout")
}
Ok(())
}
}
}