Struct xo_api_client::Client [−][src]
pub struct Client { /* fields omitted */ }Expand description
Client used to communicate with Xen Orchestra’s API
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::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.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); } }
Implementations
Connect to xo-server
Note that url is the websocket URL to the API endpoint, usually something like
wss://example.com/api/ or ws://example.com/api/ for unencrypted
Sign in to xo-server, this is required for access to most of the other methods
xo-cli: session.signIn
pub async fn subscribe_to_notification_all<T>(
    &self
) -> Result<Subscription<T>, RpcError> where
    T: DeserializeOwned, 
pub async fn subscribe_to_notification_all<T>(
    &self
) -> Result<Subscription<T>, RpcError> where
    T: DeserializeOwned, 
Subscribe to method “all”
xo-server tends to send notifications to the client’s JSON RPC procedure “all” subscribe_to_notification_all returns a value that can be used to read those notifications
Create authentication token
xo-cli: token.create [expiresIn=<number|string>]
Get all objects from server
- Ris a type that can hold that entire result set with all different types
- filteris an optional filter
- limitis an optional max limit on number of results xo-cli: xo.getAllObjects [filter=
pub async fn get_objects_of_type<R: DeserializeOwned>(
    &self, 
    object_type: ObjectType, 
    filter: Option<Map<String, JsonValue>>, 
    limit: Option<usize>
) -> Result<R, RpcError>
pub async fn get_objects_of_type<R: DeserializeOwned>(
    &self, 
    object_type: ObjectType, 
    filter: Option<Map<String, JsonValue>>, 
    limit: Option<usize>
) -> Result<R, RpcError>
Get all object of specified type from server
- Ris a type that can represent that collection of objects
- object_typeis the type of object to fetch
- filteris an optional filter
- limitis an optional max limit on number of results
Get all VMs from server
- filteris an optional filter
- limitis an optional max limit on number of results
Get all VM snapshots from server
- filteris an optional filter
- limitis an optional max limit on number of results
This function will try to initiate a soft restart of the VM The there is no guarantee that the VM has started once the returned future resolves
xo-cli: vm.restart id=
Create snapshot of the specified VM
save_memory: Should the RAM memory of the VM be saved? Setting this to true does make the
snapshot take a lot more time, may even freeze the VM for some time. If you are unsure,
set this to false
xo-cli: vm.snapshot [description=
pub async fn revert_snapshot(
    &self, 
    snapshot_id: SnapshotId
) -> Result<(), RevertSnapshotError>
pub async fn revert_snapshot(
    &self, 
    snapshot_id: SnapshotId
) -> Result<(), RevertSnapshotError>
Roll back Vm to an earlier snapshot
xo-cli: vm.revert snapshot=