From b736a74e39e2e6e8a9ddcc3962e5b2707a79df3c Mon Sep 17 00:00:00 2001 From: "Kabanov, Dmitrii" Date: Fri, 17 Jul 2020 11:03:50 -0700 Subject: [PATCH] [ceph] Add noup flag check to helm tests The PS adds noup flag check to Ceph-client and Ceph-OSD helm tests. It allows successfully pass the tests even if noup flag is set. Change-Id: Ida43d83902d26bef3434c47e71959bb2086ad82a --- ceph-client/templates/bin/_helm-tests.sh.tpl | 36 ++++++++++++++------ ceph-osd/templates/bin/_helm-tests.sh.tpl | 36 ++++++++++++++------ 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/ceph-client/templates/bin/_helm-tests.sh.tpl b/ceph-client/templates/bin/_helm-tests.sh.tpl index 06b4cab36..eaf89ab13 100755 --- a/ceph-client/templates/bin/_helm-tests.sh.tpl +++ b/ceph-client/templates/bin/_helm-tests.sh.tpl @@ -30,23 +30,39 @@ function check_cluster_status() { function check_osd_count() { echo "#### Start: Checking OSD count ####" - num_osd=$(ceph osd stat | tr ' ' '\n' | grep -x -E '[0-9]+' | head -n1) - num_in_osds=$(ceph osd stat | tr ' ' '\n' | grep -x -E '[0-9]+' | tail -n1) - num_up_osds=$(ceph osd stat | tr ' ' '\n' | grep -x -E '[0-9]+' | head -n2 | tail -n1) + noup_flag=$(ceph osd stat | awk '/noup/ {print $2}') + osd_stat=$(ceph osd stat -f json) + num_osd=$(jq '.osdmap.num_osds' <<< "$osd_stat") + num_in_osds=$(jq '.osdmap.num_in_osds' <<< "$osd_stat") + num_up_osds=$(jq '.osdmap.num_up_osds' <<< "$osd_stat") MIN_OSDS=$((${num_osd}*$REQUIRED_PERCENT_OF_OSDS/100)) if [ ${MIN_OSDS} -lt 1 ]; then MIN_OSDS=1 fi - if [ "${num_osd}" -eq 0 ]; then - echo "There are no osds in the cluster" - exit 1 - elif [ "${num_in_osds}" -ge "${MIN_OSDS}" ] && [ "${num_up_osds}" -ge "${MIN_OSDS}" ]; then - echo "Required number of OSDs (${MIN_OSDS}) are UP and IN status" + if [ "${noup_flag}" ]; then + osd_status=$(ceph osd dump -f json | jq -c '.osds[] | .state') + count=0 + for osd in $osd_status; do + if [[ "$osd" == *"up"* || "$osd" == *"new"* ]]; then + ((count=count+1)) + fi + done + echo "Caution: noup flag is set. ${count} OSDs in up/new state. Required number of OSDs: ${MIN_OSDS}." + if [ $MIN_OSDS -gt $count ]; then + exit 1 + fi else - echo "Required number of OSDs (${MIN_OSDS}) are NOT UP and IN status. Cluster shows OSD count=${num_osd}, UP=${num_up_osds}, IN=${num_in_osds}" - exit 1 + if [ "${num_osd}" -eq 0 ]; then + echo "There are no osds in the cluster" + exit 1 + elif [ "${num_in_osds}" -ge "${MIN_OSDS}" ] && [ "${num_up_osds}" -ge "${MIN_OSDS}" ]; then + echo "Required number of OSDs (${MIN_OSDS}) are UP and IN status" + else + echo "Required number of OSDs (${MIN_OSDS}) are NOT UP and IN status. Cluster shows OSD count=${num_osd}, UP=${num_up_osds}, IN=${num_in_osds}" + exit 1 + fi fi } diff --git a/ceph-osd/templates/bin/_helm-tests.sh.tpl b/ceph-osd/templates/bin/_helm-tests.sh.tpl index 37a6cd025..a217d701e 100644 --- a/ceph-osd/templates/bin/_helm-tests.sh.tpl +++ b/ceph-osd/templates/bin/_helm-tests.sh.tpl @@ -18,23 +18,39 @@ set -ex function check_osd_count() { echo "#### Start: Checking OSD count ####" - num_osd=$(ceph osd stat | tr ' ' '\n' | grep -x -E '[0-9]+' | head -n1) - num_in_osds=$(ceph osd stat | tr ' ' '\n' | grep -x -E '[0-9]+' | tail -n1) - num_up_osds=$(ceph osd stat | tr ' ' '\n' | grep -x -E '[0-9]+' | head -n2 | tail -n1) + noup_flag=$(ceph osd stat | awk '/noup/ {print $2}') + osd_stat=$(ceph osd stat -f json) + num_osd=$(jq '.osdmap.num_osds' <<< "$osd_stat") + num_in_osds=$(jq '.osdmap.num_in_osds' <<< "$osd_stat") + num_up_osds=$(jq '.osdmap.num_up_osds' <<< "$osd_stat") MIN_OSDS=$((${num_osd}*$REQUIRED_PERCENT_OF_OSDS/100)) if [ ${MIN_OSDS} -lt 1 ]; then MIN_OSDS=1 fi - if [ "${num_osd}" -eq 0 ]; then - echo "There are no osds in the cluster" - exit 1 - elif [ "${num_in_osds}" -ge "${MIN_OSDS}" ] && [ "${num_up_osds}" -ge "${MIN_OSDS}" ]; then - echo "Required number of OSDs (${MIN_OSDS}) are UP and IN status" + if [ "${noup_flag}" ]; then + osd_status=$(ceph osd dump -f json | jq -c '.osds[] | .state') + count=0 + for osd in $osd_status; do + if [[ "$osd" == *"up"* || "$osd" == *"new"* ]]; then + ((count=count+1)) + fi + done + echo "Caution: noup flag is set. ${count} OSDs in up/new state. Required number of OSDs: ${MIN_OSDS}." + if [ $MIN_OSDS -gt $count ]; then + exit 1 + fi else - echo "Required number of OSDs (${MIN_OSDS}) are NOT UP and IN status. Cluster shows OSD count=${num_osd}, UP=${num_up_osds}, IN=${num_in_osds}" - exit 1 + if [ "${num_osd}" -eq 0 ]; then + echo "There are no osds in the cluster" + exit 1 + elif [ "${num_in_osds}" -ge "${MIN_OSDS}" ] && [ "${num_up_osds}" -ge "${MIN_OSDS}" ]; then + echo "Required number of OSDs (${MIN_OSDS}) are UP and IN status" + else + echo "Required number of OSDs (${MIN_OSDS}) are NOT UP and IN status. Cluster shows OSD count=${num_osd}, UP=${num_up_osds}, IN=${num_in_osds}" + exit 1 + fi fi }