#xen #client #vm #tokio #xcp-ng

xo-api-client

Unofficial crate for accessing Xen Orchestra through its API

8 releases

Uses new Rust 2021

0.1.1 Nov 6, 2021
0.1.0 Nov 4, 2021
0.0.6 Oct 31, 2021
0.0.4 Sep 25, 2021
0.0.2 Jun 24, 2021

#447 in Asynchronous

MIT/Apache

38KB
837 lines

xo-api-client

crates.io docs.rs dependency status

Unofficial Rust crate for accessing Xen Orchestra through its API

Under development

The library is still in early development, please do not use in production. The API is nowhere near complete and only covers a very small fraction of XO's api. Lots of things might get changed and/or added in breaking ways at any time.

Async Runtime

This library uses the tokio v1 runtime

Example

Example of listing all VMs with the tag Test

use std::collections::BTreeMap;
use xo_api_client::{credentials::EmailAndPassword, Client, Vm, VmId};

// We dont care about any of the data under the "other" attribute
// in this example
#[derive(serde::Deserialize)]
struct OtherInfo {}

impl xo_api_client::api::vm::OtherInfo for OtherInfo {}

#[tokio::main]
async fn main() {
    let url = "ws://localhost:8080/api/";
    let email = String::from("admin@admin.net");
    let password = String::from("admin");

    let con = Client::connect(url)
        .await
        .expect("Failed to connect to server");

    con.session
        .sign_in(EmailAndPassword { email, password })
        .await
        .expect("Failed to sign in");

    let all_vms: BTreeMap<VmId, Vm<OtherInfo>> =
        con.get_vms(None, None).await.expect("Failed to list VMs");

    let test_vms = all_vms
        .iter()
        .filter(|(_id, vm)| vm.tags.iter().any(|tag| tag == "Test"));

    println!("All VMs with the tag 'Test':");
    for (id, vm) in test_vms {
        println!("ID: {:?}, Name: {}", id, vm.name_label);
    }
}

License

xo-api-client is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE, and LICENSE-MIT for details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in xo-api-client by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~16MB
~354K SLoC