diff options
Diffstat (limited to 'src/cmd/new.rs')
-rw-r--r-- | src/cmd/new.rs | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/cmd/new.rs b/src/cmd/new.rs index 9930379..0a4b3ab 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -1,6 +1,6 @@ -use crate::cloudinit::CloudInitConfig; -use crate::image::VirtualMachineImage; -use crate::install::{virt_install, VirtInstallArgs}; +use crate::cloudinit::{CloudInitConfig, CloudInitError}; +use crate::image::{ImageError, VirtualMachineImage}; +use crate::install::{virt_install, VirtInstallArgs, VirtInstallError}; use crate::spec::Specification; use bytesize::GIB; @@ -9,7 +9,19 @@ use std::net::TcpStream; const SSH_PORT: i32 = 22; -pub fn new(spec: &Specification) -> anyhow::Result<()> { +#[derive(Debug, thiserror::Error)] +pub enum NewError { + #[error(transparent)] + CloudInitError(#[from] CloudInitError), + + #[error(transparent)] + ImageError(#[from] ImageError), + + #[error(transparent)] + VirtInstallError(#[from] VirtInstallError), +} + +pub fn new(spec: &Specification) -> Result<(), NewError> { info!("creating new VM {}", spec.name); info!("creating cloud-init config"); @@ -37,7 +49,7 @@ pub fn new(spec: &Specification) -> anyhow::Result<()> { Ok(()) } -fn wait_for_port(name: &str, port: i32) -> anyhow::Result<()> { +fn wait_for_port(name: &str, port: i32) -> Result<(), NewError> { let addr = format!("{}:{}", name, port); loop { if TcpStream::connect(&addr).is_ok() { |