From 4d03fd3231c0c8c3c9fab5a797c098782a1ba678 Mon Sep 17 00:00:00 2001
From: Chris Croome <chris@webarchitects.co.uk>
Date: Fri, 4 Apr 2025 10:21:29 +0100
Subject: [PATCH] wip

---
 defaults/main.yml               |   7 +-
 files/network-services.conf     | 130 ++++++++++++++++++
 meta/argument_specs.yml         |   9 ++
 tasks/config.yml                |  32 ++++-
 tasks/install.yml               |  10 ++
 tasks/main.yml                  |   8 +-
 tasks/master_config.yml         |   3 +-
 tasks/plugin_linuxfabrik.yml    |  11 ++
 templates/api-user.conf.j2      |   2 +-
 templates/api-users.conf.j2     |   2 +-
 templates/checks.conf.j2        |   2 +-
 templates/constants.conf.j2     |  10 +-
 templates/host.conf.j2          |   2 +-
 templates/icinga.pref.j2        |   2 +-
 templates/icinga2.conf.j2       |   2 +-
 templates/ido-mysql.conf.j2     |   2 +-
 templates/linuxfabrik.conf.j2   |   8 +-
 templates/linuxfabrik.pref.j2   |   2 +
 templates/notifications.conf.j2 |   2 +-
 templates/services.conf.j2      |   3 +-
 templates/users.conf.j2         |   2 +-
 templates/zones.conf.j2         |   2 +-
 vars/main.yml                   | 228 ++++++++++++++++++++++++++++++++
 23 files changed, 458 insertions(+), 23 deletions(-)
 create mode 100644 files/network-services.conf

diff --git a/defaults/main.yml b/defaults/main.yml
index 883545f..83cfbc2 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -16,15 +16,16 @@ icinga_api_users_dir: /etc/icinga2/conf.d/api-users
 icinga_linuxfabrik: false
 icinga_linuxfabrik_plugins:
   - name: apache-httpd-status
-  # This causes a failure
-  # - name: fail2ban
+  # Don't enable fail2ban as it clashes with the one defined in
+  # /usr/share/icinga2/include/plugins-contrib.d/network-services.conf
+  - name: fail2ban
+    sudo: true
   - name: gitlab-health
   - name: mysql-connections
   - name: mysql-memory
   - name: mysql-open-files
   - name: mysql-slow-queries
   - name: needs-restarting
-  - name: nextcloud-security-scan
   - name: nextcloud-stats
   - name: nextcloud-version
   - name: php-fpm-status
