use vultr::VultrApi;
use vultr::VultrError;
use vultr::VultrFirewallGroupRuleIpType;
use vultr::VultrFirewallGroupRuleProtocol;
use vultr::VultrInstanceType;
use vultr::VultrOS;
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 3 {
println!("Call program with the following:");
println!("{} VULTR_API_KEY DOMAIN", args[0]);
std::process::exit(1);
}
let result = do_stuff(&args[1], &args[2]);
match result {
Ok(_) => {
println!("Finished sucessfully");
}
Err(e) => {
println!("Error: {:#?}", e);
}
}
}
fn do_stuff(api_key: &str, domain: &str) -> Result<(), VultrError> {
let api = VultrApi::new(api_key);
let account = api.get_account_info()?;
println!("ACCOUNT: {:?}", account);
let fw_groups = api.get_firewall_groups()?;
println!("FW GROUPS: {:?}", fw_groups);
let fw_group = api.create_firewall_group("JUHU")?;
println!("FW GROUP: {:?}", fw_group);
api.update_firewall_group(fw_group.id(), "JUHU2")?;
println!("FW GROUP updated");
let fw_group = api.get_firewall_group(fw_group.id())?;
println!("FW GROUP: {:?}", fw_group);
let fw_rule = api.create_firewall_group_rule(
fw_group.id(),
VultrFirewallGroupRuleIpType::V4,
VultrFirewallGroupRuleProtocol::TCP,
"0.0.0.0",
0,
Some(80),
Some(""),
Some("juhu"),
)?;
println!("FW GROUP RULE: {:?}", fw_rule);
let fw_rules = api.get_firewall_group_rules(fw_group.id())?;
println!("FW GROUP RULES: {:?}", fw_rules);
api.delete_firewall_group(fw_group.id())?;
println!("FW GROUP deleted");
let new_domain = api.create_dns_domain(domain, None, false)?;
println!("CREATED DOMAIN: {:?}", new_domain);
let old_domain = api.get_dns_domain(domain)?;
println!("GET DOMAIN: {:?}", old_domain);
let record = api.create_dns_domain_record(domain, "A", "www", "10.0.0.8", None, None)?;
println!("RECORD CREATED: {:?}", record);
let records = api.get_dns_domain_records(domain)?;
println!("RECORDS: {:?}", records);
let record = api.delete_dns_domain_record(domain, &record.id);
println!("RECORD DELETED: {:?}", record);
let domains = api.get_dns_domain_list()?;
println!("DOMAIN LIST: {:?}", domains);
let old_domain = api.delete_dns_domain(domain)?;
println!("DEL DOMAIN: {:?}", old_domain);
let regions = api.get_regions()?;
println!("REGIONS: {:?}", regions);
let plans = api.get_plans()?;
println!("PLANS: {:?}", plans);
let mut os = api.get_os_list()?;
println!("OS: {:?}", os);
let ssh_key = api.create_sshkey("test", "xxx")?;
println!("SSH KEY CREATED: {:?}", ssh_key);
let ssh_key = api.get_sshkey(ssh_key.id)?;
println!("SSH KEY: {:?}", ssh_key);
let ssh_keys = api.get_sshkey_list()?;
println!("SSH KEYS: {:?}", ssh_keys);
let instances = api.get_instance_list()?;
println!("INSTANCE LIST: {:?}", instances);
let ubuntu_list: Vec<VultrOS> = os
.drain(..)
.filter(|item| item.family.contains("ubuntu"))
.collect();
let instance = api
.create_instance(
®ions[0].id,
&plans[0].id,
VultrInstanceType::OS(ubuntu_list[0].id),
)
.enable_ipv6(true)
.enable_ipv6(true)
.label("mylabel")
.sshkey_id(&ssh_key.id)
.backups(false)
.ddos_protection(false)
.activation_email(false)
.hostname("myhostname")
.tags(vec![String::from("mytag")])
.run()?;
println!("INSTANCE CREATE: {:?}", instance);
let ssh_key = api.delete_sshkey(ssh_key.id)?;
println!("SSH KEY DELETED: {:?}", ssh_key);
let instance = api.get_instance(instance.id)?;
println!("INSTANCE GET: {:?}", instance);
let instance = api.delete_instance(instance.id)?;
println!("INSTANCE DELETE: {:?}", instance);
Ok(())
}