mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-30 09:36:41 +00:00
Merge pull request #275 from bybai/fixdeleteraid
fix delete_raid defects 268 and 291
This commit is contained in:
commit
c2f78c1aa9
@ -51,7 +51,7 @@ function usagesc {
|
||||
echo ' pci_slot_name is the specified PCI location. If specify pci_slot_name, this raid will be created using disks from this pci_slot;'
|
||||
echo ' disk_names is a list of advanced format disk names. If specify disk_names, this raid will be created using these disks;'
|
||||
echo ' Example 1, create 2 raid0 arrays, one is using 3 disks, the other is using 2 disks, the disks PCI_ID is 1014:034a:'
|
||||
echo ' create_raid="rl#0|pci_id#1014:034a|disk_num#1 create_raid="rl#0|pci_id#1014:034a|disk_num#2'
|
||||
echo ' create_raid="rl#0|pci_id#1014:034a|disk_num#1" create_raid="rl#0|pci_id#1014:034a|disk_num#2"'
|
||||
echo ' Example 2, pci_slot_name is 0001:08:00.0, create raid10 array, using 2 disks '
|
||||
echo ' create_raid="rl#10|pci_slot_name#0001:08:00.0|disk_num#2"'
|
||||
echo ' Example 3, create 1 raid0 array using advanced format disk sg1'
|
||||
|
@ -1319,6 +1319,104 @@ function sort_devices_by_resource_path {
|
||||
return 0
|
||||
}
|
||||
|
||||
##########################################################################################################################
|
||||
#
|
||||
# wait to check ipr device status
|
||||
# usage: wait_for_ipr_device_status tryCnt=<minitutes> tryInt=<interval_seconds> cmd="check_cmd_line" -- "sg0,sg1,...,sgn"
|
||||
#
|
||||
#########################################################################################################################
|
||||
function wait_for_ipr_device_status {
|
||||
local tryCnt=1
|
||||
local tryInt=10
|
||||
local cmd="true"
|
||||
|
||||
# parser input arguments
|
||||
while [ -n "$1" ];
|
||||
do
|
||||
local key=`echo "$1" | $cut -s -d= -f1`
|
||||
if [ "$key" = "tryCnt" ] || \
|
||||
[ "$key" = "tryInt" ] || \
|
||||
[ "$key" = "cmd" ]; then
|
||||
local val=`echo "$1" | $cut -s -d= -f2-`
|
||||
eval "$key=\"$val\""
|
||||
elif [ "$1" = "--" ]; then
|
||||
shift
|
||||
sgs="$*"
|
||||
break
|
||||
fi
|
||||
shift
|
||||
done
|
||||
sgs=`echo "$sgs" | $sed -e "s/,/ /g"`
|
||||
local cnt=0
|
||||
local lines
|
||||
while [ $cnt -lt $tryCnt -o $tryCnt -le 0 ];
|
||||
do
|
||||
# sleep for specific interval for next cycle
|
||||
[ $cnt -gt 0 ] && $sleep $tryInt
|
||||
|
||||
lines=`check_ipr_device_status $sgs`
|
||||
local status_lines=""
|
||||
local neg=0
|
||||
local sg
|
||||
for sg in $sgs
|
||||
do
|
||||
local _sg_status=`echo "$lines" | grep "^$sg=" | $cut -d= -f2- -s`
|
||||
echo "$_sg_status" | eval $cmd >&2
|
||||
if [ $? -ne 0 ]; then
|
||||
neg=1
|
||||
status_lines="${status_lines}${status_lines:+,}status[$sg]=\"$_sg_status\""
|
||||
fi
|
||||
done
|
||||
|
||||
# break out if NO negative matching
|
||||
# or, try next loop
|
||||
if [ $neg -eq 0 ]; then
|
||||
break
|
||||
else
|
||||
log_status "Wait for device status at time \""`date "+%Y-%m-%d %H:%M:%S"`"\": $status_lines, expect: \"$cmd\"."
|
||||
fi
|
||||
|
||||
((cnt+=1))
|
||||
done
|
||||
test $cnt -lt $tryCnt -o $tryCnt -le 0
|
||||
local rc=$?
|
||||
|
||||
# log for debug
|
||||
if [ $rc -eq 0 ]; then
|
||||
log_info "Wait for status on devices: \"$sgs\" succeed! (expected: \"$cmd\")"
|
||||
else
|
||||
log_warn "Wait for status on devices: \"$sgs\" failed! (expected: \"$cmd\")"
|
||||
echo "$lines" | $sed -e 's/^/last device status: >> /g' | log_lines debug
|
||||
fi
|
||||
|
||||
return $rc
|
||||
}
|
||||
|
||||
##############################################################
|
||||
#
|
||||
# check status of ipr devices
|
||||
# input : slocs list, for example, 0:0:0:0 0:0:1:0
|
||||
# usage : check_ipr_device_status <sloc1> <sloc2> ... <slocn>
|
||||
#
|
||||
##############################################################
|
||||
function check_ipr_device_status {
|
||||
local sgs="$*"
|
||||
local lines=`convert_sloc_to_sg $sgs`
|
||||
|
||||
local item
|
||||
for item in $sgs
|
||||
do
|
||||
declare sg=`echo "$lines" | $awk -F= -vkey=$item '$1 == key {print $2;}'`
|
||||
declare _sg_status=`$iprconfig -c status $sg`
|
||||
if [ "$_sg_status" = "Rebuilding" ]; then
|
||||
declare _sg_status_alt=`cmd_alt_status $sg`
|
||||
[ -n "$_sg_status_alt" ] && _sg_status="$_sg_status, $_sg_status_alt"
|
||||
fi
|
||||
echo "$item=$_sg_status"
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
######################################################
|
||||
#
|
||||
|
Loading…
x
Reference in New Issue
Block a user