template tidying
This commit is contained in:
@@ -66,7 +66,7 @@ namespace dropshell
|
||||
auto it = find_var(variables, variable_name);
|
||||
if (it == variables.end())
|
||||
{
|
||||
error << "Variable " << variable_name << " not found in the service " << filenames::template_info_env << std::endl;
|
||||
error << "Variable " << variable_name << " not found." << std::endl;
|
||||
return false;
|
||||
}
|
||||
return it->second == "true";
|
||||
@@ -74,7 +74,6 @@ namespace dropshell
|
||||
|
||||
LocalServiceInfo get_service_info(const std::string &server_name, const std::string &service_name, bool skip_update)
|
||||
{
|
||||
LocalServiceInfo service;
|
||||
|
||||
if (server_name.empty() || service_name.empty())
|
||||
return LocalServiceInfo();
|
||||
@@ -82,6 +81,10 @@ namespace dropshell
|
||||
if (!legal_service_name(service_name))
|
||||
return LocalServiceInfo();
|
||||
|
||||
|
||||
LocalServiceInfo service;
|
||||
template_info tinfo;
|
||||
|
||||
service.service_name = service_name;
|
||||
|
||||
service.local_service_path = localpath::service(server_name, service_name);
|
||||
@@ -96,45 +99,54 @@ namespace dropshell
|
||||
}
|
||||
|
||||
// now set the template name and path.
|
||||
ordered_env_vars variables;
|
||||
if (!get_all_service_env_vars(server_name, service_name, variables))
|
||||
return LocalServiceInfo();
|
||||
|
||||
{ // confirm TEMPLATE is defined.
|
||||
{ // service.env variables.
|
||||
ordered_env_vars variables;
|
||||
envmanager env_manager(localfile::service_env(server_name, service_name));
|
||||
bool ok = env_manager.load();
|
||||
env_manager.get_all_variables(variables);
|
||||
ASSERT(ok, "Failed to load env variables from "+localfile::service_env(server_name, service_name));
|
||||
auto it = find_var(variables, "TEMPLATE");
|
||||
if (it == variables.end())
|
||||
{
|
||||
error << "TEMPLATE variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
info << "Path is " << localfile::service_env(server_name, service_name) << std::endl;
|
||||
return LocalServiceInfo();
|
||||
}
|
||||
service.template_name = it->second;
|
||||
}
|
||||
|
||||
template_info tinfo = gTemplateManager().get_template_info(service.template_name,skip_update);
|
||||
if (!tinfo.is_set())
|
||||
{
|
||||
// Template not found - this means it's not available locally OR from registry
|
||||
error << "Template '" << service.template_name << "' not found locally or in registry" << std::endl;
|
||||
return LocalServiceInfo();
|
||||
}
|
||||
|
||||
// Template is available (either locally or downloaded from registry)
|
||||
service.local_template_path = tinfo.local_template_path();
|
||||
|
||||
{ // set the user.
|
||||
auto it = find_var(variables, "SSH_USER");
|
||||
if (it == variables.end())
|
||||
tinfo = gTemplateManager().get_template_info(service.template_name,skip_update);
|
||||
if (!tinfo.is_set())
|
||||
{
|
||||
error << "SSH_USER variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
// Template not found - this means it's not available locally OR from registry
|
||||
error << "Template '" << service.template_name << "' not found locally or in registry" << std::endl;
|
||||
return LocalServiceInfo();
|
||||
}
|
||||
service.user = it->second;
|
||||
|
||||
// Template is available (either locally or downloaded from registry)
|
||||
service.local_template_path = tinfo.local_template_path();
|
||||
|
||||
{ // set the user.
|
||||
auto it = find_var(variables, "SSH_USER");
|
||||
if (it == variables.end())
|
||||
{
|
||||
error << "SSH_USER variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
return LocalServiceInfo();
|
||||
}
|
||||
service.user = it->second;
|
||||
}
|
||||
}
|
||||
|
||||
// set the host root and docker requirements.
|
||||
service.requires_host_root = get_bool_variable(variables, "REQUIRES_HOST_ROOT");
|
||||
service.requires_docker = get_bool_variable(variables, "REQUIRES_DOCKER");
|
||||
service.requires_docker_root = get_bool_variable(variables, "REQUIRES_DOCKER_ROOT");
|
||||
// set the host root and docker requirements from the template_info.env
|
||||
{ // template_info.env variables.
|
||||
ordered_env_vars template_variables;
|
||||
envmanager template_env_manager(tinfo.local_template_info_env_path());
|
||||
template_env_manager.load();
|
||||
template_env_manager.get_all_variables(template_variables);
|
||||
|
||||
service.requires_host_root = get_bool_variable(template_variables, "REQUIRES_HOST_ROOT");
|
||||
service.requires_docker = get_bool_variable(template_variables, "REQUIRES_DOCKER");
|
||||
service.requires_docker_root = get_bool_variable(template_variables, "REQUIRES_DOCKER_ROOT");
|
||||
}
|
||||
|
||||
return service;
|
||||
}
|
||||
@@ -196,70 +208,70 @@ namespace dropshell
|
||||
return backups;
|
||||
}
|
||||
|
||||
bool get_all_service_env_vars(const std::string &server_name, const std::string &service_name, ordered_env_vars &all_env_vars)
|
||||
{
|
||||
clear_vars(all_env_vars);
|
||||
// bool get_all_service_env_vars(const std::string &server_name, const std::string &service_name, ordered_env_vars &all_env_vars)
|
||||
// {
|
||||
// clear_vars(all_env_vars);
|
||||
|
||||
if (localpath::service(server_name, service_name).empty() || !fs::exists(localpath::service(server_name, service_name)))
|
||||
{
|
||||
error << "Service not found: " << service_name << " on server " << server_name << std::endl;
|
||||
return false;
|
||||
}
|
||||
// if (localpath::service(server_name, service_name).empty() || !fs::exists(localpath::service(server_name, service_name)))
|
||||
// {
|
||||
// error << "Service not found: " << service_name << " on server " << server_name << std::endl;
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// 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))
|
||||
{
|
||||
ordered_env_vars env_vars;
|
||||
envmanager env_manager(file);
|
||||
env_manager.load();
|
||||
env_manager.get_all_variables(env_vars);
|
||||
merge_vars(all_env_vars, env_vars);
|
||||
}
|
||||
else
|
||||
warning << "Expected environment file not found: " << file << std::endl;
|
||||
};
|
||||
// // 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))
|
||||
// {
|
||||
// ordered_env_vars env_vars;
|
||||
// envmanager env_manager(file);
|
||||
// env_manager.load();
|
||||
// env_manager.get_all_variables(env_vars);
|
||||
// merge_vars(all_env_vars, env_vars);
|
||||
// }
|
||||
// else
|
||||
// warning << "Expected environment file not found: " << file << std::endl;
|
||||
// };
|
||||
|
||||
|
||||
// add in some simple variables first, as others below may depend on/use these in bash.
|
||||
set_var(all_env_vars, "SERVER", server_name);
|
||||
set_var(all_env_vars, "SERVICE", service_name);
|
||||
set_var(all_env_vars, "DOCKER_CLI_HINTS", "false"); // turn off docker junk.
|
||||
// // add in some simple variables first, as others below may depend on/use these in bash.
|
||||
// set_var(all_env_vars, "SERVER", server_name);
|
||||
// set_var(all_env_vars, "SERVICE", service_name);
|
||||
// set_var(all_env_vars, "DOCKER_CLI_HINTS", "false"); // turn off docker junk.
|
||||
|
||||
// Load environment files
|
||||
load_env_file(localfile::service_env(server_name, service_name));
|
||||
// // Load environment files
|
||||
// load_env_file(localfile::service_env(server_name, service_name));
|
||||
|
||||
std::string template_name = get_var(all_env_vars, "TEMPLATE");
|
||||
if (template_name.empty())
|
||||
{
|
||||
error << "TEMPLATE variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
return false;
|
||||
}
|
||||
auto tinfo = gTemplateManager().get_template_info(template_name, true); // skip updates.
|
||||
if (!tinfo.is_set())
|
||||
{
|
||||
// Template is not available locally or from registry
|
||||
error << "Template '" << template_name << "' not found locally or in registry" << std::endl;
|
||||
return false;
|
||||
}
|
||||
ASSERT(std::filesystem::exists(tinfo.local_template_info_env_path()));
|
||||
load_env_file(tinfo.local_template_info_env_path());
|
||||
// std::string template_name = get_var(all_env_vars, "TEMPLATE");
|
||||
// if (template_name.empty())
|
||||
// {
|
||||
// error << "TEMPLATE variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
// return false;
|
||||
// }
|
||||
// auto tinfo = gTemplateManager().get_template_info(template_name, true); // skip updates.
|
||||
// if (!tinfo.is_set())
|
||||
// {
|
||||
// // Template is not available locally or from registry
|
||||
// error << "Template '" << template_name << "' not found locally or in registry" << std::endl;
|
||||
// return false;
|
||||
// }
|
||||
// ASSERT(std::filesystem::exists(tinfo.local_template_info_env_path()));
|
||||
// load_env_file(tinfo.local_template_info_env_path());
|
||||
|
||||
std::string user = get_var(all_env_vars, "SSH_USER");
|
||||
if (user.empty())
|
||||
{
|
||||
error << "SSH_USER variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
info << "This variable definition is always required, and usually set in the "<<filenames::service_env << " file." << std::endl;
|
||||
info << "Please check " << localfile::service_env(server_name, service_name) << std::endl;
|
||||
return false;
|
||||
}
|
||||
// std::string user = get_var(all_env_vars, "SSH_USER");
|
||||
// if (user.empty())
|
||||
// {
|
||||
// error << "SSH_USER variable not defined in service " << service_name << " on server " << server_name << std::endl;
|
||||
// info << "This variable definition is always required, and usually set in the "<<filenames::service_env << " file." << std::endl;
|
||||
// info << "Please check " << localfile::service_env(server_name, service_name) << std::endl;
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// more additional, these depend on others above.
|
||||
set_var(all_env_vars, "CONFIG_PATH", remotepath(server_name, user).service_config(service_name));
|
||||
set_var(all_env_vars, "AGENT_PATH", remotepath(server_name, user).agent());
|
||||
// // more additional, these depend on others above.
|
||||
// set_var(all_env_vars, "CONFIG_PATH", remotepath(server_name, user).service_config(service_name));
|
||||
// set_var(all_env_vars, "AGENT_PATH", remotepath(server_name, user).agent());
|
||||
|
||||
return true;
|
||||
}
|
||||
// return true;
|
||||
// }
|
||||
|
||||
} // namespace dropshell
|
||||
|
||||
Reference in New Issue
Block a user