summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-03-01 21:09:05 +0200
committerLars Wirzenius <liw@liw.fi>2021-03-01 21:21:45 +0200
commitdab5ca0f35c167b78b35852402de8d259a4d530b (patch)
tree5d5c79bedcddb4f9ed873225536c80c770cc1215
parentf3722501a719806932d80f70844b16c12e1abea1 (diff)
downloadvmadm-dab5ca0f35c167b78b35852402de8d259a4d530b.tar.gz
refactor: replace use of anyhow with custom types in library part
-rw-r--r--src/cmd/cloud_init.rs15
-rw-r--r--src/cmd/delete.rs11
-rw-r--r--src/cmd/list.rs8
-rw-r--r--src/cmd/new.rs22
4 files changed, 46 insertions, 10 deletions
diff --git a/src/cmd/cloud_init.rs b/src/cmd/cloud_init.rs
index 3ab4139..615b2a8 100644
--- a/src/cmd/cloud_init.rs
+++ b/src/cmd/cloud_init.rs
@@ -1,9 +1,18 @@
-use crate::cloudinit::CloudInitConfig;
+use crate::cloudinit::{CloudInitConfig, CloudInitError};
use crate::spec::Specification;
use log::{debug, info};
use std::path::Path;
-pub fn cloud_init(spec: &Specification, dirname: &Path) -> anyhow::Result<()> {
+#[derive(Debug, thiserror::Error)]
+pub enum CloudInitCommandError {
+ #[error(transparent)]
+ CloudInitError(#[from] CloudInitError),
+
+ #[error(transparent)]
+ IoError(#[from] std::io::Error),
+}
+
+pub fn cloud_init(spec: &Specification, dirname: &Path) -> Result<(), CloudInitCommandError> {
info!(
"generating cloud-init configuration into {}",
dirname.display()
@@ -18,7 +27,7 @@ pub fn cloud_init(spec: &Specification, dirname: &Path) -> anyhow::Result<()> {
Ok(())
}
-pub fn cloud_init_iso(spec: &Specification, iso: &Path) -> anyhow::Result<()> {
+pub fn cloud_init_iso(spec: &Specification, iso: &Path) -> Result<(), CloudInitCommandError> {
info!("generating cloud-init ISO into {}", iso.display());
let init = CloudInitConfig::from(&spec)?;
diff --git a/src/cmd/delete.rs b/src/cmd/delete.rs
index ee8f0e9..ac8c5b4 100644
--- a/src/cmd/delete.rs
+++ b/src/cmd/delete.rs
@@ -4,7 +4,16 @@ use std::thread;
use std::time::Duration;
use virt::connect::Connect;
-pub fn delete(spec: &Specification) -> anyhow::Result<()> {
+#[derive(Debug, thiserror::Error)]
+pub enum DeleteError {
+ #[error(transparent)]
+ VirtError(#[from] virt::error::Error),
+
+ #[error(transparent)]
+ IoError(#[from] std::io::Error),
+}
+
+pub fn delete(spec: &Specification) -> Result<(), DeleteError> {
info!("deleting virtual machine {}", spec.name);
debug!("connecting to libvirtd");
diff --git a/src/cmd/list.rs b/src/cmd/list.rs
index e58db3d..a67dfb7 100644
--- a/src/cmd/list.rs
+++ b/src/cmd/list.rs
@@ -2,7 +2,13 @@ use crate::config::Configuration;
use virt::connect::Connect;
-pub fn list(_config: &Configuration) -> anyhow::Result<()> {
+#[derive(Debug, thiserror::Error)]
+pub enum ListError {
+ #[error(transparent)]
+ VirtError(#[from] virt::error::Error),
+}
+
+pub fn list(_config: &Configuration) -> Result<(), ListError> {
let conn = Connect::open("qemu:///system")?;
let domains = conn.list_all_domains(0)?;
for domain in domains {
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() {