use std::sync::Arc;
use crate::core::client::{VimClient, Result};
#[derive(Clone)]
pub struct VsanSystemEx {
client: Arc<dyn VimClient>,
mo_id: String,
}
impl VsanSystemEx {
pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
Self {
client,
mo_id: mo_id.to_string(),
}
}
pub async fn vsan_host_abort_wipe_disk(&self, disks: &[String]) -> Result<Vec<crate::types::structs::VsanHostAbortWipeDiskStatus>> {
let input = VsanHostAbortWipeDiskRequestType {disks, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanHostAbortWipeDisk", Some(&input)).await?;
let result: Vec<crate::types::structs::VsanHostAbortWipeDiskStatus> = crate::core::client::unmarshal_array(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_get_about_info_ex(&self) -> Result<crate::types::structs::VsanHostAboutInfoEx> {
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanGetAboutInfoEx", None).await?;
let result: crate::types::structs::VsanHostAboutInfoEx = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_host_get_runtime_stats(&self, stats: Option<&[String]>, cluster_uuid: Option<&str>) -> Result<crate::types::structs::VsanHostRuntimeStats> {
let input = VsanHostGetRuntimeStatsRequestType {stats, cluster_uuid, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanHostGetRuntimeStats", Some(&input)).await?;
let result: crate::types::structs::VsanHostRuntimeStats = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_query_host_drs_stats(&self, host_uuids: Option<&[String]>, vms: Option<&[String]>, host_index: Option<i32>) -> Result<crate::types::structs::VsanHostDrsStats> {
let input = VsanQueryHostDrsStatsRequestType {host_uuids, vms, host_index, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanQueryHostDrsStats", Some(&input)).await?;
let result: crate::types::structs::VsanHostDrsStats = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_query_host_status_ex(&self, cluster_uuids: Option<&[String]>) -> Result<Option<Vec<crate::types::structs::VsanHostClusterStatus>>> {
let input = VsanQueryHostStatusExRequestType {cluster_uuids, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanSystemEx", &self.mo_id, "VsanQueryHostStatusEx", Some(&input)).await?;
match bytes_opt {
Some(ref b) => Ok(Some(crate::core::client::unmarshal_array(self.client.transport(), b)?)),
None => Ok(None),
}
}
pub async fn vsan_query_syncing_vsan_objects(&self, uuids: Option<&[String]>, start: Option<i32>, limit: Option<i32>, include_summary: Option<bool>) -> Result<crate::types::structs::VsanHostVsanObjectSyncQueryResult> {
let input = VsanQuerySyncingVsanObjectsRequestType {uuids, start, limit, include_summary, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanQuerySyncingVsanObjects", Some(&input)).await?;
let result: crate::types::structs::VsanHostVsanObjectSyncQueryResult = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_query_what_if_evacuation_result(&self, evac_entity_uuid: &str) -> Result<crate::types::structs::VsanWhatIfEvacResult> {
let input = VsanQueryWhatIfEvacuationResultRequestType {evac_entity_uuid, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanQueryWhatIfEvacuationResult", Some(&input)).await?;
let result: crate::types::structs::VsanWhatIfEvacResult = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_host_query_wipe_disk(&self, disks: &[String]) -> Result<Vec<crate::types::structs::VsanHostWipeDiskStatus>> {
let input = VsanHostQueryWipeDiskRequestType {disks, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanHostQueryWipeDisk", Some(&input)).await?;
let result: Vec<crate::types::structs::VsanHostWipeDiskStatus> = crate::core::client::unmarshal_array(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_unmount_disk_mapping_ex(&self, mappings: &[crate::types::structs::VsanHostDiskMapping], maintenance_spec: Option<&crate::types::structs::HostMaintenanceSpec>, timeout: Option<i32>, evac_reason: Option<&str>) -> Result<crate::types::structs::ManagedObjectReference> {
let input = VsanUnmountDiskMappingExRequestType {mappings, maintenance_spec, timeout, evac_reason, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanUnmountDiskMappingEx", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_host_wipe_disk(&self, disks: &[String]) -> Result<crate::types::structs::ManagedObjectReference> {
let input = VsanHostWipeDiskRequestType {disks, };
let bytes = self.client.invoke("vsan", "VsanSystemEx", &self.mo_id, "VsanHostWipeDisk", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
}
struct VsanHostAbortWipeDiskRequestType<'a> {
disks: &'a [String],
}
impl<'a> miniserde::Serialize for VsanHostAbortWipeDiskRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanHostAbortWipeDiskRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanHostAbortWipeDiskRequestTypeSer<'b, 'a> {
data: &'b VsanHostAbortWipeDiskRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanHostAbortWipeDiskRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanHostAbortWipeDiskRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("disks"), &self.data.disks as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanHostGetRuntimeStatsRequestType<'a> {
stats: Option<&'a [String]>,
cluster_uuid: Option<&'a str>,
}
impl<'a> miniserde::Serialize for VsanHostGetRuntimeStatsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanHostGetRuntimeStatsRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanHostGetRuntimeStatsRequestTypeSer<'b, 'a> {
data: &'b VsanHostGetRuntimeStatsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanHostGetRuntimeStatsRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanHostGetRuntimeStatsRequestType")),
1 => {
let Some(ref val) = self.data.stats else { continue; };
return Some((std::borrow::Cow::Borrowed("stats"), val as &dyn miniserde::Serialize));
}
2 => {
let Some(ref val) = self.data.cluster_uuid else { continue; };
return Some((std::borrow::Cow::Borrowed("clusterUuid"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQueryHostDrsStatsRequestType<'a> {
host_uuids: Option<&'a [String]>,
vms: Option<&'a [String]>,
host_index: Option<i32>,
}
impl<'a> miniserde::Serialize for VsanQueryHostDrsStatsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQueryHostDrsStatsRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQueryHostDrsStatsRequestTypeSer<'b, 'a> {
data: &'b VsanQueryHostDrsStatsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQueryHostDrsStatsRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanQueryHostDrsStatsRequestType")),
1 => {
let Some(ref val) = self.data.host_uuids else { continue; };
return Some((std::borrow::Cow::Borrowed("hostUuids"), val as &dyn miniserde::Serialize));
}
2 => {
let Some(ref val) = self.data.vms else { continue; };
return Some((std::borrow::Cow::Borrowed("vms"), val as &dyn miniserde::Serialize));
}
3 => {
let Some(ref val) = self.data.host_index else { continue; };
return Some((std::borrow::Cow::Borrowed("hostIndex"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQueryHostStatusExRequestType<'a> {
cluster_uuids: Option<&'a [String]>,
}
impl<'a> miniserde::Serialize for VsanQueryHostStatusExRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQueryHostStatusExRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQueryHostStatusExRequestTypeSer<'b, 'a> {
data: &'b VsanQueryHostStatusExRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQueryHostStatusExRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanQueryHostStatusExRequestType")),
1 => {
let Some(ref val) = self.data.cluster_uuids else { continue; };
return Some((std::borrow::Cow::Borrowed("clusterUuids"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQuerySyncingVsanObjectsRequestType<'a> {
uuids: Option<&'a [String]>,
start: Option<i32>,
limit: Option<i32>,
include_summary: Option<bool>,
}
impl<'a> miniserde::Serialize for VsanQuerySyncingVsanObjectsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQuerySyncingVsanObjectsRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQuerySyncingVsanObjectsRequestTypeSer<'b, 'a> {
data: &'b VsanQuerySyncingVsanObjectsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQuerySyncingVsanObjectsRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanQuerySyncingVsanObjectsRequestType")),
1 => {
let Some(ref val) = self.data.uuids else { continue; };
return Some((std::borrow::Cow::Borrowed("uuids"), val as &dyn miniserde::Serialize));
}
2 => {
let Some(ref val) = self.data.start else { continue; };
return Some((std::borrow::Cow::Borrowed("start"), val as &dyn miniserde::Serialize));
}
3 => {
let Some(ref val) = self.data.limit else { continue; };
return Some((std::borrow::Cow::Borrowed("limit"), val as &dyn miniserde::Serialize));
}
4 => {
let Some(ref val) = self.data.include_summary else { continue; };
return Some((std::borrow::Cow::Borrowed("includeSummary"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQueryWhatIfEvacuationResultRequestType<'a> {
evac_entity_uuid: &'a str,
}
impl<'a> miniserde::Serialize for VsanQueryWhatIfEvacuationResultRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQueryWhatIfEvacuationResultRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQueryWhatIfEvacuationResultRequestTypeSer<'b, 'a> {
data: &'b VsanQueryWhatIfEvacuationResultRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQueryWhatIfEvacuationResultRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanQueryWhatIfEvacuationResultRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("evacEntityUuid"), &self.data.evac_entity_uuid as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanHostQueryWipeDiskRequestType<'a> {
disks: &'a [String],
}
impl<'a> miniserde::Serialize for VsanHostQueryWipeDiskRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanHostQueryWipeDiskRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanHostQueryWipeDiskRequestTypeSer<'b, 'a> {
data: &'b VsanHostQueryWipeDiskRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanHostQueryWipeDiskRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanHostQueryWipeDiskRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("disks"), &self.data.disks as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanUnmountDiskMappingExRequestType<'a> {
mappings: &'a [crate::types::structs::VsanHostDiskMapping],
maintenance_spec: Option<&'a crate::types::structs::HostMaintenanceSpec>,
timeout: Option<i32>,
evac_reason: Option<&'a str>,
}
impl<'a> miniserde::Serialize for VsanUnmountDiskMappingExRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanUnmountDiskMappingExRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanUnmountDiskMappingExRequestTypeSer<'b, 'a> {
data: &'b VsanUnmountDiskMappingExRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanUnmountDiskMappingExRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanUnmountDiskMappingExRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("mappings"), &self.data.mappings as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.maintenance_spec else { continue; };
return Some((std::borrow::Cow::Borrowed("maintenanceSpec"), val as &dyn miniserde::Serialize));
}
3 => {
let Some(ref val) = self.data.timeout else { continue; };
return Some((std::borrow::Cow::Borrowed("timeout"), val as &dyn miniserde::Serialize));
}
4 => {
let Some(ref val) = self.data.evac_reason else { continue; };
return Some((std::borrow::Cow::Borrowed("evacReason"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanHostWipeDiskRequestType<'a> {
disks: &'a [String],
}
impl<'a> miniserde::Serialize for VsanHostWipeDiskRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanHostWipeDiskRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanHostWipeDiskRequestTypeSer<'b, 'a> {
data: &'b VsanHostWipeDiskRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanHostWipeDiskRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanHostWipeDiskRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("disks"), &self.data.disks as &dyn miniserde::Serialize)),
_ => return None,
}
}
}