diff --git a/src/dls.rs b/src/dls.rs index 3f3895d..46bdeeb 100644 --- a/src/dls.rs +++ b/src/dls.rs @@ -5,6 +5,7 @@ use reqwest::Method; use std::collections::BTreeMap as Map; use std::fmt::Display; use std::net::IpAddr; +use std::time::Duration; pub struct Client { base_url: String, @@ -190,8 +191,8 @@ pub struct HostConfig { pub versions: Map, pub bootstrap_config: String, - #[serde(skip_serializing_if = "Map::is_empty")] - pub initrd_files: Map, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub initrd_files: Vec, pub config: String, } @@ -305,3 +306,50 @@ pub enum Error { #[error("response parsing failed: {0}")] Parse(serde_json::Error), } + +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum File { + Static(crate::File), + Gen { path: String, from: ContentGen }, +} + +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum ContentGen { + CaCrt(CaRef), + TlsKey(TlsRef), + TlsCrt { + key: TlsRef, + ca: CaRef, + profile: CertProfile, + }, +} + +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum CaRef { + Global(String), + Cluster(String, String), +} + +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum TlsRef { + Cluster(String, String), + Host(String, String), +} + +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum CertProfile { + Client, + Server, + /// basicaly Client+Server + Peer, + Kube { + user: String, + group: String, + duration: Duration, + }, +}