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
R
is a type that can hold that entire result set with all different typesfilter
is an optional filterlimit
is 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: impl Into<Option<Map<String, JsonValue>>>,
limit: impl Into<Option<usize>>
) -> Result<R, RpcError>
pub async fn get_objects_of_type<R: DeserializeOwned>(
&self,
object_type: ObjectType,
filter: impl Into<Option<Map<String, JsonValue>>>,
limit: impl Into<Option<usize>>
) -> Result<R, RpcError>
Get all object of specified type from server
R
is a type that can represent that collection of objectsobject_type
is the type of object to fetchfilter
is an optional filterlimit
is an optional max limit on number of results
Get all VMs from server
filter
is an optional filterlimit
is an optional max limit on number of results
Get all $item_type s from server
filter
is an optional filterlimit
is 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=