diff options
Diffstat (limited to 'zoned/src/api.rs')
-rw-r--r-- | zoned/src/api.rs | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/zoned/src/api.rs b/zoned/src/api.rs index fa98562..a1a892e 100644 --- a/zoned/src/api.rs +++ b/zoned/src/api.rs @@ -6,16 +6,17 @@ use rocket_okapi::{ swagger_ui::{make_swagger_ui, SwaggerUIConfig}, }; use zone_core::{Container, PartialEqOrDefault}; +use zone_zfs::ZFS; -use crate::{Error, Result}; +use crate::{Config, Error, Result}; /// # Test endpoint /// /// Returns a list of containers based on the query. #[openapi(tag = "Testing")] #[get("/test")] -pub fn test_endpoint(zfs_config: &State<zone_zfs::Config>) -> Json<String> { - Json(zfs_config.quota.to_owned()) +pub fn test_endpoint(zfs: &State<zone_zfs::ZFS>) -> Json<String> { + Json(zfs.config.pool_name.to_owned()) } /// List containers @@ -25,10 +26,16 @@ pub fn test_endpoint(zfs_config: &State<zone_zfs::Config>) -> Json<String> { #[get("/container/list?<container..>")] pub fn container_list(container: Container) -> Json<Vec<Container>> { zone_nspawn::get_containers() + .unwrap_or_else(|_err| { + todo!("Log this error"); + Default::default() + }) .into_iter() .map(|c| { - c.try_into() - .unwrap_or_else(|_err| todo!("Log this error and return `Container::default()`")) + c.try_into().unwrap_or_else(|_err| { + todo!("Log this error"); + Default::default() + }) }) .filter(|c| container.eq_or_default(c)) .collect::<Vec<Container>>() @@ -42,20 +49,23 @@ pub fn container_list(container: Container) -> Json<Vec<Container>> { #[post("/container", data = "<container>")] fn create_container( container: Json<Container>, - zfs_config: &State<zone_zfs::Config>, + zfs: &State<zone_zfs::ZFS>, ) -> Result<Json<Container>> { - zone_zfs::create_file_system( - container.template.clone(), - format!("{}-{}", container.user, container.id), - zfs_config, + zfs.clone_from_latest( + format!("{}-{}", container.user, container.id).into(), + container.template.to_owned().into(), )? .try_into() .map_err(Error::from) .map(Container::into) } -pub fn build_rocket(config: crate::Config) -> Rocket<Build> { - rocket::custom(config.rocket_config) +pub fn build_zfs(config: &Config) -> Result<ZFS> { + zone_zfs::ZFS::custom(&config.zfs_config).map_err(Error::from) +} + +pub fn build_rocket(config: &Config) -> Rocket<Build> { + rocket::custom(config.rocket_config.to_owned()) .mount( "/", openapi_get_routes![test_endpoint, container_list, create_container,], @@ -82,5 +92,4 @@ pub fn build_rocket(config: crate::Config) -> Rocket<Build> { ..Default::default() }), ) - .manage(config.zfs_config) } |