use anyhow::Result;
use clap::Parser;
use rnaapi::config::Settings;
use rnaapi::NaClient;
#[tokio::main]
async fn main() -> Result<()> {
let settings = Settings::new()?;
let mut mbpkgid: u32 = 0;
let mut zoneid: u32 = 0;
let args = SimpleArgs::parse();
if args.mbpkgid >= 1 {
mbpkgid = args.mbpkgid;
}
if args.zoneid >= 1 {
zoneid = args.zoneid;
}
let na_client = NaClient::new(settings.api_key, settings.api_url).await;
if mbpkgid > 0 {
let (srv, jobs, ipv4s, ipv6s, stat) = tokio::join!(
na_client.get_server(mbpkgid),
na_client.get_jobs(mbpkgid),
na_client.get_ipv4(mbpkgid),
na_client.get_ipv6(mbpkgid),
na_client.get_status(mbpkgid),
);
println!(
"Package: {}, fqdn: {}, mbpkgid: {}",
srv.clone().unwrap().domu_package,
srv.clone().unwrap().fqdn,
srv.clone().unwrap().mbpkgid
);
println!();
for job in jobs.unwrap() {
println!(
"Inserted: {}, Status: {}, command: {}",
job.ts_insert, job.status, job.command
);
}
println!();
for ipv4 in ipv4s.unwrap() {
println!(
"Reverse: {}, IP: {}, Gateway: {}",
ipv4.reverse, ipv4.ip, ipv4.gateway
);
}
println!();
for ipv6 in ipv6s.unwrap() {
println!(
"Reverse: {}, IP: {}, Gateway: {}",
ipv6.reverse, ipv6.ip, ipv6.gateway
);
}
println!();
println!("Status: {}", stat.unwrap().status);
} else if zoneid > 0 {
println!();
let zone = na_client.get_zone(zoneid).await?;
println!("Zone: {}", zone.name);
let soa = zone.soa.unwrap();
println!("SOA: {}", soa.primary);
let recs = zone.records.unwrap();
println!("1st Record: {}", recs[0].name);
let nsrecs = zone.ns.unwrap();
println!("1st NS: {}", nsrecs[0])
} else {
let (srvrs, locs, pkgs, imgs, zones, ssh_keys, deets, invoices) = tokio::join!(
na_client.get_servers(),
na_client.get_locations(),
na_client.get_packages(),
na_client.get_images(),
na_client.get_zones(),
na_client.get_ssh_keys(),
na_client.get_acct_details(),
na_client.get_acct_invoices()
);
for srvr in srvrs.unwrap() {
println!("fqdn: {}, mbpkgid: {}", srvr.fqdn, srvr.mbpkgid);
}
println!();
for loc in locs.unwrap() {
println!("Name: {}, Continent: {}", loc.name, loc.continent);
}
println!();
for pkg in pkgs.unwrap() {
println!("Name: {}, Continent: {}", pkg.name, pkg.city);
}
println!();
for img in imgs.unwrap() {
println!(
"ID: {}, Size: {}, Name: {}",
img.id,
img.size.unwrap_or("null".to_owned()),
img.os.unwrap_or("null".to_owned())
);
}
println!();
for zone in zones.unwrap() {
println!(
"ID: {}, Size: {}, Name: {}",
zone.id, zone.name, zone.zone_type
);
}
println!();
for sshkey in ssh_keys.unwrap() {
println!("Key: {}, Fingerprint: {}", sshkey.name, sshkey.fingerprint);
}
println!();
println!(
"FullName: {:?}, Address: {:?}, {:?} {:?} {:?}",
deets.clone().unwrap().fullname,
deets.clone().unwrap().address1,
deets.clone().unwrap().city,
deets.clone().unwrap().state,
deets.clone().unwrap().postcode
);
println!();
for invoice in invoices.unwrap().iter().take(3) {
println!("ID: {}, Status: {}", invoice.id, invoice.status);
}
}
Ok(())
}
#[derive(Parser, Debug)]
#[command(version, about)]
struct SimpleArgs {
#[arg(short, long, default_value_t = 0)]
mbpkgid: u32,
#[arg(short, long, conflicts_with = "mbpkgid", default_value_t = 0)]
zoneid: u32,
}