diff --git a/files/network-services.conf b/files/network-services.conf
new file mode 100644
index 0000000..99a2595
--- /dev/null
+++ b/files/network-services.conf
@@ -0,0 +1,130 @@
+/* Ansible managed */
+/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
+
+object CheckCommand "kdc" {
+	import "ipv4-or-ipv6"
+
+	command = [ PluginContribDir + "/check_kdc" ]
+
+	arguments = {
+		"-H" = {
+			value = "$kdc_address$"
+			description = "Name or IP address of KDC to check."
+		}
+		"-P" = {
+			value = "$kdc_port$"
+			description = "Port on which KDC runs (default 88)."
+		}
+		"-p" = {
+			value = "$kdc_principal$"
+			description = "Principal name to authenticate as (including realm)."
+			required = true
+		}
+		"-k" = {
+			value = "$kdc_keytab$"
+			description = "Keytab file containing principal's key."
+			required = true
+		}
+	}
+
+	vars.kdc_address = "$check_address$"
+}
+
+object CheckCommand "rbl" {
+	import "ipv4-or-ipv6"
+
+	command = [ PluginContribDir + "/check_rbl" ]
+
+	arguments = {
+		"-H" = {
+			value = "$rbl_hostname$"
+			description = "Name or IP address of SMTP server to check."
+		}
+		"-s" = {
+			value = "$rbl_server$"
+			description = "List of RBL servers as an array."
+			required = true
+			repeat_key = true
+		}
+		"-w" = {
+			value = "$rbl_warning$"
+			description = "Number of blacklisting servers for a warning."
+		}
+		"-c" = {
+			value = "$rbl_critical$"
+			description = "Number of blacklisting servers for a critical."
+		}
+		"-t" = {
+			value = "$rbl_timeout$"
+			description = "Seconds before plugin times out (default: 15)."
+		}
+	}
+
+	vars.rbl_hostname = "$check_address$"
+	vars.rbl_timeout = 15
+	vars.rbl_warning = 1
+	vars.rbl_critical = 1
+}
+
+object CheckCommand "lsyncd" {
+	import "plugin-check-command"
+	command = [ PluginContribDir + "/check_lsyncd" ]
+
+	arguments = {
+		"-s" = {
+			value = "$lsyncd_statfile$"
+			description = "Set status file path (default: /var/run/lsyncd.status)."
+		}
+		"-w" = {
+			value = "$lsyncd_warning$"
+			description = "Warning if more than N delays (default: 10)."
+		}
+		"-c" = {
+			value = "$lsyncd_critical$"
+			description = "Critical if more then N delays (default: 100)."
+		}
+	}
+}
+
+/* Commented so the Linuxfabrik fail2ban plugin can be used
+ *
+ * object CheckCommand "fail2ban" {
+ * 	command = [ "sudo", PluginContribDir + "/check_fail2ban" ]
+ *
+ * 	arguments = {
+ * 		"-D" = {
+ * 			value = "$fail2ban_display$"
+ * 			description = "To modify the output display, default is 'CHECK FAIL2BAN ACTIVITY'"
+ * 		}
+ * 		"-P" = {
+ * 			value = "$fail2ban_path$"
+ * 			description = "Specify the path to the tw_cli binary, default value is /usr/bin/fail2ban-client"
+ * 		}
+ * 		"-w" = {
+ * 			value = "$fail2ban_warning$"
+ * 			description = "Specify a warning threshold, default is 1"
+ * 		}
+ * 		"-c" = {
+ * 			value = "$fail2ban_critical$"
+ * 			description = "Specify a critical threshold, default is 2"
+ * 		}
+ * 		"-s" = {
+ * 			value = "$fail2ban_socket$"
+ * 			description = "Specify a socket path, default is unset"
+ * 		}
+ * 		"-p" = {
+ * 			set_if = "$fail2ban_perfdata$"
+ * 			description = "If set to true, activate the perfdata output"
+ * 		}
+ * 		"-j" = {
+ * 			value = "$fail2ban_jail$"
+ * 			description = "Specify the name of the specific jail to monitor; omitted by default, i.e. all jails are being monitored"
+ * 		}
+ * 	}
+ *
+ * 	vars.fail2ban_perfdata = true
+ * }
+ *
+ */
+
+/* vim: syntax=icinga2 */
diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml
index 8b3dc25..6b7b20a 100644
--- a/meta/argument_specs.yml
+++ b/meta/argument_specs.yml
@@ -129,6 +129,15 @@ argument_specs:
             type: str
             required: true
             description: The name of the Linuxfabrik plugin that should be made available for Icinga.
+          sudo:
+            type: bool
+            required: false
+            description: Run the Linuxfabrik plugin using sudo.
+      icinga_linuxfabrik_plugins_available:
+        type: list
+        elements: str
+        required: true
+        description: An internal list of Linuxfabrik plugins that are available in the monitoring plugins package.
       icinga_linuxfabrik_pkg:
         type: list
         elements: str
diff --git a/tasks/config.yml b/tasks/config.yml
index c9d8fe0..ada109b 100644
--- a/tasks/config.yml
+++ b/tasks/config.yml
@@ -8,7 +8,7 @@
 #
 # You should have received a copy of the GNU General Public License along with the Webarchitects Icinga Ansible role. If not, see <https://www.gnu.org/licenses/>.
 ---
