aboutsummaryrefslogtreecommitdiffstats
path: root/zoned/src/api.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zoned/src/api.rs')
-rw-r--r--zoned/src/api.rs35
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)
}