diff --git a/ansible.cfg b/ansible.cfg index 145b36dc057af33f12730cc91fa941f63c45fb65..b4be8d32b6b4f7196d3b863b5c6b2d7f053ef987 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -33,7 +33,8 @@ roles_path = ./:../:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles # https://docs.ansible.com/ansible/latest/reference_appendices/config.html#display-skipped-hosts # DEFAULT: display_skipped_hosts = true display_skipped_hosts = false -display_ok_hosts = false +# display_ok_hosts = false +display_ok_hosts = true use_persistent_connections=true diff --git a/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh b/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh index dd3e1fa41cae096c935b04e2df0eec8deb441431..a88ed3d49113246c1f13eec18347bb8c6263e69a 100755 --- a/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh +++ b/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh @@ -37,8 +37,9 @@ #DOC# - https://www.ssh.com/ssh/keygen/ #DOC# - https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.dot-cm-cmpr-910%2Fvolume__show.html -if [[ ! ( ${BASH_VERSINFO[0]} -eq 4 ) && ( ${BASH_VERSINFO[1]} -ge 2 ) || \ - ! ( ${BASH_VERSINFO[0]} -gt 4 ) ]]; then +BASH_MIN_VERSION="4.2" +# This sorts ascending by version number. If the first version number in the sorted list is equal to our minimal version number, then we can be sure that the installed version of Bash is newer. +if [[ "${BASH_MIN_VERSION}" == "$( echo -e "${BASH_VERSINFO[0]}.${BASH_VERSINFO[1]}\n${BASH_MIN_VERSION}" | sort -V | tail -n1 )" ]]; then echo "Only Bash versions 4.2 or above are supported. Aborting execution." exit 1 fi @@ -62,6 +63,7 @@ NETAPP_FIELDS="size,available,used,percent-used" # Include config file not using variable path # based on http://mywiki.wooledge.org/BashFAQ/028 if [[ -e "/etc/check_mk/check_netapp_nfs_shares.cfg" ]]; then + # shellcheck disable=SC1091 source "/etc/check_mk/check_netapp_nfs_shares.cfg" else echo "Configuration at ${CONFIGFILE} expected, but not found. Aborting execution." && exit 1 @@ -74,46 +76,23 @@ function help () { sed -rn 's/^#DOC# ?//;T;p' "$0" } -function get_mgmt_ip_from_network () { - case ${1} in - ${PATTERN_VLAN11}) - echo "${MGMT_VLAN11}" - ;; - ${PATTERN_VLAN13}) - echo "${MGMT_VLAN13}" - ;; - ${PATTERN_VLAN14}) - echo "${MGMT_VLAN14}" - ;; - ${PATTERN_VLAN20}) - echo "${MGMT_VLAN20}" - ;; - *) - echo "unsupported subnet" - ;; - esac -} - # IMPORTANT: Set lock using "flock", NOT "touch"!!! It's atomic and doesn't have to be cleared after the script ran. ( flock -n 9 || exit 1 - NFS_SHARES=$( mount | grep "type nfs" | cut -d " " -f 1 ) + NFS_SHARES=$( findmnt --raw --noheadings --types "nfs4" | cut -d " " -f 2 ) for SHARE in ${NFS_SHARES}; do - VOLUME_IP=$( echo "${SHARE}" | cut -d ":" -f 1 ) - MGMT_IP=$( get_mgmt_ip_from_network "${VOLUME_IP}" ) - [[ "${MGMT_IP}" == "unsupported subnet" ]] && echo "There's no NetApp management IP for this subnet." && next NETAPP_VOLUME=$( echo "${SHARE}" | cut -d ":" -f 2 | cut -d '/' -f 3 ) - RESULT=$( ssh -o StrictHostKeyChecking=no "${SSH_USER}"@"${MGMT_IP}" -C -i "${IDENTITY_FILE}" "${NETAPP_SETTINGS} volume show -vserver ${NETAPP_VSERVER} -volume ${NETAPP_VOLUME} -fields $NETAPP_FIELDS" ) + RESULT=$( ssh -o StrictHostKeyChecking=no "${SSH_USER}"@"${MGMT}" -C -i "${IDENTITY_FILE}" "${NETAPP_SETTINGS} volume show -vserver ${NETAPP_VSERVER} -volume ${NETAPP_VOLUME} -fields $NETAPP_FIELDS" ) [[ -z "${RESULT}" ]] && echo "Didn't get a valid answer from NetApp system for ${NETAPP_VOLUME}." RESULT=$( echo "${RESULT}" | tail -n 2 | tr -d '\r' ) OLDIFS=${IFS} IFS=";" echo "${RESULT}" | while read -r RES_VSERVER RES_VOLUME RES_SIZE RES_AVAILABLE RES_USED RES_PERCENT; do status="P" # Status dynamisch berechnen - itemname="NFS-Share_/vol/${RES_VOLUME}/@${RES_VSERVER}" + itemname="NFS-Share ${RES_VOLUME}/@${RES_VSERVER}" perf_values="Size=${RES_SIZE}|Used=${RES_USED}|Available=${RES_AVAILABLE}|PercentUsed=${RES_PERCENT::-1};80;90" statustext="NFS share fill levels as read from NetApp storage system from vServer ${RES_VSERVER} for volume '/vol/${RES_VOLUME}'. Size: $(( RES_SIZE/1024/1024/1024 )) GB, Used: $(( RES_USED/1024/1024/1024 )) GB, Available: $(( RES_AVAILABLE/1024/1024/1024 )) GB, Percent Used: ${RES_PERCENT}.\\n" - echo "${status} ${itemname} ${perf_values} ${statustext}" + echo "${status} '${itemname}' ${perf_values} ${statustext}" done IFS=${OLDIFS} done diff --git a/tasks/install_checkmk_plugins.yml b/tasks/install_checkmk_plugins.yml index 37deb02f8118f28b4ad2bd784267e63b59ec7c3b..4bd38f93500fd04930674ae7e06679b5515b5fe9 100644 --- a/tasks/install_checkmk_plugins.yml +++ b/tasks/install_checkmk_plugins.yml @@ -1,7 +1,7 @@ --- -- name: CMK installieren +- name: Install ChecK_MK and dependencies. ansible.builtin.package: - name: "check-mk-agent" + name: ["check-mk-agent", "needrestart"] state: latest - name: Ordner für Check_MK-Plugins anlegen @@ -30,15 +30,14 @@ loop: - name: "nrpe/check_needrestart.sh" - name: "local/600/check_netapp_nfs_shares.sh" - when: ansible_distribution == "Debian" -# - name: install SSH private key for NetApp NFS share monitoring -# copy: -# src: "{{ role_path }}/../ansible_vaults/{{ role_name }}/.ssh/id_ed25519_netapp_report" -# dest: "/usr/lib/check_mk_agent/.ssh/id_ed25519_netapp_report" -# owner: "root" -# group: "root" -# mode: "0400" +- name: Install SSH private key for NetApp NFS share monitoring. + ansible.builtin.copy: + src: "{{ role_path }}/../ansible_vaults/{{ role_name }}/.ssh/id_ed25519_netapp_report" + dest: "/usr/lib/check_mk_agent/.ssh/id_ed25519_netapp_report" + owner: "root" + group: "root" + mode: "0400" - name: Check_MK-Plugins installieren (offizielle Plugins) ansible.builtin.get_url: @@ -101,4 +100,4 @@ dest: "/etc/check_mk/check_netapp_nfs_shares.cfg" owner: "root" group: "root" - mode: "0600" + mode: "0o600" diff --git a/tasks/main.yml b/tasks/main.yml index 52bc0e6aa7f5beb6f970f99d7c551fa4f929abe3..b9ec76ba5af894a38ea589395c880623aaa22d8d 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -101,7 +101,7 @@ - name: Check_MK-Plugins installieren ansible.builtin.import_tasks: "install_checkmk_plugins.yml" - tags: [monitoring] + tags: [cmk, checkmk, check_mk, check-mk, monitoring] - name: root-Shell einrichten ansible.builtin.import_tasks: "configure_root_shell.yml" diff --git a/templates/etc/check_mk/check_netapp_nfs_shares.cfg.j2 b/templates/etc/check_mk/check_netapp_nfs_shares.cfg.j2 index 018fbda697ab60b31f2a3b8010c79b8a4e2b74a6..3d3283a4d709380b36b2883d7e75cd63d9b322aa 100644 --- a/templates/etc/check_mk/check_netapp_nfs_shares.cfg.j2 +++ b/templates/etc/check_mk/check_netapp_nfs_shares.cfg.j2 @@ -32,23 +32,11 @@ IDENTITY_PATH="/usr/lib/check_mk_agent/.ssh/" # Mandatory: yes IDENTITY_FILE="${IDENTITY_PATH}id_${IDENTITY_ALGORITHM}_netapp_report" -### Subnet patterns for determining management IP. -### Use subnet string with Bash glob "*" at the end as shown in example. +### NetApp management Hostname. +### IPs are automatically resolved for the correct host subnet by DNS. # Default: (none) # Mandatory: yes -# PATTERN_EXAMPLE="123.34.45.*" -PATTERN_VLAN11="{{ check_netapp_nfs_shares.vault_pattern_vlan11 }}" -PATTERN_VLAN13="{{ check_netapp_nfs_shares.vault_pattern_vlan13 }}" -PATTERN_VLAN14="{{ check_netapp_nfs_shares.vault_pattern_vlan14 }}" -PATTERN_VLAN20="{{ check_netapp_nfs_shares.vault_pattern_vlan20 }}" - -### NetApp management IPs for each VLAN. -# Default: (none) -# Mandatory: yes -MGMT_VLAN11="{{ check_netapp_nfs_shares.vault_mgmt_vlan11 }}" -MGMT_VLAN13="{{ check_netapp_nfs_shares.vault_mgmt_vlan13 }}" -MGMT_VLAN14="{{ check_netapp_nfs_shares.vault_mgmt_vlan14 }}" -MGMT_VLAN20="{{ check_netapp_nfs_shares.vault_mgmt_vlan20 }}" +MGMT="{{ check_netapp_nfs_shares.vault_mgmt }}" #### NetApp output settings # Default: NETAPP_SETTINGS="set -showallfields false;set -showseparator \";\";set -rows 0; set -units raw;"