pub struct PetriVm<T: PetriVmmBackend> { /* private fields */ }
Expand description
A constructed Petri VM
Implementations§
Source§impl<T: PetriVmmBackend> PetriVm<T>
impl<T: PetriVmmBackend> PetriVm<T>
Sourcepub async fn wait_for_halt(&mut self) -> Result<PetriHaltReason>
pub async fn wait_for_halt(&mut self) -> Result<PetriHaltReason>
Wait for the VM to halt, returning the reason for the halt.
Sourcepub async fn wait_for_clean_shutdown(&mut self) -> Result<()>
pub async fn wait_for_clean_shutdown(&mut self) -> Result<()>
Wait for the VM to cleanly shutdown.
Sourcepub async fn wait_for_teardown(self) -> Result<PetriHaltReason>
pub async fn wait_for_teardown(self) -> Result<PetriHaltReason>
Wait for the VM to halt, returning the reason for the halt, and tear down the VM.
Sourcepub async fn wait_for_clean_teardown(self) -> Result<()>
pub async fn wait_for_clean_teardown(self) -> Result<()>
Wait for the VM to cleanly shutdown and tear down the VM.
Sourcepub async fn wait_for_reset_no_agent(&mut self) -> Result<()>
pub async fn wait_for_reset_no_agent(&mut self) -> Result<()>
Wait for the VM to reset. Does not wait for pipette.
Sourcepub async fn wait_for_reset(&mut self) -> Result<PipetteClient>
pub async fn wait_for_reset(&mut self) -> Result<PipetteClient>
Wait for the VM to reset and pipette to connect.
Sourcepub async fn inspect_openhcl(
&self,
path: impl Into<String>,
depth: Option<usize>,
timeout: Option<Duration>,
) -> Result<Node>
pub async fn inspect_openhcl( &self, path: impl Into<String>, depth: Option<usize>, timeout: Option<Duration>, ) -> Result<Node>
Invoke Inspect on the running OpenHCL instance.
IMPORTANT: As mentioned in the Guide, inspect output is not guaranteed to be stable. Use this to test that components in OpenHCL are working as you would expect. But, if you are adding a test simply to verify that the inspect output as some other tool depends on it, then that is incorrect.
timeout
is enforced on the client sidepath
anddepth
are passed to theinspect::Inspect
machinery.
Sourcepub async fn test_inspect_openhcl(&mut self) -> Result<()>
pub async fn test_inspect_openhcl(&mut self) -> Result<()>
Test that we are able to inspect OpenHCL.
Sourcepub async fn wait_for_vtl2_ready(&mut self) -> Result<()>
pub async fn wait_for_vtl2_ready(&mut self) -> Result<()>
Wait for VTL 2 to report that it is ready to respond to commands. Will fail if the VM is not running OpenHCL.
This should only be necessary if you’re doing something manual. All Petri-provided methods will wait for VTL 2 to be ready automatically.
Sourcepub async fn kmsg(&self) -> Result<KmsgStream>
pub async fn kmsg(&self) -> Result<KmsgStream>
Get the kmsg stream from OpenHCL.
Sourcepub async fn openhcl_core_dump(&self, name: &str, path: &Path) -> Result<()>
pub async fn openhcl_core_dump(&self, name: &str, path: &Path) -> Result<()>
Gets a live core dump of the OpenHCL process specified by ‘name’ and writes it to ‘path’
Sourcepub async fn openhcl_crash(&self, name: &str) -> Result<()>
pub async fn openhcl_crash(&self, name: &str) -> Result<()>
Crashes the specified openhcl process
Sourcepub async fn wait_for_vtl2_agent(&mut self) -> Result<PipetteClient>
pub async fn wait_for_vtl2_agent(&mut self) -> Result<PipetteClient>
Wait for a connection from a pipette agent running in VTL 2. Useful if you’ve reset VTL 2 or are otherwise expecting a fresh connection. Will fail if the VM is not running OpenHCL.
Sourcepub async fn send_enlightened_shutdown(
&mut self,
kind: ShutdownKind,
) -> Result<()>
pub async fn send_enlightened_shutdown( &mut self, kind: ShutdownKind, ) -> Result<()>
Wait for the Hyper-V shutdown IC to be ready and use it to instruct the guest to shutdown.
Sourcepub async fn restart_openhcl(
&mut self,
new_openhcl: ResolvedArtifact<impl IsOpenhclIgvm>,
flags: OpenHclServicingFlags,
) -> Result<()>
pub async fn restart_openhcl( &mut self, new_openhcl: ResolvedArtifact<impl IsOpenhclIgvm>, flags: OpenHclServicingFlags, ) -> Result<()>
Instruct the OpenHCL to restart the VTL2 paravisor. Will fail if the VM is not running OpenHCL. Will also fail if the VM is not running.
Sourcepub async fn save_openhcl(
&mut self,
new_openhcl: ResolvedArtifact<impl IsOpenhclIgvm>,
flags: OpenHclServicingFlags,
) -> Result<()>
pub async fn save_openhcl( &mut self, new_openhcl: ResolvedArtifact<impl IsOpenhclIgvm>, flags: OpenHclServicingFlags, ) -> Result<()>
Instruct the OpenHCL to save the state of the VTL2 paravisor. Will fail if the VM is not running OpenHCL. Will also fail if the VM is not running or if this is called twice in succession
Sourcepub async fn restore_openhcl(&mut self) -> Result<()>
pub async fn restore_openhcl(&mut self) -> Result<()>
Instruct the OpenHCL to restore the state of the VTL2 paravisor. Will fail if the VM is not running OpenHCL. Will also fail if the VM is running or if this is called without prior save
Sourcepub fn arch(&self) -> MachineArch
pub fn arch(&self) -> MachineArch
Get VM’s guest OS flavor
Sourcepub fn backend(&mut self) -> &mut T::VmRuntime
pub fn backend(&mut self) -> &mut T::VmRuntime
Get the inner runtime backend to make backend-specific calls
Sourcepub async fn get_guest_state_file(&self) -> Result<Option<PathBuf>>
pub async fn get_guest_state_file(&self) -> Result<Option<PathBuf>>
Get the path to the VM’s guest state file
Auto Trait Implementations§
impl<T> Freeze for PetriVm<T>
impl<T> !RefUnwindSafe for PetriVm<T>
impl<T> Send for PetriVm<T>
impl<T> Sync for PetriVm<T>
impl<T> Unpin for PetriVm<T>
impl<T> !UnwindSafe for PetriVm<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.