pub struct KvmBackend { /* private fields */ }Expand description
KVM/qemu backend.
Implementations§
Source§impl KvmBackend
impl KvmBackend
pub fn new(config: KvmConfig) -> Self
Sourcepub async fn check_kvm_available() -> Result<String>
pub async fn check_kvm_available() -> Result<String>
Verify qemu + KVM support is present. Provider should call this at startup; surfacing “your host doesn’t support KVM” at config time is much better than at first-spawn time.
Sourcepub fn qemu_argv(&self, config: &ContainerConfig) -> Vec<String>
pub fn qemu_argv(&self, config: &ContainerConfig) -> Vec<String>
Build the qemu-system-x86_64 argv. Pure function — testable without spawning anything. Caller is responsible for the seed ISO + qcow2 already existing.
Trait Implementations§
Source§impl ComputeBackend for KvmBackend
impl ComputeBackend for KvmBackend
Source§fn find_available_id<'life0, 'async_trait>(
&'life0 self,
range_start: u32,
range_end: u32,
) -> Pin<Box<dyn Future<Output = Result<u32>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn find_available_id<'life0, 'async_trait>(
&'life0 self,
range_start: u32,
range_end: u32,
) -> Pin<Box<dyn Future<Output = Result<u32>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Scan vm_root for existing per-id directories and pick the next free id in range.
Source§fn start_container<'life0, 'async_trait>(
&'life0 self,
_id: u32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn start_container<'life0, 'async_trait>(
&'life0 self,
_id: u32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Daemonized qemu starts on create_container; this is a no-op
since the lifecycle is single-shot. If we ever migrate to a
non-daemonized qemu (e.g. for live migration support),
start_container becomes the place that spawns the process.
Source§fn create_container<'life0, 'life1, 'async_trait>(
&'life0 self,
config: &'life1 ContainerConfig,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_container<'life0, 'life1, 'async_trait>(
&'life0 self,
config: &'life1 ContainerConfig,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Create a new container
Source§fn stop_container<'life0, 'async_trait>(
&'life0 self,
id: u32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn stop_container<'life0, 'async_trait>(
&'life0 self,
id: u32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stop a container
Source§fn delete_container<'life0, 'async_trait>(
&'life0 self,
id: u32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn delete_container<'life0, 'async_trait>(
&'life0 self,
id: u32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Delete a container
Source§fn get_node_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<NodeStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_node_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<NodeStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get node resource usage
Auto Trait Implementations§
impl Freeze for KvmBackend
impl RefUnwindSafe for KvmBackend
impl Send for KvmBackend
impl Sync for KvmBackend
impl Unpin for KvmBackend
impl UnsafeUnpin for KvmBackend
impl UnwindSafe for KvmBackend
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
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more