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::utils::cloud_init_utils::CloudInitConfig;
 | 
			
		||||
 | 
			
		||||
/// VirtWeb specific metadata
 | 
			
		||||
#[derive(serde::Serialize, serde::Deserialize, Default, Debug, Clone)]
 | 
			
		||||
@@ -8,6 +9,8 @@ pub struct DomainMetadataVirtWebXML {
 | 
			
		||||
    pub ns: String,
 | 
			
		||||
    #[serde(skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub group: Option<String>,
 | 
			
		||||
    #[serde(skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub cloud_init: Option<CloudInitConfig>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Domain metadata
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ use crate::libvirt_lib_structures::XMLUuid;
 | 
			
		||||
use crate::libvirt_lib_structures::domain::*;
 | 
			
		||||
use crate::libvirt_rest_structures::LibVirtStructError;
 | 
			
		||||
use crate::libvirt_rest_structures::LibVirtStructError::StructureExtraction;
 | 
			
		||||
use crate::utils::cloud_init_utils::CloudInitConfig;
 | 
			
		||||
use crate::utils::file_size_utils::FileSize;
 | 
			
		||||
use crate::utils::files_utils;
 | 
			
		||||
use crate::utils::vm_file_disks_utils::{VMDiskBus, VMDiskFormat, VMFileDisk};
 | 
			
		||||
@@ -94,6 +95,9 @@ pub struct VMInfo {
 | 
			
		||||
    pub tpm_module: bool,
 | 
			
		||||
    /// Strings injected as OEM Strings in SMBios configuration
 | 
			
		||||
    pub oem_strings: Vec<String>,
 | 
			
		||||
    /// Cloud init configuration
 | 
			
		||||
    #[serde(default)]
 | 
			
		||||
    pub cloud_init: CloudInitConfig,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl VMInfo {
 | 
			
		||||
@@ -340,6 +344,7 @@ impl VMInfo {
 | 
			
		||||
                virtweb: DomainMetadataVirtWebXML {
 | 
			
		||||
                    ns: "https://virtweb.communiquons.org".to_string(),
 | 
			
		||||
                    group: self.group.clone().map(|g| g.0),
 | 
			
		||||
                    cloud_init: Some(self.cloud_init.clone()),
 | 
			
		||||
                },
 | 
			
		||||
            }),
 | 
			
		||||
            os: OSXML {
 | 
			
		||||
@@ -582,6 +587,13 @@ impl VMInfo {
 | 
			
		||||
                .and_then(|s| s.oem_strings)
 | 
			
		||||
                .map(|s| s.entries.iter().map(|o| o.content.to_string()).collect())
 | 
			
		||||
                .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 file_disks_utils;
 | 
			
		||||
pub mod file_size_utils;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user