From 97c13fc2155a1faee90dbfc5053d0cbb40411844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Thu, 20 Nov 2025 11:47:55 +0100 Subject: [PATCH] dls::File + variants for TLS --- src/dls.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/src/dls.rs b/src/dls.rs index 3f3895d..d312506 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,49 @@ 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), + CaCrt { + path: Option, + ca: CaRef, + }, + TlsKey { + path: Option, + tls: TlsRef, + }, + TlsCrt { + path: Option, + tls: 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, + Kube { + user: String, + group: String, + duration: Duration, + }, +}