-- name: Icinga common configuration for master agent nodes
+- name: Icinga common configuration for master and agent nodes
   block:
 
     - name: Nagios plugins installed for Debian
@@ -25,6 +25,36 @@
         state: present
       when: ansible_facts.distribution == "Ubuntu"
 
+    - name: Salt for master node
+      block:
+
+        - name: Salt present in /root/icinga.salt
+          ansible.builtin.shell: pwgen -n 32 1 > /root/icinga.salt
+          args:
+            creates: /root/icinga.salt
+
+        - name: Slurp /root/icinga.salt
+          ansible.builtin.slurp:
+            src: /root/icinga.salt
+          register: icinga_salt_b64encoded
+
+        - name: Decode the base64 encoded version of salt and set a variable
+          ansible.builtin.set_fact:
+            icinga_salt: "{{ icinga_salt_b64encoded['content'] | b64decode | trim }}"
+
+      when:
+        - inventory_hostname == icinga_master_node
+        - inventory_hostname in groups['icinga_master_nodes']
+
+    - name: Icinga constants configuration file in place
+      ansible.builtin.template:
+        src: "constants.conf.j2"
+        dest: "/etc/icinga2/constants.conf"
+        backup: true
+        owner: nagios
+        group: nagios
+        mode: "0640"
+
   when:
     - ( groups['icinga_master_nodes'] is defined ) or ( groups['icinga_agent_nodes'] is defined )
     - ( inventory_hostname in groups['icinga_master_nodes'] ) or ( inventory_hostname in groups['icinga_agent_nodes'] )
diff --git a/tasks/install.yml b/tasks/install.yml
index 7a0ddbe..42f3ce3 100644
--- a/tasks/install.yml
+++ b/tasks/install.yml
@@ -81,6 +81,16 @@
           tags:
             - debug
 
+        - name: Overwrite network-services.conf to omit fail2ban configuration so Linuxfabrik fail2ban plugin can be used
+          ansible.builtin.copy:
+            src: network-services.conf
+            dest: /usr/share/icinga2/include/plugins-contrib.d/network-services.conf
+            backup: true
+            mode: "0644"
+            owner: root
+            group: root
+          when: ( "icinga2-common" in ansible_facts.packages.keys() )
+
         - name: "Directory for Linuxfabrik plugin JSON present for version {{ icinga_linuxfabrik_version }}"
           ansible.builtin.file:
             path: "/usr/local/share/icinga2/linuxfabrik/{{ icinga_linuxfabrik_version }}"
diff --git a/tasks/main.yml b/tasks/main.yml
index 60fbab4..88318ff 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -77,6 +77,11 @@
       tags:
         - icinga_linuxfabrik
 
+    - name: Include common config tasks
+      ansible.builtin.include_tasks: config.yml
+      tags:
+        - icinga_linuxfabrik
+
     - name: Include install tasks for the master node
       ansible.builtin.include_tasks: master.yml
       when: (inventory_hostname == icinga_master_node) and (inventory_hostname in groups['icinga_master_nodes'])
@@ -107,9 +112,6 @@
       tags:
         - molecule-notest
 
