use scaleway_rs::{
ScalewayApi, ScalewayError, SecurityGroupRuleAction, SecurityGroupRuleDirection,
SecurityGroupRuleProtocol,
};
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 3 {
println!("Call program with the following:");
println!("{} SCW_ACCESS_KEY SCW_SECRET_KEY", 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(access_key: &str, secret_key: &str) -> Result<(), ScalewayError> {
let api = ScalewayApi::new(secret_key);
let region = "fr-par-1";
let own_key = api.get_api_key(access_key)?;
println!("Api key: {:#?}", own_key);
let user = api.get_user(&own_key.user_id.unwrap())?;
println!("User: {:#?}", user);
let organization_id = &user.organization_id;
let project = api
.create_project("test", organization_id)
.description("test description")
.run()?;
println!("Created project: {:#?}", project);
let projects = api
.list_projects()
.organization_id(organization_id)
.run()?;
println!("Projects: {:#?}", projects);
let ssh_keys = api.list_ssh_keys().run()?;
println!("sshkeys: {:#?}", ssh_keys);
let ssh_key = api.get_ssh_key(&ssh_keys[0].id).run()?;
println!("ssh_key: {:#?}", ssh_key);
let sgl = api.list_security_groups(region).run()?;
println!("Security groups: {:#?}", sgl);
let sg = api
.create_security_group(region, "test", true)
.inbound_default_policy(scaleway_rs::SecurityGroupPolicy::Drop)
.outbound_default_policy(scaleway_rs::SecurityGroupPolicy::Accept)
.project(&project.id)
.description("description test test")
.run()?;
println!("Created security group: {:#?}", sg);
let sgr = api
.create_security_group_rule(
region,
&sg.id,
"10.0.0.0/8",
SecurityGroupRuleProtocol::Tcp,
SecurityGroupRuleDirection::Inbound,
SecurityGroupRuleAction::Accept,
)
.dest_port_from(22)
.run()?;
println!("Security group rule: {:#?}", sgr);
let sgrl = api
.list_security_group_rules(region, &sg.id)
.per_page(100)
.run()?;
println!("Security group rules: {:#?}", sgrl);
api.delete_securitygroup(region, &sg.id)?;
println!("Deleted security group");
api.delete_project(&project.id)?;
println!("Deleted project");
for region in ScalewayApi::az_list() {
let types = api.get_server_types(region)?;
println!("SERVERTYPES: {:#?}", types);
let images = api.list_images(region).run()?;
println!("IMAGES: {:#?}", images);
let instances = api
.list_instances(region)
.order("creation_date_asc")
.run()?;
println!("INSTANCES: {:#?}", instances);
let availability = api.list_availability(region)?;
println!("AVAILABILITY: {:#?}", availability);
let list = api
.list_marketplace_instances()
.arch(scaleway_rs::ScalewayArchitecture::X86_64)
.include_eol(false)
.run()?;
println!("MARKETPLACE IMAGES: {:#?}", list);
let list = api.list_marketplace_instance_versions(&list[0].id).run()?;
println!("MARKETPLACE IMAGE VERSION: {:#?}", list);
}
Ok(())
}