Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package resource-agents for openSUSE:Factory
checked in at 2026-01-28 15:07:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/resource-agents (Old)
and /work/SRC/openSUSE:Factory/.resource-agents.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "resource-agents"
Wed Jan 28 15:07:55 2026 rev:146 rq:1329342 version:4.17.0+git30.b33c378d
Changes:
--------
--- /work/SRC/openSUSE:Factory/resource-agents/resource-agents.changes
2025-12-24 13:15:45.205075924 +0100
+++
/work/SRC/openSUSE:Factory/.resource-agents.new.1928/resource-agents.changes
2026-01-28 15:08:50.434223749 +0100
@@ -1,0 +2,12 @@
+Mon Jan 26 14:30:47 UTC 2026 - Peter Varkoly <[email protected]>
+
+- Update to version 4.17.0+git30.b33c378d: (jsc#PED-15014)
+ * powervs-move-ip/powervs-subnet: fix error logging
+ * Filesystem: optionally report "xargs ps -f" even when killing many
processes
+ * ocf-shellfunc: add ocf_log_pipe
+ * findif.c: remove unused colonptr variable
+ * Filesystem: use -eq/-ne for numeric variables
+ * powervs-subnet: wait until IP is activated before running monitor-check
+ * OCPBUGS-64765: podman-etcd: add -a option to crictl ps (#2112)
+
+-------------------------------------------------------------------
Old:
----
resource-agents-4.17.0+git18.92719d83.tar.xz
New:
----
resource-agents-4.17.0+git30.b33c378d.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ resource-agents.spec ++++++
--- /var/tmp/diff_new_pack.jvyJZh/_old 2026-01-28 15:08:51.318260470 +0100
+++ /var/tmp/diff_new_pack.jvyJZh/_new 2026-01-28 15:08:51.318260470 +0100
@@ -1,7 +1,7 @@
#
# spec file for package resource-agents
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: resource-agents
-Version: 4.17.0+git18.92719d83
+Version: 4.17.0+git30.b33c378d
Release: 0
Summary: HA Reusable Cluster Resource Scripts
License: GPL-2.0-only AND LGPL-2.1-or-later AND GPL-3.0-or-later
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.jvyJZh/_old 2026-01-28 15:08:51.378262962 +0100
+++ /var/tmp/diff_new_pack.jvyJZh/_new 2026-01-28 15:08:51.382263129 +0100
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/ClusterLabs/resource-agents.git</param>
-<param name="changesrevision">92719d83353a8c7128f5fc72812e4b7c06cf8a6b</param>
+<param name="changesrevision">b33c378db3a04709a276a436606105e52a946116</param>
</service>
</servicedata>
(No newline at EOF)
++++++ resource-agents-4.17.0+git18.92719d83.tar.xz ->
resource-agents-4.17.0+git30.b33c378d.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/resource-agents-4.17.0+git18.92719d83/heartbeat/Filesystem
new/resource-agents-4.17.0+git30.b33c378d/heartbeat/Filesystem
--- old/resource-agents-4.17.0+git18.92719d83/heartbeat/Filesystem
2025-12-08 15:46:10.000000000 +0100
+++ new/resource-agents-4.17.0+git30.b33c378d/heartbeat/Filesystem
2026-01-22 08:54:44.000000000 +0100
@@ -269,7 +269,29 @@
avoid functions that could potentially block during process
detection
"false" : Do not kill any processes.
-"move" : like "safe", but try to mount --move first
+
+You may add one or more comma separated modifiers
+"[no]move", "[no]xargs", "[no]ps".
+For example:
+
+"true,xargs,nops":
+ find processes using system tools,
+ then kill them "simultaneously" using "xargs kill",
+ do not bother to show process details.
+
+"safe,move,noxargs,ps":
+ move the mount first, then
+ find processes by walking /proc/ "manually", then
+ show process details and kill them individually in a loop.
+
+"safe,move,xargs,ps":
+ move the mount first, then
+ find processes by walking /proc/ "manually", then
+ use "xargs ps" to show process details before
+ using "xargs kill" to get rid of them.
+
+If you have modifiers that contradict each other, the last mentioned wins,
+"ps,nops" results in nops.
The 'safe' option uses shell logic to walk the /proc/<pid>/ directories
for pids using the mount point while the default option uses the
@@ -281,8 +303,9 @@
Which may result in a timeout and stop failure, potentially escalating to
hard-reset of this node via fencing.
-The 'move' option tries to move the mount point somewhere those "rogue apps"
-do not expect it, then proceed to kill current users and attempt to umount.
+The 'move' option tries to "mount --move" the mount point somewhere those
+"rogue apps" do not expect it, then proceed to kill current users and attempt
+to umount.
For 'move' to work, you will have to make sure the mount point does not reside
under a shared mount, for example by mount -o bind,private /mount /mount
@@ -607,7 +630,7 @@
move_before_umount=false \
Filesystem_status
rc=$?
- if [ $rc != $OCF_NOT_RUNNING ]; then
+ if [ $rc -ne $OCF_NOT_RUNNING ]; then
msg="move_before_umount=$move_before_umount and
$MOVED_CANONICALIZED_MOUNTPOINT status is [$rc]"
rc=$OCF_ERR_GENERIC
ocf_exit_reason "$msg"
@@ -770,25 +793,44 @@
# If the list of pids is too long for a single shell variable,
# fix your fork bomb workload, and get a better shell anyways.
#
- if [ $nr_pids = 0 ]; then
+ if [ $nr_pids -eq 0 ]; then
ocf_log info "No processes on $dir were signalled.
force_unmount is set to '$FORCE_UNMOUNT'"
return 1
- elif [ $nr_pids -le 24 ]; then
+ fi
+ if $do_xargs_kill; then
+ if $do_ps_f; then
+ # echo "$pids" | xargs -r kill -s STOP
+ echo "sending signal $sig to $nr_pids processes:"
+
+ # According to my man page, 'ps -f "$pid"' might be
good enough,
+ # but needs rather specific formatting of that argument.
+ # And 'ps -f $pid' might produce too many words.
+ # Use xargs anyway.
+ echo "$pids" | xargs ps -f 2>&1
+ fi
+ echo "$pids" | xargs -r kill -s $sig 2>&1
+ if ! $do_ps_f; then
+ if [ $nr_pids -gt 24 ]; then
+ sed_script="11 s/^.*/... and more .../; 12,$((
$nr_pids - 10))d"
+ pids=$(echo "$pids" | sed -e "$sed_script" | tr
'\n' ' ')
+ fi
+ echo "sent signal $sig to ${nr_pids} processes
["${pids}"]"
+ fi
+ else
for pid in $pids; do
- ocf_log info "sending signal $sig to: $(ps -f $pid |
tail -1)"
+ if $do_ps_f; then
+ echo "sending signal $sig to: $(ps -f $pid |
tail -1)"
+ else
+ echo "sending signal $sig to $pid"
+ fi
kill -s $sig $pid
done
- else
- echo "$pids" | xargs -r kill -s $sig
- sed_script="11 s/^.*/... and more .../; 12,$(( $nr_pids - 10))d"
- pids=$(echo "$pids" | sed -e "$sed_script" | tr '\n' ' ')
- ocf_log info "sent signals $sig to ${nr_pids} processes
[${pids}]"
- fi
+ fi | ocf_log_pipe info
return 0
}
try_umount() {
local force_arg="$1" SUB="$2"
- $UMOUNT $force_arg "$SUB"
+ $UMOUNT $force_arg "$SUB" 2>&1 | ocf_log_pipe warn
list_mounts | grep "${TAB}${SUB}${TAB}" >/dev/null 2>&1 || {
ocf_log info "unmounted $SUB successfully"
return $OCF_SUCCESS
@@ -950,7 +992,7 @@
OP= \
Filesystem_status
rc=$?
- if [ $rc = $OCF_SUCCESS ]; then
+ if [ $rc -eq $OCF_SUCCESS ]; then
rc=$OCF_ERR_GENERIC
msg="move_before_umount=$move_before_umount and
something is mounted on $MOVED_CANONICALIZED_MOUNTPOINT"
ocf_exit_reason "$msg"
@@ -1162,10 +1204,6 @@
fi
# Check the OCF_RESKEY_ environment variables...
-FORCE_UNMOUNT="yes"
-if [ -n "${OCF_RESKEY_force_unmount}" ]; then
- FORCE_UNMOUNT=$OCF_RESKEY_force_unmount
-fi
DEVICE="$OCF_RESKEY_device"
case "$DEVICE" in
@@ -1181,10 +1219,54 @@
fi
FAST_STOP=${OCF_RESKEY_fast_stop:="yes"}
-case $FORCE_UNMOUNT in
- move) move_before_umount=true; FORCE_UNMOUNT=safe ;;
- *) move_before_umount=false ;;
-esac
+parse_force_unmount_modifiers()
+{
+ # keep previous "kill one by one" behavior as default for now
+ move_before_umount=''
+ do_xargs_kill=''
+ do_ps_f=''
+ force_unmount=''
+
+ local IFS=','
+ local m
+
+ set -- $OCF_RESKEY_force_unmount
+
+ for m ; do
+ case $m in
+ "") : ;; # silently ignore "*,,*" in the original value.
+ move) move_before_umount=true ;;
+ nomove) move_before_umount=false ;;
+ ps) do_ps_f=true ;;
+ nops) do_ps_f=false ;;
+ xargs) do_xargs_kill=true ;;
+ noxargs) do_xargs_kill=false ;;
+ # see ocf_is_true
+ yes|true|1|YES|TRUE|True|ja|on|ON|\
+ safe|\
+ false|no) force_unmount=$m ;;
+ *) ocf_log warn "force_unmount: unknown modifier $m ignored" ;;
+ esac
+ done
+
+ # not mentioned, or explicitly empty? "sane defaults"
+ if [ -z "$move_before_umount$do_xargs_kill$do_ps_f$force_unmount" ];
then
+ FORCE_UNMOUNT=false
+ else
+ FORCE_UNMOUNT=${force_unmount:-yes}
+ fi
+ : move : ${move_before_umount:=false}
+ if $move_before_umount; then
+ : xargs : ${do_xargs_kill:=true}
+ : ps : ${do_ps_f:=false}
+ else
+ : xargs : ${do_xargs_kill:=false}
+ : ps : ${do_ps_f:=true}
+ fi
+}
+
+parse_force_unmount_modifiers
+
OP=$1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/resource-agents-4.17.0+git18.92719d83/heartbeat/ocf-shellfuncs.in
new/resource-agents-4.17.0+git30.b33c378d/heartbeat/ocf-shellfuncs.in
--- old/resource-agents-4.17.0+git18.92719d83/heartbeat/ocf-shellfuncs.in
2025-12-08 15:46:10.000000000 +0100
+++ new/resource-agents-4.17.0+git30.b33c378d/heartbeat/ocf-shellfuncs.in
2026-01-22 08:54:44.000000000 +0100
@@ -348,6 +348,80 @@
fi
}
+# ocf_log_pipe:
+# similar to ocf_log, but read messages from stdin.
+# Prefix each line with HA_LOGTAG and timestamp, and output
+# to terminal / syslog / HA_LOGFILE / HA_DEBUGLOG / stderr
+# as appropriate.
+# Arguments: loglevel (crit, err, warn, info)
+#
+# Linux + systemd specific: could use systemd-cat.
+# Could use logger with structured data and message-id and whatnot, if
available.
+ocf_log_pipe()
+{
+ local loglevel=$1
+ local __OCF_PRIO
+
+ # test -p /dev/stdin || { ocf_log $loglevel "ocf_log_pipe: stdin should
be pipe"; return 1; }
+ # ... don't do that, then ...
+
+ case "$loglevel" in
+ crit) __OCF_PRIO="CRIT";;
+ err) __OCF_PRIO="ERROR";;
+ warn) __OCF_PRIO="WARNING";;
+ info) __OCF_PRIO="INFO";;
+ debug)__OCF_PRIO="DEBUG";;
+ *)
+ # compare ocf_log, and __ha_log
+ __OCF_PRIO=`echo "$1"| tr '[a-z]' '[A-Z]'`
+ loglevel=notice
+ ;;
+ esac
+
+ if [ "$loglevel" = debug ] ; then
+ if [ "$HA_debug" = 0 ] || [ -z "$HA_debug" ]; then
+ # Avoid sigpipe, drain to dev null.
+ cat > /dev/null
+ return
+ fi
+ fi
+
+ # ensure trailing blank in date format
+ case $HA_DATEFMT in *" ") :;; *) HA_DATEFMT="${HA_DATEFMT} ";; esac
+ export HA_LOGTAG HA_DATEFMT __OCF_PRIO
+
+ if test -t 2 ; then
+ awk '{ print strftime(ENVIRON["HA_DATEFMT"])
ENVIRON["HA_LOGTAG"] ": " ENVIRON["__OCF_PRIO"] ": " $0 }' >&2
+ return
+ fi
+
+ # should be already set, but just in case:
+ set_logtag
+
+ case $HA_LOGD/$loglevel in
+ yes/debug) ha_logger -t "${HA_LOGTAG}" -D ha-debug && return ;;
+ yes/*) ha_logger -t "${HA_LOGTAG}" && return ;;
+ esac
+
+ [ none = "$HA_LOGFACILITY" ] && HA_LOGFACILITY=""
+ if [ -n "$HA_LOGFACILITY" ]; then
+ sed -e "s/^/$__OCF_PRIO: /" \
+ | logger -t "$HA_LOGTAG" -p ${HA_LOGFACILITY}.${loglevel}
+ fi
+ if [ "$loglevel" != "debug" ] && [ -n "$HA_LOGFILE" ]; then
+ awk '{ print strftime(ENVIRON["HA_DATEFMT"])
ENVIRON["HA_LOGTAG"] ": " ENVIRON["__OCF_PRIO"] ": " $0 }' >> "$HA_LOGFILE"
+ fi
+ if [ -n "$HA_DEBUGLOG" ] && [ "$HA_LOGFILE" != "$HA_DEBUGLOG" ]; then
+ # I don't know why "logfile" is "{date}{tag}: ",
+ # and "debugfile" is "{tag}:\t{date}".
+ # But this is how ocf_log did it; behave the same.
+ awk '{ print ENVIRON["HA_LOGTAG"] "\t"
strftime(ENVIRON["HA_DATEFMT"]) ENVIRON["__OCF_PRIO"] ": " $0 }' >>
"$HA_DEBUGLOG"
+ fi
+ if [ -z "$HA_LOGFACILITY" ] && [ -z "$HA_LOGFILE" ] ; then
+ awk '{ print strftime(ENVIRON["HA_DATEFMT"])
ENVIRON["HA_LOGTAG"] ": " ENVIRON["__OCF_PRIO"] ": " $0 }' >&2
+ fi
+}
+
#
# ocf_exit_reason: print exit error string to stderr
# Usage: Allows the OCF script to provide a string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/resource-agents-4.17.0+git18.92719d83/heartbeat/podman-etcd
new/resource-agents-4.17.0+git30.b33c378d/heartbeat/podman-etcd
--- old/resource-agents-4.17.0+git18.92719d83/heartbeat/podman-etcd
2025-12-08 15:46:10.000000000 +0100
+++ new/resource-agents-4.17.0+git30.b33c378d/heartbeat/podman-etcd
2026-01-22 08:54:44.000000000 +0100
@@ -738,8 +738,8 @@
etcd_pod_container_exists() {
local count_matches
- # Check whether the etcd pod exists on the same node (header line
included)
- count_matches=$(crictl pods --label app=etcd -q | xargs -I {} crictl ps
--pod {} -o json | jq -r '.containers[].metadata | select ( .name == "etcd"
).name' | wc -l)
+ # Check whether the etcd pod exists on the same node (including
stopped/exited containers)
+ count_matches=$(crictl pods --label app=etcd -q | xargs -I {} crictl ps
-a --pod {} -o json | jq -r '.containers[].metadata | select ( .name == "etcd"
).name' | wc -l)
if [ "$count_matches" -eq 1 ]; then
# etcd pod found
return 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/resource-agents-4.17.0+git18.92719d83/heartbeat/powervs-move-ip.in
new/resource-agents-4.17.0+git30.b33c378d/heartbeat/powervs-move-ip.in
--- old/resource-agents-4.17.0+git18.92719d83/heartbeat/powervs-move-ip.in
2025-12-08 15:46:10.000000000 +0100
+++ new/resource-agents-4.17.0+git30.b33c378d/heartbeat/powervs-move-ip.in
2026-01-22 08:54:44.000000000 +0100
@@ -310,9 +310,9 @@
return json.load(f)
finally:
fcntl.flock(f, fcntl.LOCK_UN)
- except (json.JSONDecodeError, FileNotFoundError, PermissionError):
+ except (json.JSONDecodeError, FileNotFoundError, PermissionError) as e:
ocf.logger.warning(
- "[PowerCloudTokenManager] _read_cache: failed to read token
cache read due to missing file or malformed JSON."
+ f"[PowerCloudTokenManager] _read_cache: failed to read token
cache read due to missing file or malformed JSON: '{e}'"
)
return {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/resource-agents-4.17.0+git18.92719d83/heartbeat/powervs-subnet.in
new/resource-agents-4.17.0+git30.b33c378d/heartbeat/powervs-subnet.in
--- old/resource-agents-4.17.0+git18.92719d83/heartbeat/powervs-subnet.in
2025-12-08 15:46:10.000000000 +0100
+++ new/resource-agents-4.17.0+git30.b33c378d/heartbeat/powervs-subnet.in
2026-01-22 08:54:44.000000000 +0100
@@ -243,7 +243,16 @@
@staticmethod
def up(name, **kwargs):
- return nmcli._nmcli_cmd("connection", "up", name, **kwargs)
+ nmcli._nmcli_cmd("connection", "up", name, **kwargs)
+
+ for i in range(1, 10):
+ time.sleep(1)
+ status = nmcli._nmcli_cmd("connection", "show", name, **kwargs)
+ if len(status.get("IP4.ADDRESS[1]", "")) > 0:
+ return ocf.OCF_SUCCESS
+ ocf.logger.warning(f"nmcli.connection.up: check {i} of 10: IP
not yet available.")
+
+ return ocf.OCF_ERR_GENERIC
@staticmethod
def find(match_key, match_value):
@@ -824,10 +833,13 @@
conn_options.update({"802-3-ethernet.mtu": "9000",
"ethtool.feature-tso": "on"})
nmcli.connection.add(conn_name, options=conn_options)
- nmcli.connection.up(conn_name)
-
- if monitor_action(**res_options) != ocf.OCF_SUCCESS:
- raise PowerCloudAPIError(f"start_action: start subnet:
{ws.subnet_name} failed")
+ rc = nmcli.connection.up(conn_name)
+ if rc != ocf.OCF_SUCCESS:
+ return rc
+
+ rc = monitor_action(**res_options)
+ if rc != ocf.OCF_SUCCESS:
+ raise PowerCloudAPIError(f"start_action: start subnet:
{ws.subnet_name} failed", rc)
ocf.logger.info(
f"start_action: finished, added connection {conn_name} for subnet
{ws.subnet_name}"
@@ -861,8 +873,9 @@
ws.subnet_remove()
- if monitor_action(**res_options) != ocf.OCF_NOT_RUNNING:
- raise PowerCloudAPIError(f"stop_action: stop subnet {ws.subnet_name}
failed")
+ rc = monitor_action(**res_options)
+ if rc != ocf.OCF_NOT_RUNNING:
+ raise PowerCloudAPIError(f"stop_action: stop subnet {ws.subnet_name}
failed", rc)
ocf.logger.info(
f"stop_action: finished, deleted connection for subnet
{ws.subnet_name}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/resource-agents-4.17.0+git18.92719d83/tools/findif.c
new/resource-agents-4.17.0+git30.b33c378d/tools/findif.c
--- old/resource-agents-4.17.0+git18.92719d83/tools/findif.c 2025-12-08
15:46:10.000000000 +0100
+++ new/resource-agents-4.17.0+git30.b33c378d/tools/findif.c 2026-01-22
08:54:44.000000000 +0100
@@ -417,7 +417,6 @@
ValidateIFName(const char *ifname, struct ifreq *ifr)
{
int skfd = -1;
- char *colonptr;
if ( (skfd = socket(PF_INET, SOCK_DGRAM, 0)) == -1 ) {
fprintf(stderr, "%s\n", strerror(errno));
@@ -428,7 +427,7 @@
*(ifr->ifr_name + sizeof(ifr->ifr_name) - 1) = '\0';
/* Contain a ":"? Probably an error, but treat as warning at present */
- if ((colonptr = strchr(ifname, ':')) != NULL) {
+ if (strchr(ifname, ':') != NULL) {
fprintf(stderr, "%s: warning: name may be invalid\n",
ifr->ifr_name);
}