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 2025-07-25 17:04:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/resource-agents (Old) and /work/SRC/openSUSE:Factory/.resource-agents.new.13279 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "resource-agents" Fri Jul 25 17:04:11 2025 rev:141 rq:1295449 version:4.16.0+git90.968ad701 Changes: -------- --- /work/SRC/openSUSE:Factory/resource-agents/resource-agents.changes 2025-05-20 09:36:40.017628594 +0200 +++ /work/SRC/openSUSE:Factory/.resource-agents.new.13279/resource-agents.changes 2025-07-25 17:04:34.507395035 +0200 @@ -1,0 +2,20 @@ +Thu Jul 24 07:38:20 UTC 2025 - Peter Varkoly <vark...@suse.com> + +- Update to version 4.16.0+git90.968ad701: + * OCPBUGS-58324: podman-etcd Add OOM score adjustment for etcd containers + * ocf-shellfuncs: remove extra sleep from curl_retry (#2058) + * Filesystem: remove validate-all fstype check, as there isnt a reliable and portable way to check + * IPaddr2: add link status DOWN/LOWERLAYERDOWN check + * ocf-shellfuncs: set SHELL to default shell if it's set to nologin + * mariadb: add SSL/TLS-Support (#2045) + * findif.sh: fix to avoid duplicate route issues + * podman-etcd: fix listen-peer-urls binding (#2049) + * azure-events-az: Update Deployment info section + * azure-events: backport relevant changes from azure-events-az +- Remove unsupported RAs from resource-agents package + Remove man pages of unsupported RAs from resource-agents package + Adapt drop-deprecated-agents.patch (jsc#PED-8737) +- Move %{_usr}/lib/ocf/resource.d/heartbeat/ldirectord into the + package ldirectord + +------------------------------------------------------------------- Old: ---- resource-agents-4.16.0+git73.99f301e1.tar.xz New: ---- resource-agents-4.16.0+git90.968ad701.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ resource-agents.spec ++++++ --- /var/tmp/diff_new_pack.y4Spqf/_old 2025-07-25 17:04:35.183423085 +0200 +++ /var/tmp/diff_new_pack.y4Spqf/_new 2025-07-25 17:04:35.183423085 +0200 @@ -17,7 +17,7 @@ Name: resource-agents -Version: 4.16.0+git73.99f301e1 +Version: 4.16.0+git90.968ad701 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 @@ -191,6 +191,7 @@ %service_add_pre ldirectord.service %files +%exclude %{_usr}/lib/ocf/resource.d/heartbeat/ldirectord %defattr(-,root,root) %dir %{_prefix}/lib/ocf %dir %{_prefix}/lib/ocf/resource.d @@ -245,5 +246,6 @@ %{_sbindir}/rcldirectord %exclude %{_sysconfdir}/init.d/ldirectord %{_sysconfdir}/ha.d/resource.d/ldirectord +%{_usr}/lib/ocf/resource.d/heartbeat/ldirectord %config(noreplace) %{_sysconfdir}/logrotate.d/ldirectord ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.y4Spqf/_old 2025-07-25 17:04:35.235425243 +0200 +++ /var/tmp/diff_new_pack.y4Spqf/_new 2025-07-25 17:04:35.239425409 +0200 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/ClusterLabs/resource-agents.git</param> -<param name="changesrevision">06d95bba916b1b39f15eb2615b9412c18e937a52</param> +<param name="changesrevision">968ad70124518348f8115fc414cf48bd1193e538</param> </service> </servicedata> (No newline at EOF) ++++++ drop-deprecated-agents.patch ++++++ --- /var/tmp/diff_new_pack.y4Spqf/_old 2025-07-25 17:04:35.259426239 +0200 +++ /var/tmp/diff_new_pack.y4Spqf/_new 2025-07-25 17:04:35.259426239 +0200 @@ -1,5 +1,5 @@ ---- a/heartbeat/Makefile.am.orig 2025-05-13 13:52:11.405852066 +0200 -+++ b/heartbeat/Makefile.am 2025-05-13 13:51:45.149625303 +0200 +--- a/heartbeat/Makefile.am.orig 2025-07-22 19:05:57.520867141 +0200 ++++ b/heartbeat/Makefile.am 2025-07-22 19:06:36.125190546 +0200 @@ -50,94 +50,61 @@ send_ua_SOURCES = send_ua.c IPv6addr_utils.c send_ua_LDADD = $(LIBNETLIBS) @@ -110,7 +110,7 @@ oraasm \ oracle \ oralsnr \ -@@ -157,39 +119,22 @@ +@@ -157,39 +119,21 @@ ovsmonitor \ pgagent \ pgsql \ @@ -128,7 +128,7 @@ rsyncd \ - rsyslog \ - scsi2reservation \ - sfex \ +- sfex \ sg_persist \ - mpathpersist \ - slapd \ @@ -154,4 +154,159 @@ if BUILD_AZURE_EVENTS_AZ ocf_SCRIPTS += azure-events-az +--- resource-agents/doc/man/Makefile.am.orig 2025-07-24 07:12:57.504178731 +0200 ++++ resource-agents/doc/man/Makefile.am 2025-07-24 07:21:55.135798301 +0200 +@@ -77,69 +77,46 @@ + # 12126 on savannah.gnu.org. But, maybe it gets fixed soon, it was + # first reported in 1995 and added to Savannah in in 2005... + if BUILD_DOC +-man_MANS = ocf_heartbeat_AoEtarget.7 \ +- ocf_heartbeat_AudibleAlarm.7 \ +- ocf_heartbeat_ClusterMon.7 \ +- ocf_heartbeat_CTDB.7 \ ++man_MANS = ocf_heartbeat_CTDB.7 \ + ocf_heartbeat_Delay.7 \ + ocf_heartbeat_Dummy.7 \ +- ocf_heartbeat_EvmsSCC.7 \ +- ocf_heartbeat_Evmsd.7 \ + ocf_heartbeat_Filesystem.7 \ +- ocf_heartbeat_ICP.7 \ +- ocf_heartbeat_IPaddr.7 \ + ocf_heartbeat_IPaddr2.7 \ + ocf_heartbeat_IPsrcaddr.7 \ + ocf_heartbeat_LVM.7 \ + ocf_heartbeat_LVM-activate.7 \ +- ocf_heartbeat_LinuxSCSI.7 \ + ocf_heartbeat_MailTo.7 \ +- ocf_heartbeat_ManageRAID.7 \ +- ocf_heartbeat_ManageVE.7 \ + ocf_heartbeat_NodeUtilization.7 \ +- ocf_heartbeat_Pure-FTPd.7 \ + ocf_heartbeat_Raid1.7 \ + ocf_heartbeat_Route.7 \ + ocf_heartbeat_SAPDatabase.7 \ + ocf_heartbeat_SAPInstance.7 \ + ocf_heartbeat_SendArp.7 \ +- ocf_heartbeat_ServeRAID.7 \ +- ocf_heartbeat_SphinxSearchDaemon.7 \ + ocf_heartbeat_Squid.7 \ + ocf_heartbeat_Stateful.7 \ +- ocf_heartbeat_SysInfo.7 \ +- ocf_heartbeat_VIPArip.7 \ + ocf_heartbeat_VirtualDomain.7 \ + ocf_heartbeat_WAS.7 \ + ocf_heartbeat_WAS6.7 \ +- ocf_heartbeat_WinPopup.7 \ +- ocf_heartbeat_Xen.7 \ + ocf_heartbeat_Xinetd.7 \ + ocf_heartbeat_ZFS.7 \ + ocf_heartbeat_aliyun-vpc-move-ip.7 \ + ocf_heartbeat_anything.7 \ + ocf_heartbeat_apache.7 \ +- ocf_heartbeat_asterisk.7 \ + ocf_heartbeat_aws-vpc-move-ip.7 \ + ocf_heartbeat_aws-vpc-route53.7 \ + ocf_heartbeat_awseip.7 \ + ocf_heartbeat_awsvip.7 \ + ocf_heartbeat_azure-lb.7 \ +- ocf_heartbeat_clvm.7 \ +- ocf_heartbeat_conntrackd.7 \ + ocf_heartbeat_corosync-qnetd.7 \ + ocf_heartbeat_crypt.7 \ + ocf_heartbeat_db2.7 \ + ocf_heartbeat_dhcpd.7 \ + ocf_heartbeat_docker.7 \ + ocf_heartbeat_docker-compose.7 \ +- ocf_heartbeat_dovecot.7 \ + ocf_heartbeat_dnsupdate.7 \ + ocf_heartbeat_dummypy.7 \ +- ocf_heartbeat_eDir88.7 \ + ocf_heartbeat_ethmonitor.7 \ + ocf_heartbeat_exportfs.7 \ +- ocf_heartbeat_fio.7 \ + ocf_heartbeat_galera.7 \ + ocf_heartbeat_garbd.7 \ + ocf_heartbeat_gcp-ilb.7 \ +@@ -149,23 +126,12 @@ + ocf_heartbeat_iface-bridge.7 \ + ocf_heartbeat_iface-macvlan.7 \ + ocf_heartbeat_iface-vlan.7 \ +- ocf_heartbeat_ipsec.7 \ +- ocf_heartbeat_ids.7 \ +- ocf_heartbeat_iscsi.7 \ +- ocf_heartbeat_jboss.7 \ +- ocf_heartbeat_jira.7 \ +- ocf_heartbeat_kamailio.7 \ + ocf_heartbeat_lvmlockd.7 \ +- ocf_heartbeat_lxc.7 \ +- ocf_heartbeat_lxd-info.7 \ +- ocf_heartbeat_machine-info.7 \ + ocf_heartbeat_mariadb.7 \ + ocf_heartbeat_mdraid.7 \ +- ocf_heartbeat_minio.7 \ + ocf_heartbeat_mpathpersist.7 \ + ocf_heartbeat_mysql.7 \ + ocf_heartbeat_mysql-proxy.7 \ +- ocf_heartbeat_nagios.7 \ + ocf_heartbeat_named.7 \ + ocf_heartbeat_nfsnotify.7 \ + ocf_heartbeat_nfsserver.7 \ +@@ -174,10 +140,6 @@ + ocf_heartbeat_nvmet-namespace.7 \ + ocf_heartbeat_nvmet-port.7 \ + ocf_heartbeat_openstack-info.7 \ +- ocf_heartbeat_ocivip.7 \ +- ocf_heartbeat_openstack-cinder-volume.7 \ +- ocf_heartbeat_openstack-floating-ip.7 \ +- ocf_heartbeat_openstack-virtual-ip.7 \ + ocf_heartbeat_oraasm.7 \ + ocf_heartbeat_oracle.7 \ + ocf_heartbeat_oralsnr.7 \ +@@ -185,42 +147,25 @@ + ocf_heartbeat_ovsmonitor.7 \ + ocf_heartbeat_pgagent.7 \ + ocf_heartbeat_pgsql.7 \ +- ocf_heartbeat_pingd.7 \ + ocf_heartbeat_podman.7 \ + ocf_heartbeat_podman-etcd.7 \ + ocf_heartbeat_portblock.7 \ + ocf_heartbeat_postfix.7 \ +- ocf_heartbeat_pound.7 \ +- ocf_heartbeat_proftpd.7 \ + ocf_heartbeat_rabbitmq-cluster.7 \ + ocf_heartbeat_rabbitmq-server-ha.7 \ + ocf_heartbeat_redis.7 \ +- ocf_heartbeat_rkt.7 \ + ocf_heartbeat_rsyncd.7 \ +- ocf_heartbeat_rsyslog.7 \ +- ocf_heartbeat_scsi2reservation.7 \ +- ocf_heartbeat_sfex.7 \ +- ocf_heartbeat_slapd.7 \ +- ocf_heartbeat_smb-share.7 \ +- ocf_heartbeat_sybaseASE.7 \ + ocf_heartbeat_sg_persist.7 \ + ocf_heartbeat_storage-mon.7 \ +- ocf_heartbeat_symlink.7 \ +- ocf_heartbeat_syslog-ng.7 \ +- ocf_heartbeat_tomcat.7 \ +- ocf_heartbeat_varnish.7 \ +- ocf_heartbeat_vdo-vol.7 \ +- ocf_heartbeat_vmware.7 \ +- ocf_heartbeat_vsftpd.7 \ +- ocf_heartbeat_zabbixserver.7 ++ ocf_heartbeat_symlink.7 + + if USE_IPV6ADDR_AGENT + man_MANS += ocf_heartbeat_IPv6addr.7 + endif + +-if BUILD_AZURE_EVENTS +-man_MANS += ocf_heartbeat_azure-events.7 +-endif ++#if BUILD_AZURE_EVENTS ++#man_MANS += ocf_heartbeat_azure-events.7 ++#endif + + if BUILD_AZURE_EVENTS_AZ + man_MANS += ocf_heartbeat_azure-events-az.7 ++++++ resource-agents-4.16.0+git73.99f301e1.tar.xz -> resource-agents-4.16.0+git90.968ad701.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/Filesystem new/resource-agents-4.16.0+git90.968ad701/heartbeat/Filesystem --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/Filesystem 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/Filesystem 2025-07-09 15:05:41.000000000 +0200 @@ -978,23 +978,6 @@ # Filesystem_validate_all() { - # Check if the $FSTYPE is workable - # NOTE: Without inserting the $FSTYPE module, this step may be imprecise - # TODO: This is Linux specific crap. - if [ ! -z "$FSTYPE" -a "$FSTYPE" != none ]; then - cut -f2 /proc/filesystems | grep "^${FSTYPE}$" >/dev/null 2>&1 - if [ $? -ne 0 ]; then - modpath=/lib/modules/$(uname -r) - moddep=$modpath/modules.dep - # Do we have $FSTYPE in modules.dep? - cut -d' ' -f1 $moddep \ - | grep "^${modpath}.*${FSTYPE}\.k\?o:$" >/dev/null 2>&1 - if [ $? -ne 0 ]; then - ocf_log info "It seems we do not have $FSTYPE support" - fi - fi - fi - # If we are supposed to do monitoring with status files, then # we need a utility to write in O_DIRECT mode. if [ $OCF_CHECK_LEVEL -gt 0 ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/IPaddr2 new/resource-agents-4.16.0+git90.968ad701/heartbeat/IPaddr2 --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/IPaddr2 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/IPaddr2 2025-07-09 15:05:41.000000000 +0200 @@ -92,6 +92,19 @@ OCF_RESKEY_noprefixroute_default="false" OCF_RESKEY_preferred_lft_default="forever" OCF_RESKEY_network_namespace_default="" +OCF_RESKEY_check_link_status_default="true" + +# RHEL specific defaults +if is_redhat_based; then + get_os_ver + ocf_version_cmp "$VER" "10.1" 2>/dev/null + + case "$?" in + # RHEL < 10.1 + 0) + OCF_RESKEY_check_link_status_default="false";; + esac +fi : ${OCF_RESKEY_ip=${OCF_RESKEY_ip_default}} : ${OCF_RESKEY_cidr_netmask=${OCF_RESKEY_cidr_netmask_default}} @@ -116,6 +129,7 @@ : ${OCF_RESKEY_noprefixroute=${OCF_RESKEY_noprefixroute_default}} : ${OCF_RESKEY_preferred_lft=${OCF_RESKEY_preferred_lft_default}} : ${OCF_RESKEY_network_namespace=${OCF_RESKEY_network_namespace_default}} +: ${OCF_RESKEY_check_link_status=${OCF_RESKEY_check_link_status_default}} ####################################################################### @@ -449,6 +463,14 @@ <shortdesc lang="en">Network namespace to use</shortdesc> <content type="string" default="${OCF_RESKEY_network_namespace_default}"/> </parameter> + +<parameter name="check_link_status"> +<longdesc lang="en"> +Consider the resource failed if the interface has status DOWN or LOWERLAYERDOWN. +</longdesc> +<shortdesc lang="en">Consider the resource failed if the interface has status DOWN or LOWERLAYERDOWN</shortdesc> +<content type="string" default="${OCF_RESKEY_check_link_status_default}"/> +</parameter> </parameters> <actions> @@ -581,6 +603,9 @@ elif [ "$__OCF_ACTION" = stop ]; then ocf_log warn "[$FINDIF] failed" exit $OCF_SUCCESS + elif [ "$__OCF_ACTION" = start ]; then + ocf_exit_reason "[$FINDIF] failed" + exit $OCF_ERR_INSTALLED else ocf_exit_reason "[$FINDIF] failed" exit $rc @@ -1002,6 +1027,12 @@ return 0 fi + if ocf_is_true "$OCF_RESKEY_check_link_status" && $IP2UTIL -f $FAMILY addr show $cur_nic | \ + grep -q "[[:space:]]\(DOWN\|LOWERLAYERDOWN\)[[:space:]]"; then + echo "down" + return 0 + fi + if [ -z "$IP_CIP" ]; then for i in $cur_nic; do # check address label @@ -1073,6 +1104,11 @@ exit $OCF_SUCCESS fi + if [ "$ip_status" = "down" ]; then + ocf_exit_reason "IP $OCF_RESKEY_ip available, but device has status $ip_status" + exit $OCF_ERR_INSTALLED + fi + if [ "$ip_status" = "partial3" ]; then ocf_exit_reason "IP $OCF_RESKEY_ip available, but label missing" exit $OCF_ERR_GENERIC @@ -1096,7 +1132,7 @@ echo "+$IP_INC_NO" >$IP_CIP_FILE fi - if [ "$ip_status" = "no" ]; then + if [ "$ip_status" != "ok" ]; then if ocf_is_true ${OCF_RESKEY_lvs_support}; then for i in `find_interface $OCF_RESKEY_ip 32`; do case $i in @@ -1213,6 +1249,7 @@ # interface health maybe via a daemon like FailSafe etc... local ip_status=`ip_served` + ocf_log debug "monitor: $ip_status" case $ip_status in ok) run_arp_sender refresh @@ -1221,6 +1258,9 @@ no) exit $OCF_NOT_RUNNING ;; + down) + exit $OCF_ERR_INSTALLED + ;; *) # Errors on this interface? return $OCF_ERR_GENERIC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/azure-events-az.in new/resource-agents-4.16.0+git90.968ad701/heartbeat/azure-events-az.in --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/azure-events-az.in 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/azure-events-az.in 2025-07-09 15:05:41.000000000 +0200 @@ -749,10 +749,22 @@ away from the affected node to allow for a graceful shutdown. Deployment: - crm configure primitive rsc_azure-events-az ocf:heartbeat:azure-events-az \ + + Set property and location constraint: + crm configure property node-health-strategy=custom + crm configure location loc_azure_health /'!health-.*'/ rule '#health-azure': defined '#uname' + + Set #health-azure attribute to 0 (healthy) for every node in the cluster (example of node1 only): + crm_attribute --node node1 --name '#health-azure' --update 0 + + Configure the RA: + crm configure primitive health-azure-events ocf:heartbeat:azure-events-az \ params eventTypes="Reboot,Redeploy" verbose=false retry_count=3 retry_wait=20 request_timeout=15 \ - op monitor interval=10s - crm configure clone cln_azure-events-az rsc_azure-events-az + op start start-delay=60s \ + op monitor interval=10s \ + meta failure-timeout=120s + crm configure clone health-azure-events-cln health-azure-events \ + meta allow-unhealthy-nodes=true For further information on Microsoft Azure Scheduled Events, please refer to the following documentation: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/azure-events.in new/resource-agents-4.16.0+git90.968ad701/heartbeat/azure-events.in --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/azure-events.in 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/azure-events.in 2025-07-09 15:05:41.000000000 +0200 @@ -602,21 +602,21 @@ ocf.logger.info("handleRemoteEvents: handling remote event %s (%s; nodes = %s)" % (e.EventId, e.EventType, str(e.Resources))) # before we can force an event to start, we need to ensure all nodes involved have stopped their resources if e.EventStatus == "Scheduled": - allNodesStopped = True + allResourcesNowStopped = True for azName in e.Resources: hostName = clusterHelper.getHostNameFromAzName(azName) state = self.getState(node=hostName) if state == STOPPING: # the only way we can continue is when node state is STOPPING, but all resources have been stopped if not clusterHelper.allResourcesStoppedOnNode(hostName): - ocf.logger.info("handleRemoteEvents: (at least) node %s has still resources running -> wait" % hostName) - allNodesStopped = False + ocf.logger.info("handleRemoteEvents: (at least) node %s still has resources running -> wait" % hostName) + allResourcesNowStopped = False break elif state in (AVAILABLE, IN_EVENT, ON_HOLD): ocf.logger.info("handleRemoteEvents: node %s is still %s -> remote event needs to be picked up locally" % (hostName, nodeStateToString(state))) - allNodesStopped = False + allResourcesNowStopped = False break - if allNodesStopped: + if allResourcesNowStopped: ocf.logger.info("handleRemoteEvents: nodes %s are stopped -> add remote event %s to force list" % (str(e.Resources), e.EventId)) for n in e.Resources: hostName = clusterHelper.getHostNameFromAzName(n) @@ -698,11 +698,11 @@ ocf.logger.debug("handleLocalEvents: no local azEvents to handle") if curState == STOPPING: if clusterHelper.noPendingResourcesOnNode(self.hostName): - ocf.logger.info("handleLocalEvents: all local resources are started properly -> put node standby") + ocf.logger.info("handleLocalEvents: all local resources are stopped -> put node standby") self.putNodeStandby() mayUpdateDocVersion = True else: - ocf.logger.info("handleLocalEvents: some local resources are not clean yet -> wait") + ocf.logger.info("handleLocalEvents: some local resources are not stopped yet -> wait") ocf.logger.debug("handleLocalEvents: finished; mayUpdateDocVersion = %s" % str(mayUpdateDocVersion)) return mayUpdateDocVersion @@ -801,6 +801,7 @@ Deployment: crm configure primitive rsc_azure-events ocf:heartbeat:azure-events \ + params eventTypes=Reboot,Redeploy verbose=false \ op monitor interval=10s crm configure clone cln_azure-events rsc_azure-events diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/findif.sh new/resource-agents-4.16.0+git90.968ad701/heartbeat/findif.sh --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/findif.sh 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/findif.sh 2025-07-09 15:05:41.000000000 +0200 @@ -217,18 +217,14 @@ fi if [ -n "$nic" ] ; then # NIC supports more than two. - routematch=$(ip -o -f $family route list match $match $proto $scope | grep -v "^\(unreachable\|prohibit\|blackhole\)" | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr) + routematch=$(ip -o -f $family route list match $match $proto $scope | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr) else - routematch=$(ip -o -f $family route list match $match $proto $scope | grep -v "^\(unreachable\|prohibit\|blackhole\)" | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr) - fi - if [ "$family" = "inet6" ]; then - routematch=$(echo "$routematch" | grep -v "^default") + routematch=$(ip -o -f $family route list match $match $proto $scope | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr) fi - if [ $(echo "$routematch" | wc -l) -gt 1 ]; then - ocf_exit_reason "More than 1 routes match $match. Unable to decide which route to use." - return $OCF_ERR_GENERIC - fi + # ignore matches from unrelated tables, and sort by metric to get the route with the lowest metric + routematch=$(echo "$routematch" | awk '!/^(default|unreachable|prohibit|blackhole)/{match($0, /metric ([^ ]+)/, arr); print arr[1], $0}' | sort -k 1n -u | cut -d" " -f 2- | head -1) + set -- $routematch if [ $# = 0 ] ; then case $OCF_RESKEY_ip in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/mariadb.in new/resource-agents-4.16.0+git90.968ad701/heartbeat/mariadb.in --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/mariadb.in 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/mariadb.in 2025-07-09 15:05:41.000000000 +0200 @@ -247,6 +247,39 @@ <content type="string" default="${OCF_RESKEY_replication_port_default}" /> </parameter> +<parameter name="replication_require_ssl" unique="0" required="0"> +<longdesc lang="en"> +Enables SSL connection to local MySQL service for replication user. +i.e. if REQUIRE SSL for replication user in MySQL set, this should be set to "true". +</longdesc> +<shortdesc lang="en">MySQL replication require ssl</shortdesc> +<content type="string" default="${OCF_RESKEY_replication_require_ssl_default}" /> +</parameter> + +<parameter name="replication_master_ssl_ca" unique="0" required="0"> +<longdesc lang="en"> +The SSL CA certificate to be used for replication over SSL. +</longdesc> +<shortdesc lang="en">MySQL replication SSL CA certificate</shortdesc> +<content type="string" default="${OCF_RESKEY_replication_master_ssl_ca_default}" /> +</parameter> + +<parameter name="replication_master_ssl_cert" unique="0" required="0"> +<longdesc lang="en"> +The SSL CA certificate to be used for replication over SSL. +</longdesc> +<shortdesc lang="en">MySQL replication SSL certificate</shortdesc> +<content type="string" default="${OCF_RESKEY_replication_master_ssl_cert_default}" /> +</parameter> + +<parameter name="replication_master_ssl_key" unique="0" required="0"> +<longdesc lang="en"> +The SSL certificate key to be used for replication over SSL. +</longdesc> +<shortdesc lang="en">MySQL replication SSL certificate key</shortdesc> +<content type="string" default="${OCF_RESKEY_replication_master_ssl_key_default}" /> +</parameter> + </parameters> <actions> @@ -255,6 +288,7 @@ <action name="status" timeout="60s" /> <action name="monitor" depth="0" timeout="30s" interval="20s" /> <action name="monitor" role="Promoted" depth="0" timeout="30s" interval="10s" /> +<action name="monitor" role="Unpromoted" depth="0" timeout="30s" interval="30s" /> <action name="promote" timeout="120s" /> <action name="demote" timeout="120s" /> <action name="notify" timeout="90s" /> @@ -600,6 +634,7 @@ set_master() { local new_master=$($CRM_ATTR_REPL_INFO --query -q) + local master_ssl_params # Informs the MariaDB server of the master to replicate # from. Accepts one mandatory argument which must contain the host @@ -607,12 +642,20 @@ # from the laste master the slave replicated from, or freshly # reset with RESET MASTER. ocf_log info "Changing MariaDB configuration to replicate from $new_master." + if [ -n "$OCF_RESKEY_replication_master_ssl_ca" ] && [ -n "$OCF_RESKEY_replication_master_ssl_cert" ] && [ -n "$OCF_RESKEY_replication_master_ssl_key" ]; then + master_ssl_params="MASTER_SSL=1, \ + MASTER_SSL_CA='$OCF_RESKEY_replication_master_ssl_ca', \ + MASTER_SSL_CERT='$OCF_RESKEY_replication_master_ssl_cert', \ + MASTER_SSL_KEY='$OCF_RESKEY_replication_master_ssl_key', " + fi + ocf_run $MYSQL $MYSQL_OPTIONS_REPL \ -e "CHANGE MASTER TO MASTER_HOST='$new_master', \ MASTER_PORT=$OCF_RESKEY_replication_port, \ MASTER_USER='$OCF_RESKEY_replication_user', \ MASTER_PASSWORD='$OCF_RESKEY_replication_passwd', \ + $master_ssl_params \ MASTER_USE_GTID=current_pos"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/mysql-common.sh new/resource-agents-4.16.0+git90.968ad701/heartbeat/mysql-common.sh --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/mysql-common.sh 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/mysql-common.sh 2025-07-09 15:05:41.000000000 +0200 @@ -97,7 +97,14 @@ MYSQL=$OCF_RESKEY_client_binary if ocf_is_true "$OCF_RESKEY_replication_require_ssl"; then - MYSQL_OPTIONS_LOCAL_SSL_OPTIONS="--ssl-mode=REQUIRED" + if [ "${OCF_RESOURCE_TYPE}" = "mariadb" ] ; then + MYSQL_OPTIONS_LOCAL_SSL_OPTIONS="--ssl" + if [ -n "${OCF_RESKEY_replication_master_ssl_ca}" ] ; then + MYSQL_OPTIONS_LOCAL_SSL_OPTIONS="${MYSQL_OPTIONS_LOCAL_SSL_OPTIONS} --ssl-ca=${OCF_RESKEY_replication_master_ssl_ca}" + fi + else + MYSQL_OPTIONS_LOCAL_SSL_OPTIONS="--ssl-mode=REQUIRED" + fi else MYSQL_OPTIONS_LOCAL_SSL_OPTIONS="" fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/ocf-shellfuncs.in new/resource-agents-4.16.0+git90.968ad701/heartbeat/ocf-shellfuncs.in --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/ocf-shellfuncs.in 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/ocf-shellfuncs.in 2025-07-09 15:05:41.000000000 +0200 @@ -65,6 +65,8 @@ # to make sure that ocf_is_probe() always works : ${OCF_RESKEY_CRM_meta_interval=0} +[ "${SHELL##*/}" = "nologin" ] && SHELL="$SH" + ocf_is_root() { if [ X`id -u` = X0 ]; then true @@ -706,7 +708,9 @@ [ $? -ne 0 ] && exit $OCF_ERR_GENERIC args=$(echo "$args" | sed "s/$OLD_TOKEN/$TOKEN/") fi - sleep $sleep + if [ $try -lt $tries ]; then + sleep $sleep + fi done if [ $rc -ne 0 ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.16.0+git73.99f301e1/heartbeat/podman-etcd new/resource-agents-4.16.0+git90.968ad701/heartbeat/podman-etcd --- old/resource-agents-4.16.0+git73.99f301e1/heartbeat/podman-etcd 2025-05-12 11:32:08.000000000 +0200 +++ new/resource-agents-4.16.0+git90.968ad701/heartbeat/podman-etcd 2025-07-09 15:05:41.000000000 +0200 @@ -45,6 +45,7 @@ OCF_RESKEY_authfile_default="/var/lib/kubelet/config.json" OCF_RESKEY_allow_pull_default="1" OCF_RESKEY_reuse_default="0" +OCF_RESKEY_oom_default="-997" : ${OCF_RESKEY_image=${OCF_RESKEY_image_default}} : ${OCF_RESKEY_pod_manifest=${OCF_RESKEY_pod_manifest_default}} @@ -53,6 +54,7 @@ : ${OCF_RESKEY_authfile=${OCF_RESKEY_authfile_default}} : ${OCF_RESKEY_allow_pull=${OCF_RESKEY_allow_pull_default}} : ${OCF_RESKEY_reuse=${OCF_RESKEY_reuse_default}} +: ${OCF_RESKEY_oom=${OCF_RESKEY_oom_default}} ####################################################################### @@ -230,6 +232,16 @@ <shortdesc lang="en">drop-in dependency</shortdesc> <content type="boolean"/> </parameter> + +<parameter name="oom" required="0" unique="0"> +<longdesc lang="en"> +Tune the host's Out-Of-Memory (OOM) preferences for containers (accepts values from -1000 to 1000). +Default to same OOM score as system-node-critical +https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#node-out-of-memory-behavior +</longdesc> +<shortdesc lang="en">OOM for container</shortdesc> +<content type="integer" default="${OCF_RESKEY_oom_default}"/> +</parameter> </parameters> <actions> @@ -436,15 +448,9 @@ ETCD_PEER_CERT=$(get_env_from_manifest "ETCDCTL_CERT") ETCD_PEER_KEY=$(get_env_from_manifest "ETCDCTL_KEY") - if is_learner; then - LISTEN_CLIENT_URLS="$NODEIP" - LISTEN_PEER_URLS="$NODEIP" - LISTEN_METRICS_URLS="$NODEIP" - else - LISTEN_CLIENT_URLS="0.0.0.0" - LISTEN_PEER_URLS="0.0.0.0" - LISTEN_METRICS_URLS="0.0.0.0" - fi + LISTEN_CLIENT_URLS="0.0.0.0" + LISTEN_PEER_URLS="0.0.0.0" + LISTEN_METRICS_URLS="0.0.0.0" } archive_data_folder() @@ -1232,7 +1238,10 @@ fi podman_create_mounts - local run_opts="-d --name=${CONTAINER}" + local run_opts="--detach --name=${CONTAINER}" + + run_opts="$run_opts --oom-score-adj=${OCF_RESKEY_oom}" + # check to see if the container has already started podman_simple_status if [ $? -eq $OCF_SUCCESS ]; then @@ -1519,6 +1528,11 @@ exit $OCF_ERR_CONFIGURED fi + if [ "$OCF_RESKEY_oom" -lt -1000 ] || [ "$OCF_RESKEY_oom" -gt 1000 ]; then + ocf_exit_reason "'oom' value ${OCF_RESKEY_oom} is out of range [-1000:1000]" + exit $OCF_ERR_CONFIGURED + fi + return $OCF_SUCCESS }