aboutsummaryrefslogtreecommitdiffstats
path: root/zoned
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-02-01 01:52:04 -0600
committerToby Vincent <tobyv13@gmail.com>2022-02-01 01:52:04 -0600
commit1a5a7eed4df2ee7aebdb752b78e7da78e5f15d28 (patch)
treed6a4575aad284735c1fbb8ceb98b4fe80798cfdc /zoned
parent493d909da8c6540b63ca2f461a9d2462715ebd0e (diff)
fix: integrated figment with rocket
Co-authored-by: Neil Kollack <nkollack@gmail.com>
Diffstat (limited to 'zoned')
-rw-r--r--zoned/src/lib.rs46
-rw-r--r--zoned/src/main.rs12
2 files changed, 33 insertions, 25 deletions
diff --git a/zoned/src/lib.rs b/zoned/src/lib.rs
index 3ec492a..dd35657 100644
--- a/zoned/src/lib.rs
+++ b/zoned/src/lib.rs
@@ -1,28 +1,33 @@
-use figment::{Figment, Provider, Error};
-use rocket::{get, post, serde::json::Json, Build, Config, Rocket};
+use figment::{Error, Provider, Figment};
+use rocket::{get, post, serde::json::Json, Build, Rocket, State};
use rocket_okapi::{
openapi, openapi_get_routes,
rapidoc::{make_rapidoc, GeneralConfig, HideShowConfig, RapiDocConfig},
settings::UrlObject,
swagger_ui::{make_swagger_ui, SwaggerUIConfig},
};
-use std::net::Ipv4Addr;
+use serde::Serialize;
use zone_core::{Container, PartialEqOrDefault};
-use zone_zfs::file_system::ZFSConfig;
-struct ZoneConf {
- pub config: ZFSConfig,
- pub figment: Figment,
+#[derive(Default, Serialize)]
+pub struct Config {
+ pub zfs_config: zone_zfs::Config,
+ pub rocket_config: rocket::Config,
}
-impl ZoneConf {
- pub fn new() -> Result<ZoneConf, Error> {
- ZoneConf::custom(Config::figment())
+impl Config {
+ pub fn new() -> Result<Config, Error> {
+ Config::custom(zone_zfs::Config::figment(), rocket::Config::figment())
}
- pub fn custom<T: Provider>(provider: T) -> Result<ZoneConf, Error> {
- let figment = Figment::from(provider);
- Ok(ZoneConf { config: ZFSConfig::from(&figment)?, figment })
+ pub fn custom<T: Provider, U: Provider>(
+ zfs_provider: T,
+ rocket_provider: U,
+ ) -> Result<Config, Error> {
+ Ok(Config {
+ zfs_config: zone_zfs::Config::from(&zfs_provider)?,
+ rocket_config: rocket::Config::from(&rocket_provider),
+ })
}
}
@@ -43,13 +48,12 @@ pub fn container_list(container: Container) -> Json<Vec<Container>> {
/// # Create container
#[openapi(tag = "Container")]
#[post("/container", data = "<container>")]
-fn create_container(container: Json<Container>) -> Json<Container> {
- let zone_config = ZoneConf::new().unwrap();
-
+fn create_container(container: Json<Container>, config: &State<Config>) -> Json<Container> {
+ // let zone_config = ZoneConf::new().unwrap();
let container = zone_zfs::create_file_system(
container.template.clone(),
format!("{}-{}", container.user, container.id),
- &zone_config.config.quota,
+ &config.zfs_config,
);
match container {
@@ -58,13 +62,7 @@ fn create_container(container: Json<Container>) -> Json<Container> {
}
}
-pub fn build_rocket() -> Rocket<Build> {
- let config = Config {
- address: Ipv4Addr::new(127, 0, 0, 1).into(),
- port: 8000,
- ..Config::debug_default()
- };
-
+pub fn build_rocket(config: Figment) -> Rocket<Build> {
rocket::custom(config)
.mount("/", openapi_get_routes![container_list, create_container,])
.mount(
diff --git a/zoned/src/main.rs b/zoned/src/main.rs
index a8d8674..173a8b2 100644
--- a/zoned/src/main.rs
+++ b/zoned/src/main.rs
@@ -1,6 +1,16 @@
+use figment::{
+ providers::{Env, Format, Serialized, Toml},
+ Figment,
+};
+use zoned::Config;
+
#[rocket::main]
async fn main() {
- match zoned::build_rocket().launch().await {
+ let config = Figment::from(Serialized::defaults(Config::default()))
+ .merge(Toml::file("/etc/zoned/Config.toml"))
+ .merge(Env::prefixed("ZONED_"));
+
+ match zoned::build_rocket(config).launch().await {
Ok(()) => println!("Rocket shut down gracefully."),
Err(err) => eprintln!("Rocket had an error: {}", err),
};