Add dsmode cloud-init metadata
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@ -2,6 +2,15 @@ use crate::app_config::AppConfig;
|
|||||||
use crate::constants;
|
use crate::constants;
|
||||||
use std::process::Command;
|
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
|
/// 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
|
/// 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
|
/// Local hostname, set in metadata file
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub local_hostname: Option<String>,
|
pub local_hostname: Option<String>,
|
||||||
|
/// Data source mode
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub dsmode: Option<CloudInitDSMode>,
|
||||||
/// Network configuration
|
/// Network configuration
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub network_configuration: Option<String>,
|
pub network_configuration: Option<String>,
|
||||||
@ -53,6 +65,15 @@ impl CloudInitConfig {
|
|||||||
if let Some(local_hostname) = &self.local_hostname {
|
if let Some(local_hostname) = &self.local_hostname {
|
||||||
metadatas.push(format!("local-hostname: {}", 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");
|
let meta_data_path = temp_path.path().join("meta-data");
|
||||||
std::fs::write(&meta_data_path, metadatas.join("\n"))?;
|
std::fs::write(&meta_data_path, metadatas.join("\n"))?;
|
||||||
cmd.arg(meta_data_path);
|
cmd.arg(meta_data_path);
|
||||||
|
@ -87,6 +87,7 @@ export interface VMCloudInit {
|
|||||||
user_data: string;
|
user_data: string;
|
||||||
instance_id?: string;
|
instance_id?: string;
|
||||||
local_hostname?: string;
|
local_hostname?: string;
|
||||||
|
dsmode?: "Net" | "Local";
|
||||||
network_configuration?: string;
|
network_configuration?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user