Merge pull request #1541 from bergware/master

rc.libvirt: skip non-existing XML files
This commit is contained in:
tom mortensen
2023-12-09 10:20:00 -08:00
committed by GitHub
4 changed files with 29 additions and 11 deletions

View File

@@ -86,7 +86,7 @@ function port_name($port) {
return substr($port,-2)!='n1' ? $port : substr($port,0,-2);
}
function exceed($value, $limit, $top=100) {
return $limit>0 ? ($value>$limit && $value<=$top) : false;
return is_numeric($value) && $limit>0 ? ($value>$limit && $value<=$top) : false;
}
function ipaddr($ethX='eth0', $prot=4) {
global $$ethX;

View File

@@ -163,7 +163,7 @@ function device_status(&$disk, &$error, &$warning) {
function device_temp(&$disk, &$red, &$orange) {
global $display;
$spin = strpos(_var($disk,'color'),'blink')===false;
$temp = _var($disk,'temp','*');
$temp = _var($disk,'temp');
$dev = _var($disk,'device');
$nvme = _var($disk,'transport')=='nvme';
[$hotNVME,$maxNVME] = $nvme ? get_nvme_info($dev,'temp') : [-1,-1];
@@ -171,12 +171,12 @@ function device_temp(&$disk, &$red, &$orange) {
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max']));
$top = $display['top'] ?? 120;
$color= 'green';
if (exceed($temp,$max,$top)) {
if (exceed($temp,$max,$top) || (is_numeric($temp) && $temp<0)) {
$color = 'red'; $red++;
} elseif (exceed($temp,$hot,$top)) {
$color = 'orange'; $orange++;
}
return (($spin && $temp>0) ? "<span class='$color-text'>".my_temp($temp)."</span>" : "*").($nvme ? my_power($dev) : "");
return ($spin ? "<span class='$color-text'>".my_temp($temp)."</span>" : "*").($nvme ? my_power($dev) : "");
}
function device_smart(&$disk, &$fail, &$smart) {
global $numbers,$saved;
@@ -192,7 +192,8 @@ function device_smart(&$disk, &$fail, &$smart) {
$text = _('healthy');
$color = 'green';
$file = "state/smart/$name";
if (file_exists("$file") && exec("grep -Pom1 '^SMART.*: \K[A-Z]+' ".escapeshellarg($file)." |tr -d '\n' 2>/dev/null", $ssa) && in_array("$ssa",$failed)) {
$ssa = file_exists($file) ? exec("grep -Pom1 '^SMART.+: \K[A-Z]+' ".escapeshellarg($file)) : "";
if (in_array($ssa,$failed)) {
$title = _('SMART health-check failed')."\n"; $thumb = 'thumbs-o-down'; $color = 'red'; $text = 'fail'; $fail++;
} else {
if (empty($saved["smart"]["$named.ack"])) {

View File

@@ -66,7 +66,10 @@
# - added interface carrier check before assigning IP address (DHCP or static)
# - added "status" command
# Bergware - modified for Unraid OS, October 2023
# Adapted by Bergware for use in Unraid OS - December 2023
# - added functions to remove leading zeros in IPv4 and IPv6 addresses
# Bergware - modified for Unraid OS, December 2023
###########
# LOGGING #
@@ -137,6 +140,19 @@ lo_down(){
# INTERFACE FUNCTIONS #
#######################
# function to remove leading zeros in IPv4 address
unzero(){
local M Q
echo -n $(for Q in ${1//./ }; do printf "$M%x" "0x$Q"; M=.; done)
}
# function to remove leading zeros in IPv6 address
unzero6(){
local A M Q
A=${1/::/:-:}
echo -n $(for Q in ${A//:/ }; do [[ $Q != - ]] && printf "$M%x" "0x$Q" || printf ":"; M=:; done)
}
# function to get link mtu size
get_mtu(){
ip link show $1 | grep -Po 'mtu \K\d+'
@@ -377,14 +393,14 @@ ipaddr_up(){
[[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]}
if [[ -n $ADDR ]]; then
[[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]}
[[ -n $MASK ]] && run ip -4 addr add $ADDR/$MASK dev $IFACE metric 1
[[ -n $MASK ]] && run ip -4 addr add $(unzero $ADDR)/$MASK dev $IFACE metric 1
fi
fi
if [[ $IP != ipv4 ]]; then
[[ $j -eq 0 ]] && ADDR6=${IPADDR6[$i]} || ADDR6=${IPADDR6[$i,$j]}
if [[ -n $ADDR6 ]]; then
[[ $j -eq 0 ]] && MASK6=${NETMASK6[$i]} || MASK6=${NETMASK6[$i,$j]}
[[ -n $MASK6 ]] && run ip -6 addr add $ADDR6/$MASK6 dev $IFACE metric 1
[[ -n $MASK6 ]] && run ip -6 addr add $(unzero6 $ADDR6)/$MASK6 dev $IFACE metric 1
[[ -n $PRIV6 && -d $CONF6/$IFACE ]] && echo 0 >$CONF6/$IFACE/use_tempaddr
fi
fi

View File

@@ -181,14 +181,15 @@ libvirtd_start(){
return 1
fi
# convert libvirt 1.3.1 w/ eric's hyperv vendor id patch to how libvirt does it in libvirt 1.3.3+
sed -ri "s/<vendor id='none'\/>/<vendor_id state='on' value='none'\/>/g" /etc/libvirt/qemu/*.xml &>/dev/null
sed -ri "s/<vendor id='none'\/>/<vendor_id state='on' value='none'\/>/g" /etc/libvirt/qemu/*.xml 2>/dev/null
# remove <locked/> from xml because libvirt + virlogd + virlockd has an issue with locked
sed -ri "/<locked\/>/d" /etc/libvirt/qemu/*.xml &>/dev/null
sed -ri "/<locked\/>/d" /etc/libvirt/qemu/*.xml 2>/dev/null
# Remove "<watchdog model='itco' action='reset'/>" if reverting from later release.
. /etc/unraid-version
[[ $(version $version) -le $(version "6.12") ]] && sed -ri "/<watchdog model='itco' action='reset'\/>/d" /etc/libvirt/qemu/*.xml &>/dev/null
[[ $(version $version) -le $(version "6.12") ]] && sed -ri "/<watchdog model='itco' action='reset'\/>/d" /etc/libvirt/qemu/*.xml 2>/dev/null
# update interface section((s) of VM configuration files
for XML in /etc/libvirt/qemu/*.xml; do
[[ -f "$XML" ]] || continue
# get all interface sections
ROW=($(grep -nhP '<interface type=' "$XML" | grep -Pom1 '^[0-9]+'))
# get all source sections