eveng 0.1.1

An API Client for EVE-NG
Documentation
use eveng::Client;
use eveng::labs::AddLabRequest;
use eveng::networks::AddNetworkRequest;
use eveng::nodes::AddNodeRequest;

use std::env;

async fn client_from_env() -> Result<Client, Box<dyn std::error::Error>> {
    let host = env::var("EVE_NG_URL").unwrap_or("http://127.0.0.1".to_string());
    let username = env::var("EVE_NG_USER").unwrap_or("admin".to_string());
    let password = env::var("EVE_NG_PASS").unwrap_or("eve".to_string());

    Ok(Client::login(host, username, password).await?)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = client_from_env().await?;

    let folder_path = env::var("EVE_NG_FOLDER").unwrap_or("/".to_string());
    let folder = client.folder(folder_path)?;

    let lab_name = env::var("EVE_NG_LAB").unwrap_or("Test".to_string());
    let lab = folder.labs().add(AddLabRequest::new(lab_name)?).await?;

    let tmpl = client.system().node_template("vios").get().await?;

    let vios1 = lab
        .nodes()
        .add(
            AddNodeRequest::qemu(&tmpl)?
                .name("vios1")
                .position(100, 200)
                .ethernet(2),
        )
        .await?;

    let vios2 = lab
        .nodes()
        .add(
            AddNodeRequest::qemu(&tmpl)?
                .name("vios2")
                .position(100, 400)
                .ethernet(2),
        )
        .await?;

    vios1
        .ethernet(0)
        .connect_to_node(&vios2.ethernet(0))
        .await?;

    let cloud = lab
        .networks()
        .add(
            AddNetworkRequest::new("pnet0")
                .name("Mgmt")
                .position(300, 300),
        )
        .await?;

    vios1.ethernet(1).connect_to_network(&cloud).await?;
    vios2.ethernet(1).connect_to_network(&cloud).await?;

    lab.nodes().start().await?;
    client.logout().await?;

    Ok(())
}