#![allow(dead_code)]
use std::env;
use anyhow::Context;
use neolite::{client::Client, config::Config, lite::Lite, snapshot::SnapshotOpts};
async fn create(client: Client, vm_id: u32) -> anyhow::Result<()> {
let lite = Lite::new(client);
let product = lite.plan().await?;
let product_resource = product.get_vm(1538).await?;
let billing_resource = product_resource.get_billing("Monthly").await?;
println!(
"::: Billing. label: {}, price: {}",
billing_resource.label, billing_resource.price,
);
let snapshot = lite.snapshot().await?;
let opts = SnapshotOpts {
billing: billing_resource,
use_credit_card: false,
promocode: None,
};
let billing_resource = snapshot
.create(
vm_id,
"snapshot-from-sdk".to_string(),
Some("Snapshot from SDK".to_string()),
&opts,
)
.await?;
println!(
"::: Snapshot. account id: {}, order id: {}",
billing_resource.account_id, billing_resource.order_id
);
Ok(())
}
async fn restore_with(client: Client) -> anyhow::Result<()> {
let lite = Lite::new(client);
let plan = lite.plan().await?;
let plan_resource = plan.get_vm(1538).await?;
println!(
"::: plan. id: {}, name: {}",
plan_resource.id, plan_resource.name,
);
let billing_resource = plan_resource.get_billing("Monthly").await?;
println!(
"::: Billing. label: {}, price: {}",
billing_resource.label, billing_resource.price,
);
let keypair = lite.keypair().await?;
let keypair_resource = keypair.create("gandalf0").await?;
println!(
"::: Keypair. id: {}, name: {}",
keypair_resource.id, keypair_resource.name,
);
let snapshot = lite.snapshot().await?;
let opts = neolite::snapshot::RestoreVirtualMachineOptions {
plan: plan_resource,
keypair: keypair_resource,
billing: billing_resource,
use_credit_card: false,
promocode: None,
};
let snapshot_id = 123;
let billing_resource = snapshot
.restore_with(
snapshot_id,
"thorin-os2".to_string(),
Some("Thorin Virtual Machine".to_string()),
"thethorin".to_string(),
"SpeakFriendAndEnter123".to_string(),
&opts,
)
.await?;
println!(
"::: VM created. account id: {}, order id: {}",
billing_resource.account_id, billing_resource.order_id
);
Ok(())
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
env_logger::init();
dotenvy::from_filename("./examples/.env")?;
let url = "https://api.portal.biznetgio.dev/v1/neolites".parse::<http::Uri>()?;
let token = env::var("TOKEN").context("TOKEN env not found.")?;
let id = env::var("VM_ID").context("VM_ID env not found.")?;
let id: u32 = id.parse()?;
let config = Config::new(url, &token);
let client = Client::new(config)?;
create(client, id).await?;
Ok(())
}