-    - name: Include common config tasks
-      ansible.builtin.include_tasks: config.yml
-
   when: >-
     ( icinga | bool ) and
     ( ( inventory_hostname in groups['icinga_master_nodes'] ) or
diff --git a/tasks/master_config.yml b/tasks/master_config.yml
index 972b126..feb8f77 100644
--- a/tasks/master_config.yml
+++ b/tasks/master_config.yml
@@ -29,13 +29,13 @@
       ansible.builtin.template:
         src: "{{ icinga_conf }}.j2"
         dest: "/etc/icinga2/{{ icinga_conf }}"
+        backup: true
         owner: nagios
         group: nagios
         mode: "0640"
       no_log: "{% if ansible_check_mode | bool %}false{% else %}true{% endif %}"
       loop:
         - checks.conf
-        - constants.conf
         - icinga2.conf
         - zones.conf
       loop_control:
@@ -45,6 +45,7 @@
       ansible.builtin.template:
         src: "{{ icinga_conf }}.j2"
         dest: "/etc/icinga2/conf.d/{{ icinga_conf }}"
+        backup: true
         owner: nagios
         group: nagios
         mode: "0640"
diff --git a/tasks/plugin_linuxfabrik.yml b/tasks/plugin_linuxfabrik.yml
index d26f5d6..c0fe7b3 100644
--- a/tasks/plugin_linuxfabrik.yml
+++ b/tasks/plugin_linuxfabrik.yml
@@ -11,6 +11,13 @@
 - name: Icinga agent node install tasks
   block:
 
+    - name: "Fail if the Linuxfabrik plugin is not available for {{ icinga_linuxfabrik_plugin.name }}"
+      ansible.builtin.assert:
+        that:
+          - icinga_linuxfabrik_plugin.name in icinga_linuxfabrik_plugins_available
+        quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
+        fail_msg: "The Linuxfabrik plugin could ot be found in the icinga_linuxfabrik_plugins_available list, please correct the name or update the list."
+
     - name: "Get the Linuxfabrik plugin icingaweb2-module-director JSON for {{ icinga_linuxfabrik_plugin.name }}"
       ansible.builtin.get_url:
         url: "https://raw.githubusercontent.com/Linuxfabrik/monitoring-plugins/refs/tags/v{{ icinga_linuxfabrik_version }}/check-plugins/{{ icinga_linuxfabrik_plugin.name }}/icingaweb2-module-director/{{ icinga_linuxfabrik_plugin.name }}.json"
@@ -66,6 +73,10 @@
             dest: "/usr/share/icinga2/include/plugins-contrib.d/{{ icinga_linuxfabrik_plugin.name }}.conf"
             mode: "0644"
 
+#        - name: Fail if icinga_linuxfabrik_plugin.name is fail2ban
+#          fail:
+#          when: icinga_linuxfabrik_plugin.name == "fail2ban"
+
       when: icinga_linuxfabrik_plugin_json_file.stat.exists | bool
 
   tags:
diff --git a/templates/api-user.conf.j2 b/templates/api-user.conf.j2
index 871467a..4ffb58f 100644
--- a/templates/api-user.conf.j2
+++ b/templates/api-user.conf.j2
@@ -12,4 +12,4 @@ object ApiUser "{{ icinga_user.key }}" {
 
 }
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/api-users.conf.j2 b/templates/api-users.conf.j2
index cd27a9e..3498f24 100644
--- a/templates/api-users.conf.j2
+++ b/templates/api-users.conf.j2
@@ -5,4 +5,4 @@
  *
  */
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/checks.conf.j2 b/templates/checks.conf.j2
index 7573966..0e1a7ce 100644
--- a/templates/checks.conf.j2
+++ b/templates/checks.conf.j2
@@ -15,4 +15,4 @@ apply Service "check-" for (check => config in host.vars.checks) {
   }
 }
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/constants.conf.j2 b/templates/constants.conf.j2
index 994dbee..551b0fe 100644
--- a/templates/constants.conf.j2
+++ b/templates/constants.conf.j2
@@ -18,6 +18,12 @@ const ManubulonPluginDir = "/usr/lib/nagios/plugins"
  */
 const PluginContribDir = "/usr/lib/nagios/plugins"
 
+{% if icinga_linuxfabrik | bool %}
+/* The Linuxfabrik Monitoring plugins directory
+ */
+const PluginLinuxfabrikDir = "/usr/lib64/nagios/plugins"
+{% endif %}
+
 /* Our local instance name. By default this is the server's hostname as returned by `hostname --fqdn`.
  * This should be the common name from the API certificate.
  */
@@ -26,7 +32,9 @@ const NodeName = "{{ inventory_hostname }}"
 /* Our local zone name. */
 const ZoneName = "{{ inventory_hostname }}"
 
+{% if inventory_hostname == icinga_master_node and inventory_hostname in groups['icinga_master_nodes'] %}
 /* Secret key for remote node tickets */
 const TicketSalt = "{{ icinga_salt }}"
