summaryrefslogtreecommitdiff
path: root/src/cmd/new.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/new.rs')
-rw-r--r--src/cmd/new.rs22
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() {