Add cloud init configuration to VM definition
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:
@ -1,4 +1,5 @@
|
|||||||
use crate::libvirt_lib_structures::XMLUuid;
|
use crate::libvirt_lib_structures::XMLUuid;
|
||||||
|
use crate::utils::cloud_init_utils::CloudInitConfig;
|
||||||
|
|
||||||
/// VirtWeb specific metadata
|
/// VirtWeb specific metadata
|
||||||
#[derive(serde::Serialize, serde::Deserialize, Default, Debug, Clone)]
|
#[derive(serde::Serialize, serde::Deserialize, Default, Debug, Clone)]
|
||||||
@ -8,6 +9,8 @@ pub struct DomainMetadataVirtWebXML {
|
|||||||
pub ns: String,
|
pub ns: String,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub group: Option<String>,
|
pub group: Option<String>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub cloud_init: Option<CloudInitConfig>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Domain metadata
|
/// Domain metadata
|
||||||
|
@ -4,6 +4,7 @@ use crate::libvirt_lib_structures::XMLUuid;
|
|||||||
use crate::libvirt_lib_structures::domain::*;
|
use crate::libvirt_lib_structures::domain::*;
|
||||||
use crate::libvirt_rest_structures::LibVirtStructError;
|
use crate::libvirt_rest_structures::LibVirtStructError;
|
||||||
use crate::libvirt_rest_structures::LibVirtStructError::StructureExtraction;
|
use crate::libvirt_rest_structures::LibVirtStructError::StructureExtraction;
|
||||||
|
use crate::utils::cloud_init_utils::CloudInitConfig;
|
||||||
use crate::utils::file_size_utils::FileSize;
|
use crate::utils::file_size_utils::FileSize;
|
||||||
use crate::utils::files_utils;
|
use crate::utils::files_utils;
|
||||||
use crate::utils::vm_file_disks_utils::{VMDiskBus, VMDiskFormat, VMFileDisk};
|
use crate::utils::vm_file_disks_utils::{VMDiskBus, VMDiskFormat, VMFileDisk};
|
||||||
@ -94,6 +95,9 @@ pub struct VMInfo {
|
|||||||
pub tpm_module: bool,
|
pub tpm_module: bool,
|
||||||
/// Strings injected as OEM Strings in SMBios configuration
|
/// Strings injected as OEM Strings in SMBios configuration
|
||||||
pub oem_strings: Vec<String>,
|
pub oem_strings: Vec<String>,
|
||||||
|
/// Cloud init configuration
|
||||||
|
#[serde(default)]
|
||||||
|
pub cloud_init: CloudInitConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VMInfo {
|
impl VMInfo {
|
||||||
@ -340,6 +344,7 @@ impl VMInfo {
|
|||||||
virtweb: DomainMetadataVirtWebXML {
|
virtweb: DomainMetadataVirtWebXML {
|
||||||
ns: "https://virtweb.communiquons.org".to_string(),
|
ns: "https://virtweb.communiquons.org".to_string(),
|
||||||
group: self.group.clone().map(|g| g.0),
|
group: self.group.clone().map(|g| g.0),
|
||||||
|
cloud_init: Some(self.cloud_init.clone()),
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
os: OSXML {
|
os: OSXML {
|
||||||
@ -582,6 +587,13 @@ impl VMInfo {
|
|||||||
.and_then(|s| s.oem_strings)
|
.and_then(|s| s.oem_strings)
|
||||||
.map(|s| s.entries.iter().map(|o| o.content.to_string()).collect())
|
.map(|s| s.entries.iter().map(|o| o.content.to_string()).collect())
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
|
cloud_init: domain
|
||||||
|
.metadata
|
||||||
|
.clone()
|
||||||
|
.unwrap_or_default()
|
||||||
|
.virtweb
|
||||||
|
.cloud_init
|
||||||
|
.unwrap_or_default(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
virtweb_backend/src/utils/cloud_init_utils.rs
Normal file
19
virtweb_backend/src/utils/cloud_init_utils.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/// 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
|
||||||
|
/// cloud-localds source code: https://github.com/canonical/cloud-utils/blob/main/bin/cloud-localds
|
||||||
|
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, Default)]
|
||||||
|
pub struct CloudInitConfig {
|
||||||
|
attach_config: bool,
|
||||||
|
/// Main user data
|
||||||
|
user_data: String,
|
||||||
|
/// Instance ID, set in metadata file
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
instance_id: Option<String>,
|
||||||
|
/// Local hostname, set in metadata file
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
local_hostname: Option<String>,
|
||||||
|
/// Network configuration
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
network_configuration: Option<String>,
|
||||||
|
}
|
@ -1,3 +1,4 @@
|
|||||||
|
pub mod cloud_init_utils;
|
||||||
pub mod exec_utils;
|
pub mod exec_utils;
|
||||||
pub mod file_disks_utils;
|
pub mod file_disks_utils;
|
||||||
pub mod file_size_utils;
|
pub mod file_size_utils;
|
||||||
|
Reference in New Issue
Block a user