From fce8a894918c3d2cd32a4b8303fc7c8a8b6c814c Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 30 Apr 2025 20:57:23 +1200 Subject: [PATCH] . --- src/services.cpp | 48 +++++++------------ src/templates.cpp | 7 +-- .../example/.template_info.env | 4 ++ 3 files changed, 26 insertions(+), 33 deletions(-) create mode 100644 templates/dropshell-agent/example/.template_info.env diff --git a/src/services.cpp b/src/services.cpp index 6612ce7..3745634 100644 --- a/src/services.cpp +++ b/src/services.cpp @@ -209,19 +209,22 @@ void get_all_service_env_vars(const std::string &server_name, const std::string all_env_vars["SERVER"] = server_name; all_env_vars["SERVICE"] = service_name; - std::vector env_files = { - localfile::service_env(server_name,service_name), - localfile::template_info_env(server_name,service_name) + // Lambda function to load environment variables from a file + auto load_env_file = [&all_env_vars](const std::string& file) { + if (!file.empty() && std::filesystem::exists(file)) { + std::map env_vars; + envmanager env_manager(file); + env_manager.load(); + env_manager.get_all_variables(env_vars); + all_env_vars.merge(env_vars); + } + else + std::cout << "Warning: Expected environment file not found: " << file << std::endl; }; - for (const auto& file : env_files) { - // load service.env from the service on this machine. - std::map env_vars; - envmanager env_manager(file); - env_manager.load(); - env_manager.get_all_variables(env_vars); - all_env_vars.merge(env_vars); - } + // Load environment files + load_env_file(localfile::service_env(server_name, service_name)); + load_env_file(localfile::template_info_env(server_name, service_name)); // determine template name. auto it = all_env_vars.find("TEMPLATE"); @@ -233,26 +236,11 @@ void get_all_service_env_vars(const std::string &server_name, const std::string std::cerr << " " << localpath::service(server_name, service_name) << std::endl << std::endl; return; } - std::string template_name = it->second; template_info tinfo; - if (!get_template_info(template_name, tinfo)) { - std::cerr << "Error: Template '" << template_name << "' not found" << std::endl; - return; - } - - { // load _default.env from the template on this machine - gets overridden by service.env - std::map env_vars; - std::string defaultenvpath = tinfo.local_template_path + "/_default.env"; - if (std::filesystem::exists(defaultenvpath)) { - envmanager env_manager(defaultenvpath); - env_manager.load(); - env_manager.get_all_variables(env_vars); - all_env_vars.merge(env_vars); - } - else - std::cerr << "Warning: _default.env not found in template: " << defaultenvpath << std::endl; - } - + if (get_template_info(it->second, tinfo)) + load_env_file(tinfo.local_template_path + "/_default.env"); + else + std::cerr << "Error: Template '" << it->second << "' not found" << std::endl; } } // namespace dropshell diff --git a/src/templates.cpp b/src/templates.cpp index f46dcef..2cc97f4 100644 --- a/src/templates.cpp +++ b/src/templates.cpp @@ -233,22 +233,23 @@ env_manager.get_all_variables(env_vars); all_env_vars.merge(env_vars); } + } // determine template name. auto it = all_env_vars.find("TEMPLATE"); if (it == all_env_vars.end()) { - std::cerr << "Error: TEMPLATE variable not found in " << file << std::endl; + std::cerr << "Error: TEMPLATE variable not found in " << template_path << std::endl; return false; } std::string env_template_name = it->second; if (env_template_name.empty()) { - std::cerr << "Error: TEMPLATE variable is empty in " << file << std::endl; + std::cerr << "Error: TEMPLATE variable is empty in " << template_path << std::endl; return false; } if (env_template_name != template_name) { - std::cerr << "Error: TEMPLATE variable is wrong in " << file << std::endl; + std::cerr << "Error: TEMPLATE variable is wrong in " << template_path << std::endl; return false; } diff --git a/templates/dropshell-agent/example/.template_info.env b/templates/dropshell-agent/example/.template_info.env new file mode 100644 index 0000000..0334f93 --- /dev/null +++ b/templates/dropshell-agent/example/.template_info.env @@ -0,0 +1,4 @@ +# Template to use - always required! +TEMPLATE=dropshell-agent + +