2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-25 17:24:07 +00:00

fix(xcat-core): otherpkgs does not log a failed rpm install or removal

A failed package install through the rpm or dpkg fallback leaves no
record in syslog. The same holds for the four package removal branches
that run after the install. The postscript sets its return code, but a
reader of the node log sees nothing, because the package manager output
goes to the console only when VERBOSE is set.

In xCAT/postscripts/otherpkgs the fallback install block, and the yum,
zypper, apt and rpm removal blocks, set RETURNVAL on a non-zero status
and stop there. Only the three repository install branches send a
message with local4.err.

This change adds the same local4.err message to the five branches that
have none. Each message names the command that ran, as the repository
install branches do.

xCAT-test/bats/postscripts_otherpkgs.bats drives each block with a
package manager that returns a failure. Two cases assert the message is
present, and both fail on the parent commit. Two more assert the
success path still logs "installed." and "removed." alone.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
This commit is contained in:
Daniel Hilst
2026-09-15 12:59:09 -03:00
parent 402a6f4a45
commit e058c9afd9
2 changed files with 75 additions and 0 deletions
+70
View File
@@ -358,3 +358,73 @@ run_pkglist_diagnostics()
[[ "$output" == *'pkgsarray: foo bar, 2'* ]]
[[ "$output" == *'yum/dnf: 1 (dnf), apt: 0, zypper: 0'* ]]
}
run_plain_install_block()
{
local block
block="$(otherpkgs_block '#Handle the rest with rpm' 'if [ "$plain_pkgs" != "" -a -n "$OTHERPKGDIR" ]; then')" || return 99
local envlist="" VERBOSE= log_label=otherpkgs RETURNVAL=0 result=""
local supdatecommand=fake_pkg plain_pkgs="foo bar" mounted=1
local OTHERPKGDIR="$BATS_TEST_TMPDIR"
shadow_logger
shadow_pkg_manager
# The block changes directory. A subshell keeps the test in its own directory.
(
eval "$block"
printf 'RETURNVAL=%s\n' "$RETURNVAL"
)
}
run_plain_postremove_block()
{
local block
block="$(otherpkgs_block '#remove more rpms if specified with' 'if [ "$plain_pkgs_postremove" != "" ]; then')" || return 99
local envlist="" VERBOSE= log_label=otherpkgs RETURNVAL=0 result=""
local sremovecommand=fake_pkg plain_pkgs_postremove="oldfoo"
shadow_logger
shadow_pkg_manager
eval "$block"
printf 'RETURNVAL=%s\n' "$RETURNVAL"
}
@test "a failed rpm fallback install is logged as failed" {
PKG_STATUS=1 run run_plain_install_block
[ "$status" -eq 0 ]
[[ "$output" == *'RETURNVAL=1'* ]]
refute_grep -q 'foo bar installed\.' "$LOGGER_LOG"
grep -q 'foo bar failed\.' "$LOGGER_LOG"
}
@test "a successful rpm fallback install is logged as installed" {
run run_plain_install_block
[ "$status" -eq 0 ]
[[ "$output" == *'RETURNVAL=0'* ]]
grep -q 'foo bar installed\.' "$LOGGER_LOG"
refute_grep -q 'failed\.' "$LOGGER_LOG"
}
@test "a failed package removal is logged as failed" {
local manager
for manager in hasyum haszypper hasapt; do
: >"$LOGGER_LOG"
PKG_STATUS=1 run run_repo_postremove_block "$manager"
[ "$status" -eq 0 ]
[[ "$output" == *'RETURNVAL=1'* ]]
grep -q 'oldfoo failed\.' "$LOGGER_LOG"
done
: >"$LOGGER_LOG"
PKG_STATUS=1 run run_plain_postremove_block
[ "$status" -eq 0 ]
[[ "$output" == *'RETURNVAL=1'* ]]
refute_grep -q 'oldfoo removed\.' "$LOGGER_LOG"
grep -q 'oldfoo failed\.' "$LOGGER_LOG"
}
@test "a successful package removal is logged as removed only" {
run run_plain_postremove_block
[ "$status" -eq 0 ]
[[ "$output" == *'RETURNVAL=0'* ]]
grep -q 'oldfoo removed\.' "$LOGGER_LOG"
refute_grep -q 'failed\.' "$LOGGER_LOG"
}
+5
View File
@@ -1071,6 +1071,7 @@ EOF`
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
logger -p local4.err -t $log_label "$envlist $supdatecommand $plain_pkgs failed."
else
logger -p local4.info -t $log_label "$plain_pkgs installed."
fi
@@ -1096,6 +1097,7 @@ EOF`
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
logger -p local4.err -t $log_label "$envlist $yumcmd -y remove $repo_pkgs_postremove failed."
else
logger -p local4.info -t $log_label "$repo_pkgs_postremove removed."
fi
@@ -1110,6 +1112,7 @@ EOF`
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
logger -p local4.err -t $log_label "$envlist zypper remove -y $repo_pkgs_postremove failed."
else
logger -p local4.info -t $log_label "$repo_pkgs_postremove removed."
fi
@@ -1125,6 +1128,7 @@ EOF`
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
logger -p local4.err -t $log_label "$envlist apt-get -y remove $repo_pkgs_postremove failed."
else
logger -p local4.info -t $log_label "$repo_pkgs_postremove removed."
fi
@@ -1142,6 +1146,7 @@ EOF`
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
logger -p local4.err -t $log_label "$envlist $sremovecommand $plain_pkgs_postremove failed."
else
logger -p local4.info -t $log_label "$plain_pkgs_postremove removed."
fi