diff --git a/techniques/system/distributePolicy/1.0/metadata.xml b/techniques/system/distributePolicy/1.0/metadata.xml index 097bf4b51..53873ce6b 100644 --- a/techniques/system/distributePolicy/1.0/metadata.xml +++ b/techniques/system/distributePolicy/1.0/metadata.xml @@ -69,6 +69,9 @@ along with this program. If not, see . SUB_NODES_ID SUB_NODES_KEYHASH SUB_NODES_SERVER + RELAY_SYNC_METHOD + RELAY_SYNC_PROMISES + RELAY_SYNC_SHAREDFILES diff --git a/techniques/system/distributePolicy/1.0/propagatePromises.st b/techniques/system/distributePolicy/1.0/propagatePromises.st index 253e37b37..abd015a61 100644 --- a/techniques/system/distributePolicy/1.0/propagatePromises.st +++ b/techniques/system/distributePolicy/1.0/propagatePromises.st @@ -37,6 +37,8 @@ bundle agent propagatePromises rudder_tools_updated_exists:: "tools_timestamp" string => readfile("${g.rudder_tools_updated_origin}", 2048); + + classes: # Ensure the validity of the timestamp file for tools rudder_tools_updated_exists:: @@ -45,6 +47,17 @@ bundle agent propagatePromises root_server:: "rudder_tools_updated_exists" expression => fileexists("${g.rudder_tools_updated_origin}"); + !root_server:: + "sync_method_disable" expression => strcmp("&RELAY_SYNC_METHOD&", "disable"); + "sync_method_rsync" expression => strcmp("&RELAY_SYNC_METHOD&", "rsync"); + "sync_promises" expression => strcmp("&RELAY_SYNC_PROMISES&", "true"); + "sync_sharedfiles" expression => strcmp("&RELAY_SYNC_SHAREDFILES&", "true"); + + "disable_classic_promises" expression => "sync_promises.(sync_method_rsync|sync_method_disable)"; + "disable_classic_sharedfiles" expression => "sync_sharedfiles.(sync_method_rsync|sync_method_disable)"; + "rsync_promises" expression => "sync_promises.sync_method_rsync"; + "rsync_sharedfiles" expression => "sync_sharedfiles.sync_method_rsync"; + any:: "pass3" expression => "pass2"; "pass2" expression => "pass1"; @@ -76,7 +89,7 @@ bundle agent propagatePromises comment => "Enforce the ncf configuration file", classes => classes_generic("configure_ncf_config"); - (policy_server|role_rudder_relay_promises_only).!root_server:: + (policy_server|role_rudder_relay_promises_only).!root_server.!disable_classic_promises:: "${client_data}" #that's a loop on each files in client_inputs copy_from => remote("${server_info.cfserved}","${server_data}"), @@ -84,6 +97,8 @@ bundle agent propagatePromises comment => "Fetching the promises to propagate", classes => if_else("promises_propagated", "could_not_propagate_promise"); + (policy_server|role_rudder_relay_promises_only).!root_server.!disable_classic_sharedfiles:: + "${g.rudder_var}/shared-files/" copy_from => remote("${server_info.cfserved}","${g.rudder_var}/shared-files/${g.uuid}/shared-files"), depth_search => recurse_visible("inf"), @@ -160,6 +175,15 @@ bundle agent propagatePromises comment => "Copying list of nodes under this policy server", classes => if_else("nodeslist_copied", "could_not_copy_nodeslist"); + + commands: + policy_server.!root_server.rsync_promises:: + "/usr/bin/rsync --archive --checksum --compress --sparse --delete ${server_info.cfserved}:${server_data}/ ${client_data}" + classes => if_else("promises_propagated", "could_not_propagate_promise"); + policy_server.!root_server.rsync_sharedfiles:: + "/usr/bin/rsync --archive --checksum --compress --sparse --delete ${server_info.cfserved}:&SHARED_FILES_FOLDER&/ &SHARED_FILES_FOLDER&/" + classes => if_else("files_propagated", "could_not_propagate_files"); + methods: root_server:: "any" usebundle => rudder_common_reports_generic("DistributePolicy", "configure_ncf_config", "&TRACKINGKEY&", "Configure ncf", "None", "Configure configuration library"); @@ -170,14 +194,18 @@ bundle agent propagatePromises # Success if files are updated or not changed (kept or repaired). # root server have only tools to be updated and others have tools, # promises, masterfiles folder to be updated. - pass3.(((root_server.propagate_tools_ok)|(!root_server.propagate_tools_ok.(promises_propagated|empty_promises_to_propagate).(shared_files_propagated|sharedfiles_not_existent).masterfiles_propagated.ncf_local_promises_propagated.ncf_common_promises_propagated.nodeslist_copied)).!(propagate_tools_error|promises_to_propagate_not_copied|sharedfiles_not_copied|could_not_propagate_masterfiles|could_not_propagate_ncf_local_promise|could_not_propagate_ncf_common_promise|could_not_copy_nodeslist)):: + pass3.(((root_server.propagate_tools_ok)|(!root_server.propagate_tools_ok.(promises_propagated|empty_promises_to_propagate|disable_classic_promises).(shared_files_propagated|sharedfiles_not_existent|disable_classic_sharedfiles).masterfiles_propagated.ncf_local_promises_propagated.ncf_common_promises_propagated.nodeslist_copied)).!(propagate_tools_error|promises_to_propagate_not_copied|sharedfiles_not_copied|could_not_propagate_masterfiles|could_not_propagate_ncf_local_promise|could_not_propagate_ncf_common_promise|could_not_copy_nodeslist)):: "any" usebundle => rudder_common_report("DistributePolicy", "result_success", "&TRACKINGKEY&", "Propagate promises", "None", "All files have been propagated"); + pass3.promises_to_propagate_not_copied:: "any" usebundle => rudder_common_report("DistributePolicy", "result_error", "&TRACKINGKEY&", "Propagate promises", "None", "Cannot propagate policy"); pass3.sharedfiles_not_copied:: "any" usebundle => rudder_common_report("DistributePolicy", "result_error", "&TRACKINGKEY&", "Propagate promises", "None", "Cannot propagate shared files"); + pass3.could_not_propagate_promise:: + "any" usebundle => rudder_common_report("DistributePolicy", "result_error", "&TRACKINGKEY&", "Propagate promises", "None", "Cannot propagate promises"); + pass3.could_not_propagate_files:: "any" usebundle => rudder_common_report("DistributePolicy", "result_error", "&TRACKINGKEY&", "Propagate promises", "None", "Cannot propagate shared files");