diff --git a/CHANGELOG.md b/CHANGELOG.md index 09e75075..faa4624b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ The **patch** part changes is incremented if multiple releases happen the same m ### Added * autosysadmin-agent: upstream release 24.03 +* autosysadmin-restart_nrpe: add role * certbot: Renewal hook for NRPE * kvm-host: add minifirewall rules if DRBD interface is configured diff --git a/autosysadmin-restart_nrpe/defaults/main.yml b/autosysadmin-restart_nrpe/defaults/main.yml new file mode 100644 index 00000000..3d743a1b --- /dev/null +++ b/autosysadmin-restart_nrpe/defaults/main.yml @@ -0,0 +1,8 @@ +--- + +general_scripts_dir: "/usr/share/scripts" + +restart_nrpe_path: "{{ general_scripts_dir }}/autosysadmin/restart/restart_nrpe" + +# Change this to customize the RUNNING value in the script +restart_nrpe_running: Null diff --git a/autosysadmin-restart_nrpe/files/upstream/restart_nrpe b/autosysadmin-restart_nrpe/files/upstream/restart_nrpe new file mode 100755 index 00000000..b2dd7f44 --- /dev/null +++ b/autosysadmin-restart_nrpe/files/upstream/restart_nrpe @@ -0,0 +1,105 @@ +#!/bin/bash + +: "${AUTOSYSADMIN_LIB:=/usr/local/lib/autosysadmin}" +source "${AUTOSYSADMIN_LIB}/common.sh" || exit 1 +source "${AUTOSYSADMIN_LIB}/restart.sh" || exit 1 + +## Possible values for RUNNING : +## never => disabled +## always => enabled +## nwh-fr => enabled during non-working-hours in France +## nwh-ca => enabled during non-working-hours in Canada (not supported yet) +## custom => enabled if `running_custom()` function return 0, otherwise disabled. + +# shellcheck disable=SC2034 +RUNNING="nwh-fr" + +## The name of the service, mainly for logging +service_name="nagios-nrpe-server" +## The SysVinit script name +sysvinit_script="${service_name}" +## The systemd service name +systemd_service="${service_name}.service" + +is_service_alive() { + ## this must return 0 if the service is alive, otherwise return 1 + ## Example: + pgrep -u nagios nrpe > /dev/null +} + +## Action for SysVinit system +sysvinit_action() { + # Save service status before restart + timeout 2 "/etc/init.d/${sysvinit_script}" status | save_in_log_dir "${service_name}.before.status" + + # Try to restart + timeout 20 "/etc/init.d/${sysvinit_script}" restart > /dev/null + rc=$? + if [ "${rc}" -eq "0" ]; then + log_action "Restart ${service_name}: OK" + else + log_action "Restart ${service_name}: failed" + fi + + # Save service status after restart + timeout 2 "/etc/init.d/${sysvinit_script}" status | save_in_log_dir "${service_name}.after.status" +} + +## Action for systemd system +systemd_action() { + # Save service status before restart + systemctl status "${systemd_service}" | save_in_log_dir "${service_name}.before.status" + + # Try to restart + # systemctl (only for NRPE ?) sometimes returns 0 even if the service has failed to start + # so we check the status explicitly + timeout 20 systemctl restart "${systemd_service}" > /dev/null \ + && sleep 1 \ + && systemctl status "${systemd_service}" > /dev/null + rc=$? + if [ "${rc}" -eq "0" ]; then + log_action "Restart ${service_name}: OK" + else + log_action "Restart ${service_name}: failed" + fi + + # Save service status after restart + systemctl status "${systemd_service}" | save_in_log_dir "${service_name}.after.status" +} + +# Should we run? +if ! is_supposed_to_run; then + # log_global "${PROGNAME} is not supposed to run (RUNNING=${RUNNING})." + exit 0 +fi +if is_service_alive; then + # log_global "${service_name} process alive. Aborting" + exit 0 +fi + +# Yes we do, so check for sysvinit or systemd +if is_debian_version "8" "<="; then + if ! is_sysvinit_enabled "*${sysvinit_script}*"; then + # log_global "${service_name} not enabled. Aborting" + exit 0 + fi + + # Let's finally do the action + pre_restart + sysvinit_action + post_restart +else + if ! is_systemd_enabled "${systemd_service}"; then + # log_global "${service_name} is disabled (or missing), nothing left to do." + exit 0 + fi + if is_systemd_active "${systemd_service}"; then + # log_global "${service_name} is active, nothing left to do." + exit 0 + fi + + # Let's finally do the action + pre_restart + systemd_action + post_restart +fi diff --git a/autosysadmin-restart_nrpe/tasks/main.yml b/autosysadmin-restart_nrpe/tasks/main.yml new file mode 100644 index 00000000..7a8ad5b0 --- /dev/null +++ b/autosysadmin-restart_nrpe/tasks/main.yml @@ -0,0 +1,24 @@ +--- + + - name: "Remount /usr if needed" + ansible.builtin.include_role: + name: remount-usr + + - name: "Copy restart_nrpe" + ansible.builtin.copy: + src: upstream/restart_nrpe + dest: "{{ restart_nrpe_path }}" + owner: "root" + group: "root" + mode: "0750" + + - name: "Customize RUNNING value" + ansible.builtin.lineinfile: + path: "{{ restart_nrpe_path }}" + line: "RUNNING=\"{{ restart_nrpe_running }}\"" + regexp: "^ *RUNNING=" + create: False + when: + - restart_nrpe_running is defined + - restart_nrpe_running != None + - restart_nrpe_running | length > 0