From c21f175217d4023af305387a1729dbfae60deb5e Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Fri, 11 Apr 2025 12:32:23 +0200 Subject: [PATCH] feat(config): enable reuse of mfm configuration variables This change introduces a two-pass parsing approach to allow reuse of mfm configuration variables within other configuration parts. This initial implementation does not handle recursive dependencies, which is acceptable for the current requirements. - Implemented a two-pass parsing mechanism for configuration files. - Added mfm configuration variables to the Crinja render context in both passes. - Ensured the global mount point base is safely retrieved and validated in each pass. Signed-off-by: Glenn Y. Rolland --- src/config.cr | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/config.cr b/src/config.cr index d375cce..19d549e 100644 --- a/src/config.cr +++ b/src/config.cr @@ -94,14 +94,37 @@ module GX exit(1) end + ## PASS 1 file_data = File.read(config_path) - file_patched = Crinja.render(file_data, {"env" => ENV.to_h}) - + file_patched = Crinja.render( + file_data, + { + "env" => ENV.to_h, + "mfm" => { + "global" => {"mount_point_base" => "" } + } + } + ) root = Models::RootConfig.from_yaml(file_patched) mount_point_base_safe = root.global.mount_point_base raise Models::InvalidMountpointError.new("Invalid global mount point") if mount_point_base_safe.nil? + ## PASS 2 + file_patched = Crinja.render( + file_data, + { + "env" => ENV.to_h, + "mfm" => { + "global" => {"mount_point_base" => mount_point_base_safe } + } + } + ) + + root = Models::RootConfig.from_yaml(file_patched) + mount_point_base_safe = root.global.mount_point_base + raise Models::InvalidMountpointError.new("Invalid global mount point") if mount_point_base_safe.nil? + root.filesystems.each do |selected_filesystem| if !selected_filesystem.mount_point? selected_filesystem.mount_point =