+{% endif %}
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/host.conf.j2 b/templates/host.conf.j2
index 5d3a580..1558f48 100644
--- a/templates/host.conf.j2
+++ b/templates/host.conf.j2
@@ -54,4 +54,4 @@ object Host "{{ icinga_host }}" {
 
 }
 
-#{# vim: set syntax=jinja2 #} vim: set syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/icinga.pref.j2 b/templates/icinga.pref.j2
index ecd6e63..bb405ab 100644
--- a/templates/icinga.pref.j2
+++ b/templates/icinga.pref.j2
@@ -7,4 +7,4 @@ Pin-Priority: 500
 
 {% endfor %}
 
-# vim: syntax=debsources
+#{# vim: syntax=jinja2 #} vim: syntax=debsources
diff --git a/templates/icinga2.conf.j2 b/templates/icinga2.conf.j2
index e1ef8ba..321587a 100644
--- a/templates/icinga2.conf.j2
+++ b/templates/icinga2.conf.j2
@@ -64,4 +64,4 @@ include "features-enabled/*.conf"
  */
 include_recursive "conf.d"
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/ido-mysql.conf.j2 b/templates/ido-mysql.conf.j2
index e32b6d7..1e78bfe 100644
--- a/templates/ido-mysql.conf.j2
+++ b/templates/ido-mysql.conf.j2
@@ -14,4 +14,4 @@ object IdoMysqlConnection "ido-mysql" {
   database = "icinga2"
 }
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/linuxfabrik.conf.j2 b/templates/linuxfabrik.conf.j2
index 95ac3f0..ba82710 100644
--- a/templates/linuxfabrik.conf.j2
+++ b/templates/linuxfabrik.conf.j2
@@ -2,7 +2,11 @@
 
 object CheckCommand "{{ icinga_linuxfabrik_plugin.name }}" {
         import "ipv4-or-ipv6"
-        command = [ "/usr/lib64/nagios/plugins/{{ icinga_linuxfabrik_plugin.name }}" ]
+{% if icinga_linuxfabrik_plugin.sudo is defined and icinga_linuxfabrik_plugin.sudo | bool %}
+        command = ["sudo",  PluginLinuxfabrikDir + "/{{ icinga_linuxfabrik_plugin.name }}" ]
+{% else %}
+        command = [ PluginLinuxfabrikDir + "/{{ icinga_linuxfabrik_plugin.name }}" ]
+{% endif %}
         arguments = {
 {% for icinga_linuxfabrik_plugin_arg in icinga_linuxfabrik_plugin_command_arguments | ansible.builtin.dict2items %}
                 "{{ icinga_linuxfabrik_plugin_arg.key }}" = {
@@ -18,4 +22,4 @@ object CheckCommand "{{ icinga_linuxfabrik_plugin.name }}" {
         }
 }
 
-/* vim: syntax=icinga2{# vim: syntax=jinja2 #} */
+/* {# vim: syntax=jinja2 #}vim: syntax=icinga2 */
diff --git a/templates/linuxfabrik.pref.j2 b/templates/linuxfabrik.pref.j2
index e374ab6..c56dcc4 100644
--- a/templates/linuxfabrik.pref.j2
+++ b/templates/linuxfabrik.pref.j2
@@ -6,3 +6,5 @@ Pin: origin repo.linuxfabrik.ch
 Pin-Priority: 500
 
 {% endfor %}
+
+#{# vim: syntax=jinja2 #}vim: syntax=debsources
diff --git a/templates/notifications.conf.j2 b/templates/notifications.conf.j2
index 7cdbdd1..7e20235 100644
--- a/templates/notifications.conf.j2
+++ b/templates/notifications.conf.j2
@@ -34,4 +34,4 @@ apply Notification "mail-icingaadmin" to Service {
   assign where host.vars.notification.mail
 }
 
-# vim: set syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/services.conf.j2 b/templates/services.conf.j2
index 73bc45c..ce51fe5 100644
--- a/templates/services.conf.j2
+++ b/templates/services.conf.j2
@@ -114,5 +114,4 @@ apply Service "users" {
   assign where host.name == NodeName
 }
 
-
-# vim: set syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/users.conf.j2 b/templates/users.conf.j2
index 6e70435..cbcb9d2 100644
--- a/templates/users.conf.j2
+++ b/templates/users.conf.j2
@@ -35,4 +35,4 @@ object UserGroup "icingaadmins" {
   display_name = "Icinga 2 Admin Group"
 }
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/templates/zones.conf.j2 b/templates/zones.conf.j2
index dc52bc5..98040e2 100644
--- a/templates/zones.conf.j2
+++ b/templates/zones.conf.j2
@@ -49,4 +49,4 @@ object Zone "global-templates" {
 #         global = true
 # }
 
-# vim: syntax=icinga2
+#{# vim: syntax=jinja2 #} vim: syntax=icinga2
diff --git a/vars/main.yml b/vars/main.yml
index aaf992e..7240767 100644
--- a/vars/main.yml
+++ b/vars/main.yml
@@ -63,6 +63,234 @@ icinga_linuxfabrik_pkg:
   - linuxfabrik-monitoring-plugins
   - linuxfabrik-notification-plugins
 
+# Linuxfabrik monitoring plugins available, this list can be updated bu running the following on a server with the linuxfabrik-monitoring-plugins package installed:
+# find /usr/lib64/nagios/plugins/ -executable -type f -exec basename "{}" \; | sort | sed 's/^/  - /'
+icinga_linuxfabrik_plugins_available:
+  - about-me
+  - apache-httpd-status
+  - apache-httpd-version
+  - apache-solr-version
+  - axenita-stats
+  - borgbackup
+  - by-ssh
+  - cometsystem
+  - composer-version
+  - countdown
+  - cpu-usage
+  - crypto-policy
+  - csv-values
+  - deb-lastactivity
+  - dhcp-relayed
+  - dhcp-scope-usage
+  - diacos
+  - disk-io
+  - disk-smart
+  - disk-usage
+  - dmesg
+  - dns
+  - docker-info
+  - docker-stats
+  - dummy
+  - fail2ban
+  - fedora-version
+  - feed
+  - file-age
+  - file-count
+  - file-descriptors
+  - file-ownership
+  - file-size
+  - fortios-cpu-usage
+  - fortios-firewall-stats
+  - fortios-ha-stats
+  - fortios-memory-usage
+  - fortios-network-io
+  - fortios-sensor
+  - fortios-version
+  - fs-inodes
+  - fs-ro
+  - fs-xfs-stats
+  - getent
+  - githubstatus
+  - gitlab-health
+  - gitlab-liveness
+  - gitlab-readiness
+  - gitlab-version
+  - grafana-version
+  - grassfish-licenses
+  - grassfish-players
+  - grassfish-screens
+  - graylog-version
+  - haproxy-status
+  - hin-status
+  - huawei-dorado-backup-power
+  - huawei-dorado-controller
+  - huawei-dorado-disk
+  - huawei-dorado-enclosure
+  - huawei-dorado-fan
+  - huawei-dorado-host
+  - huawei-dorado-hypermetrodomain
+  - huawei-dorado-hypermetropair
+  - huawei-dorado-interface
+  - huawei-dorado-power
+  - huawei-dorado-system
+  - icinga-topflap-services
+  - infomaniak-events
+  - infomaniak-swiss-backup-devices
+  - infomaniak-swiss-backup-products
+  - ipmi-sel
+  - ipmi-sensor
+  - jitsi-videobridge-stats
+  - jitsi-videobridge-status
+  - journald-query
+  - journald-usage
+  - json-values
+  - kemp-services
+  - keycloak-memory-usage
+  - keycloak-stats
+  - keycloak-version
+  - kvm-vm
+  - librenms-alerts
+  - librenms-health
+  - librenms-version
+  - load
+  - logfile
+  - mailq
+  - mastodon-version
+  - matomo-reporting
+  - matomo-version
+  - mediawiki-version
+  - memory-usage
+  - metabase-stats
+  - mod-qos-stats
+  - moodle-version
+  - mydumper-version
+  - mysql-aria
+  - mysql-binlog-cache
+  - mysql-connections
+  - mysql-database-metrics
+  - mysql-innodb-buffer-pool-instances
+  - mysql-innodb-buffer-pool-size
+  - mysql-innodb-log-waits
+  - mysql-joins
+  - mysql-logfile
+  - mysql-memory
+  - mysql-open-files
+  - mysql-perf-metrics
+  - mysql-query
+  - mysql-replica-status
+  - mysql-slow-queries
+  - mysql-sorts
+  - mysql-storage-engines
+  - mysql-system
+  - mysql-table-cache
+  - mysql-table-definition-cache
+  - mysql-table-indexes
+  - mysql-table-locks
+  - mysql-temp-tables
+  - mysql-thread-cache
+  - mysql-traffic
+  - mysql-user-security
+  - mysql-version
+  - needs-restarting
+  - network-bonding
+  - network-connections
+  - network-io
+  - network-port-tcp
+  - nextcloud-security-scan
+  - nextcloud-stats
+  - nextcloud-version
+  - nginx-status
+  - nodebb-cache
+  - nodebb-database
+  - nodebb-errors
+  - nodebb-events
+  - nodebb-groups
+  - nodebb-info
+  - nodebb-users
+  - nodebb-version
+  - ntp-chronyd
+  - ntp-ntpd
+  - ntp-systemd-timesyncd
+  - ntp-w32tm
+  - onlyoffice-stats
+  - openjdk-redhat-version
+  - openstack-nova-list
+  - openstack-swift-stat
+  - openvpn-client-list
+  - openvpn-version
+  - path-rw-test
+  - php-fpm-ping
+  - php-fpm-status
+  - php-status
+  - php-version
+  - ping
+  - pip-updates
+  - postfix-version
+  - postgresql-version
+  - procs
+  - python-version
+  - qts-cpu-usage
+  - qts-disk-smart
+  - qts-memory-usage
+  - qts-temperatures
+  - qts-uptime
+  - qts-version
+  - redfish-drives
+  - redfish-sel
+  - redfish-sensor
+  - redis-status
+  - redis-version
+  - restic-check
+  - restic-snapshots
+  - restic-stats
+  - rhel-version
+  - rocketchat-stats
+  - rocketchat-version
+  - rpm-lastactivity
+  - safenet-hsm-state
+  - sap-open-concur-com
+  - scanrootkit
+  - scheduled-task
+  - selinux-mode
+  - sensors-battery
+  - sensors-fans
+  - sensors-temperatures
+  - service
+  - snmp
+  - starface-account-stats
+  - starface-backup-status
+  - starface-channel-status
+  - starface-database-stats
+  - starface-java-memory-usage
+  - starface-peer-stats
+  - starface-status
+  - statusiq
+  - statuspal
+  - strongswan-connections
+  - swap-usage
+  - systemd-timedate-status
+  - systemd-unit
+  - systemd-units-failed
+  - tuned-profile
+  - updates
+  - uptime
+  - uptimerobot
+  - users
+  - veeam-status
+  - whmcs-status
+  - wildfly-deployment-status
+  - wildfly-gc-status
+  - wildfly-memory-pool-usage
+  - wildfly-memory-usage
+  - wildfly-non-xa-datasource-stats
+  - wildfly-server-status
+  - wildfly-thread-usage
+  - wildfly-uptime
+  - wildfly-xa-datasource-stats
+  - wordpress-version
+  - xca-cert
+  - xml
+
 # Packages available will vary between distros, you can get the packages installed from this repo using
 # aptitude search "?origin (icinga) ?installed"
 #
-- 
GitLab