11//! # Cloud-Init Template Renderer
22//!
3- //! This module provides the `CloudInitTemplateRenderer `, a specialized template renderer for cloud-init.yml.tera
3+ //! This module provides the `CloudInitRenderer `, a specialized template renderer for cloud-init.yml.tera
44//! rendering within the `OpenTofu` deployment workflow. It extracts all cloud-init specific logic
5- //! from the main `TofuTemplateRenderer ` to follow the single responsibility principle.
5+ //! from the main `TofuProjectGenerator ` to follow the single responsibility principle.
66//!
77//! ## Purpose
88//!
9- //! The `CloudInitTemplateRenderer ` is responsible for:
9+ //! The `CloudInitRenderer ` is responsible for:
1010//! - Handling the `cloud-init.yml.tera` template file specifically
1111//! - Managing SSH public key injection into cloud-init configuration
1212//! - Creating appropriate contexts from SSH credentials
2020//! ```rust
2121//! # use std::sync::Arc;
2222//! # use std::path::Path;
23- //! # use torrust_tracker_deployer_lib::infrastructure::external_tools::tofu::template::common::renderer::cloud_init::CloudInitTemplateRenderer ;
23+ //! # use torrust_tracker_deployer_lib::infrastructure::external_tools::tofu::template::common::renderer::cloud_init::CloudInitRenderer ;
2424//! # use torrust_tracker_deployer_lib::domain::template::TemplateManager;
2525//! # use torrust_tracker_deployer_lib::domain::provider::Provider;
2626//! # use torrust_tracker_deployer_lib::shared::Username;
3535//! PathBuf::from("fixtures/testing_rsa.pub"),
3636//! Username::new("username").unwrap()
3737//! );
38- //! let renderer = CloudInitTemplateRenderer ::new(template_manager, Provider::Lxd);
38+ //! let renderer = CloudInitRenderer ::new(template_manager, Provider::Lxd);
3939//!
4040//! // Just demonstrate creating the renderer - actual rendering requires
4141//! // a proper template manager setup with cloud-init templates
@@ -54,7 +54,7 @@ use crate::domain::template::{TemplateManager, TemplateManagerError};
5454
5555/// Errors that can occur during cloud-init template rendering
5656#[ derive( Error , Debug ) ]
57- pub enum CloudInitTemplateError {
57+ pub enum CloudInitRendererError {
5858 /// Failed to get cloud-init template path from template manager
5959 #[ error( "Failed to get template path for 'cloud-init.yml.tera': {source}" ) ]
6060 TemplatePathFailed {
@@ -98,17 +98,17 @@ pub enum CloudInitTemplateError {
9898/// - Template rendering and output file writing
9999///
100100/// It follows the Single Responsibility Principle by focusing solely on cloud-init
101- /// template operations, making the main `TofuTemplateRenderer ` simpler and more focused.
101+ /// template operations, making the main `TofuProjectGenerator ` simpler and more focused.
102102///
103103/// Note: The provider field is kept for potential future provider-specific customization,
104104/// but currently all providers use the same common cloud-init template.
105- pub struct CloudInitTemplateRenderer {
105+ pub struct CloudInitRenderer {
106106 template_manager : Arc < TemplateManager > ,
107107 #[ allow( dead_code) ]
108108 provider : Provider ,
109109}
110110
111- impl CloudInitTemplateRenderer {
111+ impl CloudInitRenderer {
112112 /// Template file name for cloud-init configuration
113113 const CLOUD_INIT_TEMPLATE_FILE : & ' static str = "cloud-init.yml.tera" ;
114114
@@ -129,7 +129,7 @@ impl CloudInitTemplateRenderer {
129129 ///
130130 /// # Returns
131131 ///
132- /// A new `CloudInitTemplateRenderer` instance ready to render cloud-init templates
132+ /// * `CloudInitRenderer` - A new renderer instance
133133 #[ must_use]
134134 pub fn new ( template_manager : Arc < TemplateManager > , provider : Provider ) -> Self {
135135 Self {
@@ -154,7 +154,7 @@ impl CloudInitTemplateRenderer {
154154 /// # Returns
155155 ///
156156 /// * `Ok(())` on successful template rendering
157- /// * `Err(CloudInitTemplateError )` on any failure during the rendering process
157+ /// * `Err(CloudInitRendererError )` on any failure during the rendering process
158158 ///
159159 /// # Errors
160160 ///
@@ -170,7 +170,7 @@ impl CloudInitTemplateRenderer {
170170 & self ,
171171 ssh_credentials : & SshCredentials ,
172172 output_dir : & Path ,
173- ) -> Result < ( ) , CloudInitTemplateError > {
173+ ) -> Result < ( ) , CloudInitRendererError > {
174174 tracing:: debug!(
175175 provider = %self . provider,
176176 "Rendering cloud-init template with SSH public key injection"
@@ -181,16 +181,16 @@ impl CloudInitTemplateRenderer {
181181 let source_path = self
182182 . template_manager
183183 . get_template_path ( & template_path)
184- . map_err ( |source| CloudInitTemplateError :: TemplatePathFailed { source } ) ?;
184+ . map_err ( |source| CloudInitRendererError :: TemplatePathFailed { source } ) ?;
185185
186186 // Read template content from file
187187 let template_content = tokio:: fs:: read_to_string ( & source_path)
188188 . await
189- . map_err ( |source| CloudInitTemplateError :: TemplateReadError { source } ) ?;
189+ . map_err ( |source| CloudInitRendererError :: TemplateReadError { source } ) ?;
190190
191191 // Create File object for template processing
192192 let template_file = File :: new ( Self :: CLOUD_INIT_TEMPLATE_FILE , template_content)
193- . map_err ( |_| CloudInitTemplateError :: FileCreationFailed ) ?;
193+ . map_err ( |_| CloudInitRendererError :: FileCreationFailed ) ?;
194194
195195 // Render cloud-init template (shared logic for all providers)
196196 self . render_cloud_init ( & template_file, ssh_credentials, output_dir)
@@ -202,7 +202,7 @@ impl CloudInitTemplateRenderer {
202202 template_file : & File ,
203203 ssh_credentials : & SshCredentials ,
204204 output_dir : & Path ,
205- ) -> Result < ( ) , CloudInitTemplateError > {
205+ ) -> Result < ( ) , CloudInitRendererError > {
206206 use crate :: infrastructure:: external_tools:: tofu:: template:: common:: wrappers:: cloud_init:: {
207207 CloudInitContext , CloudInitTemplate ,
208208 } ;
@@ -211,21 +211,21 @@ impl CloudInitTemplateRenderer {
211211 // Note: All providers use the same context structure for cloud-init
212212 let cloud_init_context = CloudInitContext :: builder ( )
213213 . with_ssh_public_key_from_file ( & ssh_credentials. ssh_pub_key_path )
214- . map_err ( |_| CloudInitTemplateError :: SshKeyReadError ) ?
214+ . map_err ( |_| CloudInitRendererError :: SshKeyReadError ) ?
215215 . with_username ( ssh_credentials. ssh_username . as_str ( ) )
216- . map_err ( |_| CloudInitTemplateError :: ContextCreationFailed ) ?
216+ . map_err ( |_| CloudInitRendererError :: ContextCreationFailed ) ?
217217 . build ( )
218- . map_err ( |_| CloudInitTemplateError :: ContextCreationFailed ) ?;
218+ . map_err ( |_| CloudInitRendererError :: ContextCreationFailed ) ?;
219219
220220 // Create CloudInitTemplate with context
221221 let cloud_init_template = CloudInitTemplate :: new ( template_file, cloud_init_context)
222- . map_err ( |_| CloudInitTemplateError :: CloudInitTemplateCreationFailed ) ?;
222+ . map_err ( |_| CloudInitRendererError :: CloudInitTemplateCreationFailed ) ?;
223223
224224 // Render template to output file
225225 let output_path = output_dir. join ( Self :: CLOUD_INIT_OUTPUT_FILE ) ;
226226 cloud_init_template
227227 . render ( & output_path)
228- . map_err ( |_| CloudInitTemplateError :: CloudInitTemplateRenderFailed ) ?;
228+ . map_err ( |_| CloudInitRendererError :: CloudInitTemplateRenderFailed ) ?;
229229
230230 tracing:: debug!(
231231 provider = %self . provider,
@@ -310,7 +310,7 @@ users:
310310 #[ test]
311311 fn it_should_create_cloud_init_renderer_with_template_manager_and_provider ( ) {
312312 let template_manager = Arc :: new ( TemplateManager :: new ( std:: env:: temp_dir ( ) ) ) ;
313- let renderer = CloudInitTemplateRenderer :: new ( template_manager, Provider :: Lxd ) ;
313+ let renderer = CloudInitRenderer :: new ( template_manager, Provider :: Lxd ) ;
314314
315315 // Verify the renderer was created successfully
316316 // Just check that it contains the expected template manager reference
@@ -321,14 +321,14 @@ users:
321321 #[ test]
322322 fn it_should_build_common_template_path ( ) {
323323 // All providers use the common template path
324- let template_path = CloudInitTemplateRenderer :: build_template_path ( "cloud-init.yml.tera" ) ;
324+ let template_path = CloudInitRenderer :: build_template_path ( "cloud-init.yml.tera" ) ;
325325 assert_eq ! ( template_path, "tofu/common/cloud-init.yml.tera" ) ;
326326 }
327327
328328 #[ tokio:: test]
329329 async fn it_should_render_cloud_init_template_successfully ( ) {
330330 let template_manager = create_mock_template_manager_with_cloud_init ( ) ;
331- let renderer = CloudInitTemplateRenderer :: new ( template_manager, Provider :: Lxd ) ;
331+ let renderer = CloudInitRenderer :: new ( template_manager, Provider :: Lxd ) ;
332332
333333 let temp_dir = TempDir :: new ( ) . expect ( "Failed to create temp dir" ) ;
334334 let ssh_credentials = create_mock_ssh_credentials ( temp_dir. path ( ) ) ;
@@ -367,7 +367,7 @@ users:
367367 #[ tokio:: test]
368368 async fn it_should_fail_when_ssh_key_file_missing ( ) {
369369 let template_manager = create_mock_template_manager_with_cloud_init ( ) ;
370- let renderer = CloudInitTemplateRenderer :: new ( template_manager, Provider :: Lxd ) ;
370+ let renderer = CloudInitRenderer :: new ( template_manager, Provider :: Lxd ) ;
371371
372372 // Create SSH credentials with non-existent key file
373373 let temp_dir = TempDir :: new ( ) . expect ( "Failed to create temp dir" ) ;
@@ -384,7 +384,7 @@ users:
384384
385385 assert ! ( result. is_err( ) , "Should fail when SSH key file is missing" ) ;
386386 match result. unwrap_err ( ) {
387- CloudInitTemplateError :: SshKeyReadError => {
387+ CloudInitRendererError :: SshKeyReadError => {
388388 // Expected error type
389389 }
390390 other => panic ! ( "Expected SshKeyReadError, got: {other:?}" ) ,
@@ -394,7 +394,7 @@ users:
394394 #[ tokio:: test]
395395 async fn it_should_fail_when_output_directory_is_readonly ( ) {
396396 let template_manager = create_mock_template_manager_with_cloud_init ( ) ;
397- let renderer = CloudInitTemplateRenderer :: new ( template_manager, Provider :: Lxd ) ;
397+ let renderer = CloudInitRenderer :: new ( template_manager, Provider :: Lxd ) ;
398398
399399 let temp_dir = TempDir :: new ( ) . expect ( "Failed to create temp dir" ) ;
400400 let ssh_credentials = create_mock_ssh_credentials ( temp_dir. path ( ) ) ;
@@ -415,7 +415,7 @@ users:
415415 "Should fail when output directory is readonly"
416416 ) ;
417417 match result. unwrap_err ( ) {
418- CloudInitTemplateError :: CloudInitTemplateRenderFailed => {
418+ CloudInitRendererError :: CloudInitTemplateRenderFailed => {
419419 // Expected error type
420420 }
421421 other => panic ! ( "Expected CloudInitTemplateRenderFailed, got: {other:?}" ) ,
0 commit comments