Skip to content

Commit

Permalink
Added service_config bundle to aid in service config check/replace/se…
Browse files Browse the repository at this point in the history
…rvice restart

Ticket: ENT-11440
Changelog: title
  • Loading branch information
craigcomstock committed Oct 22, 2024
1 parent 0022069 commit add526f
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
72 changes: 72 additions & 0 deletions lib/service_config.cf
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# - service_started_file - a file which should have the timestamp of when the service was last started, typically a pid file or maybe /proc/<pid> directory.
# todo, maybe chmod, user, group for config_final_path
bundle agent service_config(
service_name,
config_template_path,
config_final_path,
validate_config_command,
template_data,
service_started_file
)
{
vars:

"staged_config" string => "$(config_final_path).staged";


methods:

"staged config rendered" usebundle => file_make_mustache($(staged_config), $(config_template_path), @(template_data));
"final config and restart" usebundle => validate_config_and_restart_service($(staged_config), $(validate_config_command), $(config_final_path), $(service_name), $(service_started_file));


reports:

DEBUG::
"template_data is ${with}" with => storejson(template_data);
}

bundle agent validate_config_and_restart_service(
staged_config,
validate_config_command,
config_final_path,
service_name,
service_started_file)
{
vars:
"validation_output" string => "$(staged_config)-validation.log";

classes:

"config_validated" expression => returnszero("$(validate_config_command) $(staged_config) >$(validation_output) 2>&1", "useshell");
"config_final_exists" expression => fileexists("$(config_final_path)");
"config_newer_than_started_file" expression => isnewerthan("$(config_final_path)", "$(service_started_file)"),
if => "$(service_name)_config_ok";


files:

"$(config_final_path)"
copy_from => local_dcp($(staged_config)),
if => "config_validated",
classes => scoped_classes_generic("bundle", "$(service_name)_config");


services:

"$(service_name)"
service_policy => "restart",
if => and("config_validated", or(not("config_final_exists"), "config_newer_than_started_file"));


reports:

DEBUG::
"service_started_file is $(service_started_file)";
"$(staged_config) validates" if => "config_validated";
"$(config_final_path) exists" if => "config_final_exists";
"$(config_final_path) is newer than service started file $(service_started_file)" if => "config_newer_than_started_file";

!config_validated::
"validation output ${with}" with => readfile("${validation_output}");
}
1 change: 1 addition & 0 deletions lib/stdlib.cf
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ bundle common stdlib_common
"input[files]" string => "$(this.promise_dirname)/files.cf";
"input[edit_xml]" string => "$(this.promise_dirname)/edit_xml.cf";
"input[services]" string => "$(this.promise_dirname)/services.cf";
"input[service_config]" string => "$(this.promise_dirname)/service_config.cf";
"input[processes]" string => "$(this.promise_dirname)/processes.cf";
"input[storage]" string => "$(this.promise_dirname)/storage.cf";
"input[databases]" string => "$(this.promise_dirname)/databases.cf";
Expand Down

0 comments on commit add526f

Please sign in to comment.