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