From 8a7712ec42318c6cace3310f4fcb74b7a14b7019 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sat, 7 Jun 2025 11:50:22 +0200 Subject: [PATCH] Add dsmode cloud-init metadata --- virtweb_backend/src/utils/cloud_init_utils.rs | 21 +++++++++++++++++++ virtweb_frontend/src/api/VMApi.ts | 1 + 2 files changed, 22 insertions(+) diff --git a/virtweb_backend/src/utils/cloud_init_utils.rs b/virtweb_backend/src/utils/cloud_init_utils.rs index 3821347..d689b1a 100644 --- a/virtweb_backend/src/utils/cloud_init_utils.rs +++ b/virtweb_backend/src/utils/cloud_init_utils.rs @@ -2,6 +2,15 @@ use crate::app_config::AppConfig; use crate::constants; use std::process::Command; +/// Cloud init DS Mode +#[derive(Copy, Clone, Debug, serde::Serialize, serde::Deserialize)] +pub enum CloudInitDSMode { + /// Networking is required + Net, + /// Does not require networking to be up before user-data actions are run + Local, +} + /// VM Cloud Init configuration /// /// RedHat documentation: https://docs.redhat.com/fr/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_cloud-init_for_rhel_9/configuring-cloud-init_cloud-content @@ -17,6 +26,9 @@ pub struct CloudInitConfig { /// Local hostname, set in metadata file #[serde(skip_serializing_if = "Option::is_none")] pub local_hostname: Option, + /// Data source mode + #[serde(skip_serializing_if = "Option::is_none")] + pub dsmode: Option, /// Network configuration #[serde(skip_serializing_if = "Option::is_none")] pub network_configuration: Option, @@ -53,6 +65,15 @@ impl CloudInitConfig { if let Some(local_hostname) = &self.local_hostname { metadatas.push(format!("local-hostname: {}", local_hostname)); } + if let Some(dsmode) = &self.dsmode { + metadatas.push(format!( + "dsmode: {}", + match dsmode { + CloudInitDSMode::Net => "net", + CloudInitDSMode::Local => "local", + } + )); + } let meta_data_path = temp_path.path().join("meta-data"); std::fs::write(&meta_data_path, metadatas.join("\n"))?; cmd.arg(meta_data_path); diff --git a/virtweb_frontend/src/api/VMApi.ts b/virtweb_frontend/src/api/VMApi.ts index dbc119c..2284aed 100644 --- a/virtweb_frontend/src/api/VMApi.ts +++ b/virtweb_frontend/src/api/VMApi.ts @@ -87,6 +87,7 @@ export interface VMCloudInit { user_data: string; instance_id?: string; local_hostname?: string; + dsmode?: "Net" | "Local"; network_configuration?: string; }