Hello community,
here is the log from the commit of package resource-agents for openSUSE:Factory checked in at 2019-06-18 14:55:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/resource-agents (Old)
and /work/SRC/openSUSE:Factory/.resource-agents.new.4811 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "resource-agents"
Tue Jun 18 14:55:17 2019 rev:97 rq:710012 version:4.2.0+git157.40de8382
Changes:
--------
--- /work/SRC/openSUSE:Factory/resource-agents/resource-agents.changes 2019-06-07 12:18:35.856786044 +0200
+++ /work/SRC/openSUSE:Factory/.resource-agents.new.4811/resource-agents.changes 2019-06-18 14:55:21.201441308 +0200
@@ -1,0 +2,30 @@
+Fri Jun 14 17:46:34 UTC 2019 - David Disseldorp
+
+- Fix CTDB resource agent for Samba 4.9.0 and later (bsc#1137130)
+ * 0007-CTDB-support-Samba-4.9.patch
+
+-------------------------------------------------------------------
+Fri Jun 14 15:36:02 UTC 2019 - dakechi@suse.com
+
+- Update to version 4.2.0+git157.40de8382:
+ * azure-events: change message log level for the non action messages (bsc#1137038, bsc#1137231)
+ * Remove unneeded podman exec --help call
+ * Simplify podman_monitor()
+ * Avoid double call to podman inspect in podman_simple_status()
+ * dhcpd: keep SELinux context
+ * vsftpd: fix missing $ on exit code detected by CI
+ * ocf_is_true: add True to regexp
+ * Low: Filesystem: Fix missing mount point due to corrupted mount list
+ * Low: Filesystem: Fix a problem umount is not executed in the event of a disk failure
+ * pgsql: enhance checks in pgsql_real_start to prevent incorrect status gets
+ * Set fdisk command options on Linux or BSD
+ * Adds a virtio- prefix to check disk's availability
+ * Use fdisk to physically check disks' availability
+ * Monitor: check cinder volume locally without using the API
+ * Bad variable name to export (sh syntax)
+ * Use strict sh features (no bash regex)
+ * Cinder: Manages a local cache and calls the API to get openstack_id
+ * Medium: pgsql: Set initial score for primary and hot standby in the probe.
+ * Volume re-attaching, v3 API, get hostname from corosync
+
+-------------------------------------------------------------------
Old:
----
resource-agents-4.2.0+git122.571ed619.tar.xz
New:
----
0007-CTDB-support-Samba-4.9.patch
resource-agents-4.2.0+git157.40de8382.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ resource-agents.spec ++++++
--- /var/tmp/diff_new_pack.GmHmG9/_old 2019-06-18 14:55:21.733440962 +0200
+++ /var/tmp/diff_new_pack.GmHmG9/_new 2019-06-18 14:55:21.733440962 +0200
@@ -17,7 +17,7 @@
Name: resource-agents
-Version: 4.2.0+git122.571ed619
+Version: 4.2.0+git157.40de8382
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
@@ -37,6 +37,8 @@
Patch4: 0004-Revert-Low-build-Move-binaries-in-usr-lib-heartbeat-.patch
# PATCH-FIX-OPENSUSE: Revert ocf_log: use same log format at pacemaker
Patch6: 0006-Revert-ocf_log-use-same-log-format-as-pacemaker.patch
+# PATCH-FIX-OPENSUSE: CTDB: support Samba 4.9+
+Patch7: 0007-CTDB-support-Samba-4.9.patch
BuildRequires: autoconf
BuildRequires: automake
@@ -110,6 +112,7 @@
%patch3 -p1
%patch4 -p1
%patch6 -p1
+%patch7 -p1
%build
autoreconf -fvi
++++++ 0007-CTDB-support-Samba-4.9.patch ++++++
From db56858ee2847d2701d9e6521c124520e82fb6a1 Mon Sep 17 00:00:00 2001
From: David Disseldorp
Date: Wed, 5 Jun 2019 00:41:13 +0200
Subject: [PATCH] CTDB: support Samba 4.9+
With Samba 4.9+, all ctdbd parameters have moved to config files.
Generate a new /etc/ctdb/ctdb.conf file during ctdb startup, based on RA
configuration.
Event scripts in Samba 4.9+ are also no longer enabled/disabled based on
file mode. Use the "ctdb event script enable/disable" helpers, which now
work without a running ctdbd.
Signed-off-by: David Disseldorp
Signed-off-by: Noel Power
---
heartbeat/CTDB.in | 235 ++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 192 insertions(+), 43 deletions(-)
diff --git a/heartbeat/CTDB.in b/heartbeat/CTDB.in
index 2b0d6b09..a185a939 100755
--- a/heartbeat/CTDB.in
+++ b/heartbeat/CTDB.in
@@ -109,7 +109,18 @@ fi
#######################################################################
+ctdb_version() {
+ $OCF_RESKEY_ctdb_binary version | awk '{print $NF}' | sed "s/[-\.]\?[[:alpha:]].*//"
+}
+
meta_data() {
+ local fourdotnine=""
+ local vers=$(ctdb_version)
+
+ ocf_version_cmp "$vers" "4.9.0"
+ if [ "$?" -ne "0" ]; then
+ fourdotnine="true"
+ fi
cat </dev/null
+
+ invoke_ctdb event script enable legacy 00.ctdb
+
+ if [ -f "${OCF_RESKEY_ctdb_config_dir}/public_addresses" ]; then
+ invoke_ctdb event script enable legacy 10.interface
+ else
+ invoke_ctdb event script disable legacy 10.interface
+ fi
+ if [ -f "${OCF_RESKEY_ctdb_config_dir}/static-routes" ]; then
+ invoke_ctdb event script enable legacy 11.routing
+ else
+ invoke_ctdb event script disable legacy 11.routing
+ fi
+
+ if ocf_is_true "$OCF_RESKEY_ctdb_manages_winbind"; then
+ invoke_ctdb event script enable legacy 49.winbind
+ else
+ invoke_ctdb event script disable legacy 49.winbind
+ fi
+
+ if ocf_is_true "$OCF_RESKEY_ctdb_manages_samba"; then
+ invoke_ctdb event script enable legacy 50.samba
+ else
+ invoke_ctdb event script disable legacy 50.samba
+ fi
+}
+
# This function has no effect (currently no way to set CTDB_SET_*)
# but remains here in case we need it in future.
set_ctdb_variables() {
@@ -522,6 +601,46 @@ append_ctdb_sysconfig() {
[ -n "$2" ] && echo "$1=$2" >> "$CTDB_SYSCONFIG"
}
+generate_ctdb_config() {
+ local ctdb_config="$OCF_RESKEY_ctdb_config_dir/ctdb.conf"
+
+ # Backup existing config if we're not already using an auto-generated one
+ grep -qa '# CTDB-RA: Auto-generated' $ctdb_config || cp -p $ctdb_config ${ctdb_config}.ctdb-ra-orig
+ if [ $? -ne 0 ]; then
+ ocf_log warn "Unable to backup $ctdb_config to ${ctdb_config}.ctdb-ra-orig"
+ fi
+
+ local log_option="file:$OCF_RESKEY_ctdb_logfile"
+ if [ "$OCF_RESKEY_ctdb_logfile" = "syslog" ]; then
+ log_option="syslog"
+ fi
+
+ local start_as_disabled="false"
+ ocf_is_true "$OCF_RESKEY_ctdb_start_as_disabled" && start_as_disabled="true"
+
+ local dbdir_volatile="$OCF_RESKEY_ctdb_dbdir/volatile"
+ [ -d "$dbdir_volatile" ] || mkdir -p "$dbdir_volatile" 2>/dev/null
+ local dbdir_persistent="$OCF_RESKEY_ctdb_dbdir/persistent"
+ [ -d "$dbdir_persistent" ] || mkdir -p "$dbdir_persistent" 2>/dev/null
+ local dbdir_state="$OCF_RESKEY_ctdb_dbdir/state"
+ [ -d "$dbdir_state" ] || mkdir -p "$dbdir_state" 2>/dev/null
+
+cat >$ctdb_config </dev/null
- # public addresses file (should not be present, but need to set for correctness if it is)
- local pub_addr_option
- pub_addr_option=""
- [ -f "${OCF_RESKEY_ctdb_config_dir}/public_addresses" ] && \
- pub_addr_option="--public-addresses=${OCF_RESKEY_ctdb_config_dir}/public_addresses"
- # start as disabled
- local start_as_disabled
- start_as_disabled="--start-as-disabled"
- ocf_is_true "$OCF_RESKEY_ctdb_start_as_disabled" || start_as_disabled=""
-
# set nofile ulimit for ctdbd process
if [ -n "$OCF_RESKEY_ctdb_max_open_files" ]; then
ulimit -n "$OCF_RESKEY_ctdb_max_open_files"
fi
# Start her up
- "$OCF_RESKEY_ctdbd_binary" \
- --reclock="$OCF_RESKEY_ctdb_recovery_lock" \
- --nlist="$OCF_RESKEY_ctdb_config_dir/nodes" \
- --socket="$OCF_RESKEY_ctdb_socket" \
- --dbdir="$OCF_RESKEY_ctdb_dbdir" \
- --dbdir-persistent="$OCF_RESKEY_ctdb_dbdir/persistent" \
- --event-script-dir="$OCF_RESKEY_ctdb_config_dir/events.d" \
- --notification-script="$OCF_RESKEY_ctdb_config_dir/notify.sh" \
- --transport=tcp \
- $start_as_disabled $log_option $pub_addr_option \
- -d "$OCF_RESKEY_ctdb_debuglevel"
+ invoke_ctdbd "$version"
+
if [ $? -ne 0 ]; then
# cleanup smb.conf
cleanup_smb_conf
@@ -654,7 +803,7 @@ ctdb_start() {
if [ $? -ne 0 ]; then
# CTDB will be running, kill it before returning
ctdb_stop
- ocf_exit_reason "Can't invoke $OCF_RESKEY_ctdb_binary --socket=$OCF_RESKEY_ctdb_socket status"
+ ocf_exit_reason "Can't invoke $OCF_RESKEY_ctdb_binary status"
return $OCF_ERR_GENERIC
fi
if ! echo "$status" | grep -qs 'UNHEALTHY (THIS'; then
@@ -691,7 +840,7 @@ ctdb_stop() {
[ $count -gt 10 ] && {
ocf_log info "killing ctdbd "
pkill -9 -f "$OCF_RESKEY_ctdbd_binary"
- pkill -9 -f "${OCF_RESKEY_ctdb_config_dir}/events.d/"
+ pkill -9 -f "${OCF_RESKEY_ctdb_config_dir}/events"
}
done
--
2.16.4
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.GmHmG9/_old 2019-06-18 14:55:21.793440923 +0200
+++ /var/tmp/diff_new_pack.GmHmG9/_new 2019-06-18 14:55:21.793440923 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/ClusterLabs/resource-agents.git</param>
-<param name="changesrevision">571ed6199b7ef8c5de199e18e7577153efc7c826</param>
+<param name="changesrevision">cb87d027c25333c25b602f3632ba51e7a683c1af</param>
</service>
</servicedata>
\ No newline at end of file
++++++ resource-agents-4.2.0+git122.571ed619.tar.xz -> resource-agents-4.2.0+git157.40de8382.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/ci/build.sh new/resource-agents-4.2.0+git157.40de8382/ci/build.sh
--- old/resource-agents-4.2.0+git122.571ed619/ci/build.sh 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/ci/build.sh 2019-06-14 06:47:58.000000000 +0200
@@ -10,7 +10,8 @@
# SC2039: In POSIX sh, 'local' is undefined.
# SC2086: Double quote to prevent globbing and word splitting.
# SC2154: var is referenced but not assigned.
-ignored_errors="SC1090,SC2039,SC2154"
+# SC1087: Use braces when expanding arrays.
+ignored_errors="SC1090,SC2039,SC2154,SC1087"
success() {
printf "\r\033[2K [ \033[00;32mOK\033[0m ] Checking %s...\n" "$1"
@@ -70,6 +71,7 @@
[[ "$head" =~ .*ruby.* ]] && continue
[[ "$head" =~ .*zsh.* ]] && continue
[[ "$head" =~ ^#compdef.* ]] && continue
+ [[ "$head" =~ .*@BASH_SHELL@.* ]] && continue
[[ "$script" =~ ^.*\.c ]] && continue
[[ "$script" =~ ^.*\.orig ]] && continue
[[ "$script" =~ ^ldirectord.in ]] && continue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/Filesystem new/resource-agents-4.2.0+git157.40de8382/heartbeat/Filesystem
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/Filesystem 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/Filesystem 2019-06-14 06:47:58.000000000 +0200
@@ -255,16 +255,26 @@
}
list_mounts() {
local inpf=""
+ local mount_list=""
+ local check_list="x"
+
if [ -e "/proc/mounts" ] && ! is_bind_mount; then
inpf=/proc/mounts
elif [ -f "/etc/mtab" -a -r "/etc/mtab" ]; then
inpf=/etc/mtab
fi
- if [ "$inpf" ]; then
- cut -d' ' -f1,2,3 < $inpf
- else
- $MOUNT | cut -d' ' -f1,3,5
- fi
+
+ # Make sure that the mount list has not been changed while reading.
+ while [ "$mount_list" != "$check_list" ]; do
+ check_list=$mount_list
+ if [ "$inpf" ]; then
+ mount_list=$(cut -d' ' -f1,2,3 < $inpf)
+ else
+ mount_list=$($MOUNT | cut -d' ' -f1,3,5)
+ fi
+ done
+
+ echo "$mount_list"
}
determine_blockdevice() {
@@ -278,7 +288,7 @@
nfs4|nfs|smbfs|cifs|glusterfs|ceph|tmpfs|overlay|overlayfs|rozofs|zfs|cvfs|none)
: ;;
*)
- DEVICE=`list_mounts | grep " $(readlink -f "$MOUNTPOINT" ) " | cut -d' ' -f1`
+ DEVICE=`list_mounts | grep " $CANONICALIZED_MOUNTPOINT " | cut -d' ' -f1`
if [ -b "$DEVICE" ]; then
blockdevice=yes
fi
@@ -396,7 +406,7 @@
Filesystem_start()
{
# Check if there are any mounts mounted under the mountpoint
- if list_mounts | grep -q -E " $(readlink -f "$MOUNTPOINT" )/\w+" >/dev/null 2>&1; then
+ if list_mounts | grep -q -E " $CANONICALIZED_MOUNTPOINT/\w+" >/dev/null 2>&1; then
ocf_log err "There is one or more mounts mounted under $MOUNTPOINT."
return $OCF_ERR_CONFIGURED
fi
@@ -580,7 +590,7 @@
#
Filesystem_status()
{
- if list_mounts | grep -q " $(readlink -f "$MOUNTPOINT" ) " >/dev/null 2>&1; then
+ if list_mounts | grep -q " $CANONICALIZED_MOUNTPOINT " >/dev/null 2>&1; then
rc=$OCF_SUCCESS
msg="$MOUNTPOINT is mounted (running)"
else
@@ -804,6 +814,11 @@
else
MOUNTPOINT=$(echo $OCF_RESKEY_directory | sed 's/\/*$//')
: ${MOUNTPOINT:=/}
+ CANONICALIZED_MOUNTPOINT=$(readlink -f "$MOUNTPOINT")
+ if [ $? -ne 0 ]; then
+ ocf_exit_reason "Could not canonicalize $MOUNTPOINT because readlink failed"
+ exit $OCF_ERR_GENERIC
+ fi
# At this stage, $MOUNTPOINT does not contain trailing "/" unless it is "/"
# TODO: / mounted via Filesystem sounds dangerous. On stop, we'll
# kill the whole system. Is that a good idea?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/azure-events.in new/resource-agents-4.2.0+git157.40de8382/heartbeat/azure-events.in
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/azure-events.in 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/azure-events.in 2019-06-14 06:47:58.000000000 +0200
@@ -99,7 +99,7 @@
ocf.logger.debug("getInstanceInfo: begin")
jsondata = azHelper._sendMetadataRequest(azHelper.instance_api)
- ocf.logger.info("getInstanceInfo: json = %s" % jsondata)
+ ocf.logger.debug("getInstanceInfo: json = %s" % jsondata)
ocf.logger.debug("getInstanceInfo: finished, returning {}".format(jsondata["compute"]))
return attrDict(jsondata["compute"])
@@ -112,7 +112,7 @@
ocf.logger.debug("pullScheduledEvents: begin")
jsondata = azHelper._sendMetadataRequest(azHelper.events_api)
- ocf.logger.info("pullScheduledEvents: json = %s" % jsondata)
+ ocf.logger.debug("pullScheduledEvents: json = %s" % jsondata)
ocf.logger.debug("pullScheduledEvents: finished")
return attrDict(jsondata)
@@ -569,7 +569,7 @@
ocf.logger.debug("handleRemoteEvents: begin; hostName = %s, events = %s" % (self.hostName, str(azEvents)))
if len(azEvents) == 0:
- ocf.logger.info("handleRemoteEvents: no remote events to handle")
+ ocf.logger.debug("handleRemoteEvents: no remote events to handle")
ocf.logger.debug("handleRemoteEvents: finished")
return
eventIDsForNode = {}
@@ -672,7 +672,7 @@
ocf.logger.info("handleLocalEvents: cannot handle azEvents %s (only node available) -> set state ON_HOLD" % str(azEventIDs))
self.setState(ON_HOLD)
else:
- ocf.logger.info("handleLocalEvents: no local azEvents to handle")
+ 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")
@@ -720,21 +720,21 @@
# get current document version
curDocVersion = events.DocumentIncarnation
lastDocVersion = self.node.getAttr(attr_lastDocVersion)
- ocf.logger.info("monitor: lastDocVersion = %s; curDocVersion = %s" % (lastDocVersion, curDocVersion))
+ ocf.logger.debug("monitor: lastDocVersion = %s; curDocVersion = %s" % (lastDocVersion, curDocVersion))
# split events local/remote
(localEvents, remoteEvents) = self.node.separateEvents(events.Events)
# ensure local events are only executing once
if curDocVersion != lastDocVersion:
- ocf.logger.info("monitor: curDocVersion has not been handled yet")
+ ocf.logger.debug("monitor: curDocVersion has not been handled yet")
# handleLocalEvents() returns True if mayUpdateDocVersion is True;
# this is only the case if we can ensure there are no pending events
if self.node.handleLocalEvents(localEvents):
ocf.logger.info("monitor: handleLocalEvents completed successfully -> update curDocVersion")
self.node.setAttr(attr_lastDocVersion, curDocVersion)
else:
- ocf.logger.info("monitor: handleLocalEvents still waiting -> keep curDocVersion")
+ ocf.logger.debug("monitor: handleLocalEvents still waiting -> keep curDocVersion")
else:
ocf.logger.info("monitor: already handled curDocVersion, skip")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/dhcpd new/resource-agents-4.2.0+git157.40de8382/heartbeat/dhcpd
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/dhcpd 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/dhcpd 2019-06-14 06:47:58.000000000 +0200
@@ -337,12 +337,12 @@
done | sort -u`
for i in $cplibs ; do
if [ -s "$i" ]; then
- cp -pL "$i" "${OCF_RESKEY_chrooted_path}/$libdir/" ||
+ cp -aL "$i" "${OCF_RESKEY_chrooted_path}/$libdir/" ||
{ ocf_exit_reason "could not copy $i to chroot jail"; return $OCF_ERR_GENERIC; }
fi
done
- return $OCF_SUCCESS
+ return $OCF_SUCCESS
}
# Initialize a non-chroot environment
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/named new/resource-agents-4.2.0+git157.40de8382/heartbeat/named
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/named 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/named 2019-06-14 06:47:58.000000000 +0200
@@ -26,6 +26,7 @@
OCF_RESKEY_named_options_default=""
OCF_RESKEY_named_keytab_file_default=""
OCF_RESKEY_rndc_options_default=""
+OCF_RESKEY_host_options_default=""
OCF_RESKEY_monitor_request_default="localhost"
OCF_RESKEY_monitor_response_default="127.0.0.1"
OCF_RESKEY_monitor_ip_default="127.0.0.1"
@@ -40,6 +41,7 @@
: ${OCF_RESKEY_named_options=${OCF_RESKEY_named_options_default}}
: ${OCF_RESKEY_named_keytab_file=${OCF_RESKEY_named_keytab_file_default}}
: ${OCF_RESKEY_rndc_options=${OCF_RESKEY_rndc_options_default}}
+: ${OCF_RESKEY_host_options=${OCF_RESKEY_host_options_default}}
: ${OCF_RESKEY_monitor_request=${OCF_RESKEY_monitor_request_default}}
: ${OCF_RESKEY_monitor_response=${OCF_RESKEY_monitor_response_default}}
: ${OCF_RESKEY_monitor_ip=${OCF_RESKEY_monitor_ip_default}}
@@ -154,6 +156,14 @@
<content type="string" default="${OCF_RESKEY_rndc_options_default}" />
</parameter>
+<parameter name="host_options" unique="0" required="0">
+<longdesc lang="en">
+Options for host process if any.
+</longdesc>
+<shortdesc lang="en">host_options</shortdesc>
+<content type="string" default="${OCF_RESKEY_host_options_default}" />
+</parameter>
+
<parameter name="monitor_request" unique="0" required="0">
<longdesc lang="en">
Request that shall be sent to named for monitoring. Usually an A record in DNS.
@@ -318,7 +328,7 @@
return $OCF_NOT_RUNNING
fi
- output=`$OCF_RESKEY_host $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip`
+ output=`$OCF_RESKEY_host $OCF_RESKEY_host_options $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip`
if [ $? -ne 0 ] || ! echo $output | grep -q '.* has .*address '"$OCF_RESKEY_monitor_response"
then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/ocf-shellfuncs.in new/resource-agents-4.2.0+git157.40de8382/heartbeat/ocf-shellfuncs.in
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/ocf-shellfuncs.in 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/ocf-shellfuncs.in 2019-06-14 06:47:58.000000000 +0200
@@ -101,7 +101,7 @@
ocf_is_true() {
case "$1" in
- yes|true|1|YES|TRUE|ja|on|ON) true ;;
+ yes|true|1|YES|TRUE|True|ja|on|ON) true ;;
*) false ;;
esac
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/openstack-cinder-volume new/resource-agents-4.2.0+git157.40de8382/heartbeat/openstack-cinder-volume
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/openstack-cinder-volume 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/openstack-cinder-volume 2019-06-14 06:47:58.000000000 +0200
@@ -27,7 +27,6 @@
# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
#
-
#######################################################################
# Initialization:
@@ -36,8 +35,14 @@
# Defaults
OCF_RESKEY_openstackcli_default="/usr/bin/openstack"
+OCF_RESKEY_node_id_cache_file_default="/tmp/node_id"
+OCF_RESKEY_volume_local_check_default="true"
+
+export attached_server_id=""
: ${OCF_RESKEY_openstackcli=${OCF_RESKEY_openstackcli_default}}
+: ${OCF_RESKEY_node_id_cache_file=${OCF_RESKEY_node_id_cache_file_default}}
+: ${OCF_RESKEY_volume_local_check=${OCF_RESKEY_volume_local_check_default}}
#######################################################################
@@ -74,6 +79,26 @@
<content type="string" default="${OCF_RESKEY_openstackcli_default}" />
</parameter>
+<parameter name="node_id_cache_file">
+<longdesc lang="en">
+Path to Node ID cache file, used to avoid Openstack API calls:
+1. Is the local file written?
+2. Is openstack_id available as a node attribute?
+3. Can we get it from the API?
+</longdesc>
+<shortdesc lang="en">Path to Node ID cache file</shortdesc>
+<content type="string" default="${OCF_RESKEY_node_id_cache_file_default}" />
+</parameter>
+
+<parameter name="volume_local_check">
+<longdesc lang="en">
+This option allows the cluster to monitor the cinder volume presence without
+calling the API.
+</longdesc>
+<shortdesc lang="en">Monitor cinder volume locally</shortdesc>
+<content type="boolean" default="${OCF_RESKEY_volume_local_check_default}" />
+</parameter>
+
<parameter name="openrc" required="1">
<longdesc lang="en">
Valid Openstack credentials as openrc file from api_access/openrc.
@@ -103,8 +128,82 @@
END
}
+#
+# This is used to get the node ID from different sources:
+# 1. Is the local file written?
+# 2. Is openstack_id available as a node attribute?
+# 3. Can we get it from the API?
+#
+# When the ID is retrieved, the local cache file is written.
+# This prevents the agent to call the API each time the agent is used.
+#
+_get_node_id() {
+ local crm_node
+ local node
+ local node_id
+ local result
+
+ crm_node=$(crm_node -n)
+
+ #
+ # Use local cache
+ #
+ if [ -f $OCF_RESKEY_node_id_cache_file ] ; then
+ node_id=$(cat $OCF_RESKEY_node_id_cache_file)
+
+ if [ ! -z "$node_id" ] ; then
+ echo $node_id
+ return
+ fi
+ fi
+
+ #
+ # Query the attributes database
+ #
+ node_id=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_id -N $crm_node \
+ | tr ' ' '\n' \
+ | awk -F= '/value=/ {gsub("\"","");print $NF}')
+
+ if [ ! -z "$node_id" ] ; then
+ echo $node_id | awk '{print $1}'
+ echo $node_id | awk '{print $1}' > $OCF_RESKEY_node_id_cache_file
+ return
+ fi
+
+ #
+ # Use the API
+ #
+ node=$(crm_node -n | awk -F. '{print $1}')
+
+ result=$($OCF_RESKEY_openstackcli server list \
+ --format value --column ID --column Name \
+ | grep $node)
+
+ if [ $? -eq 0 ] ; then
+ echo $result | awk '{print $1}'
+ echo $result | awk '{print $1}' > $OCF_RESKEY_node_id_cache_file
+ return
+ fi
+
+ ocf_exit_reason "openstack_id attribute must be set for node $crm_node"
+ return $OCF_ERR_CONFIGURED
+}
+
osvol_validate() {
+ local node_id
+
check_binary "$OCF_RESKEY_openstackcli"
+ check_binary "awk"
+ check_binary "tr"
+
+ . $OCF_RESKEY_openrc
+
+ node_id=$(_get_node_id)
+
+ if [ -z "$node_id" ] ; then
+ ocf_exit_reason "openstack_id attribute must be set for node $crm_node"
+ return $OCF_ERR_CONFIGURED
+ fi
if [ -z "$OCF_RESKEY_openrc" ]; then
ocf_exit_reason "openrc parameter not set"
@@ -116,39 +215,58 @@
return $OCF_ERR_CONFIGURED
fi
- . $OCF_RESKEY_openrc
-
- if ! $OCF_RESKEY_openstackcli volume list|grep -q $OCF_RESKEY_volume_id ; then
- ocf_exit_reason "Volume $OCF_RESKEY_volume_id not found"
- return $OCF_ERR_CONFIGURED
- fi
-
return $OCF_SUCCESS
}
osvol_monitor() {
local result
- local attached_server_id
local node_id
+ local short_volume_id
+ local fdisk_command
- # Is the volue attached?
- result=$($OCF_RESKEY_openstackcli volume show \
- --column status \
- --column attachments \
- --format value \
- $OCF_RESKEY_volume_id)
-
- if [[ "$result" =~ "available" ]] ; then
- ocf_log warn "$OCF_RESKEY_volume_id is not attached to any instance"
- return $OCF_NOT_RUNNING
+ if ocf_is_true $OCF_RESKEY_volume_local_check ; then
+ #
+ # Is the volue attached?
+ # We check the local devices
+ #
+ short_volume_id=$(echo $OCF_RESKEY_volume_id | awk '{print substr($0, 0, 20)}')
+ if uname | grep -q Linux ; then
+ fdisk_command="fdisk -l"
+ else
+ fdisk_command="fdisk"
+ fi
+
+ $fdisk_command /dev/disk/by-id/virtio-$short_volume_id 1>/dev/null 2>&1
+ if [ $? -eq 0 ] ; then
+ return $OCF_SUCCESS
+ else
+ ocf_log warn "$OCF_RESKEY_volume_id is not attached to instance $(_get_node_id)"
+ return $OCF_NOT_RUNNING
+ fi
else
- attached_server_id=$(echo $result|head -n1|awk -F "'" '{print $4}')
- ocf_log info "$OCF_RESKEY_volume_id is attached to instance $attached_server_id"
- node_id=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_id -N $HOSTNAME \
- | awk '{gsub("value=","") ; gsub("\"","") ; print $NF}')
+ #
+ # Is the volue attached?
+ # We use the API
+ #
+ result=$($OCF_RESKEY_openstackcli volume show \
+ --column status \
+ --column attachments \
+ --format value \
+ $OCF_RESKEY_volume_id)
- if [ "$node_id" != "$attached_server_id" ] ; then
+ if echo "$result" | grep -q available ; then
+ ocf_log warn "$OCF_RESKEY_volume_id is not attached to any instance"
return $OCF_NOT_RUNNING
+ else
+ export attached_server_id=$(echo $result|head -n1|awk -F "'" '{print $4}')
+ ocf_log info "$OCF_RESKEY_volume_id is attached to instance $attached_server_id"
+
+ # Compare node_id and the id of the node the volume is attached to
+ node_id=$(_get_node_id)
+
+ if [ "$node_id" != "$attached_server_id" ] ; then
+ return $OCF_NOT_RUNNING
+ fi
fi
fi
@@ -158,14 +276,20 @@
osvol_stop() {
local node_id
+ #
+ # Is the volume already attached?
+ #
osvol_monitor
if [ $? = $OCF_NOT_RUNNING ]; then
ocf_log info "Volume $OCF_RESKEY_volume_id already available"
return $OCF_SUCCESS
fi
- node_id=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_id -N $HOSTNAME \
- | awk '{gsub("value=","") ; gsub("\"","") ; print $NF}')
+ node_id=$(_get_node_id)
+
+ #
+ # Unmout the volume
+ #
if ! $OCF_RESKEY_openstackcli server remove volume $node_id $OCF_RESKEY_volume_id ; then
ocf_log error "Couldn't remove volume $OCF_RESKEY_volume_id from instance $node_id"
return $OCF_ERR_GENERIC
@@ -178,14 +302,33 @@
osvol_start() {
local node_id
+ #
+ # Is the volume already attached?
+ #
osvol_monitor
if [ $? = $OCF_SUCCESS ]; then
ocf_log info "$OCF_RESKEY_volume_id already attached"
return $OCF_SUCCESS
fi
- node_id=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_id -N $HOSTNAME \
- | awk '{gsub("value=","") ; gsub("\"","") ; print $NF}')
+ #
+ # Unmout it from another node
+ # TODO: make it optional in case multi-attachment is allowed by Cinder
+ #
+ if [ ! -z $attached_server_id ] ; then
+ if ! $OCF_RESKEY_openstackcli server remove volume $attached_server_id $OCF_RESKEY_volume_id ; then
+ ocf_log error "Couldn't remove volume $OCF_RESKEY_volume_id from instance $attached_server_id"
+ return $OCF_ERR_GENERIC
+ fi
+ fi
+
+ export attached_server_id=""
+
+ node_id=$(_get_node_id)
+
+ #
+ # Attach the volume
+ #
$OCF_RESKEY_openstackcli server add volume $node_id $OCF_RESKEY_volume_id
if [ $? != $OCF_SUCCESS ]; then
ocf_log error "Couldn't add volume $OCF_RESKEY_volume_id to instance $node_id"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/openstack-floating-ip new/resource-agents-4.2.0+git157.40de8382/heartbeat/openstack-floating-ip
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/openstack-floating-ip 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/openstack-floating-ip 2019-06-14 06:47:58.000000000 +0200
@@ -132,7 +132,7 @@
return $OCF_ERR_CONFIGURED
fi
- ${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $HOSTNAME > /dev/null 2>&1
+ ${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $(crm_node -n) > /dev/null 2>&1
if [ $? -ne 0 ] ; then
ocf_log warn "attr_updater failed to get openstack_ports attribute of node $OCF_RESOURCE_INSTANCE"
return $OCF_ERR_GENERIC
@@ -147,8 +147,10 @@
local node_port_ids
local port
local buffer
+ local crm_node
- node_port_ids=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $HOSTNAME \
+ crm_node=$(crm_node -n)
+ node_port_ids=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $crm_node \
| awk -F= '{gsub("\"","");print $NF}' \
| tr ',' ' ' \
| awk -F: '{print $NF}')
@@ -162,13 +164,13 @@
for port in $node_port_ids ; do
if echo $result | grep -q $port ; then
floating_ip=$(echo $result | awk '/floating_ip_address/ {print $2}')
- ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_floating_ip -v $floating_ip
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -S status -n openstack_floating_ip -v $floating_ip
return $OCF_SUCCESS
fi
done
- ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_floating_ip
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -S state -n openstack_floating_ip
ocf_log warn "$OCF_RESKEY_ip_id is not attached to any fixed address"
return $OCF_NOT_RUNNING
}
@@ -207,9 +209,13 @@
fi
# Get port_id from subnet_id
- node_port_ids=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $HOSTNAME \
+ node_port_ids=$(${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $(crm_node -n) \
| awk '{gsub("value=","") ; gsub("\"","") ; print $NF}')
- node_port_id=$(echo $node_port_ids|tr ',' '\n'|awk -F: "/$OCF_RESKEY_subnet_id/ {print \$2}")
+
+ node_port_id=$(echo $node_port_ids \
+ | tr ',' '\n' \
+ | awk -F: "/$OCF_RESKEY_subnet_id/ {print \$2}")
+
ocf_log info "Moving IP address $OCF_RESKEY_ip_id to port ID $node_port_id"
$OCF_RESKEY_openstackcli floating ip set --port $node_port_id $OCF_RESKEY_ip_id
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/openstack-info new/resource-agents-4.2.0+git157.40de8382/heartbeat/openstack-info
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/openstack-info 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/openstack-info 2019-06-14 06:47:58.000000000 +0200
@@ -115,6 +115,10 @@
--format value --column ID --column Name \
| grep $node)
+ if [ $? -ne 0 ] ; then
+ ocf_exit_reason "cannot find $node in instances list"
+ exit $OCF_ERR_GENERIC
+ fi
node_id=$(echo $result|awk '{print $1}')
# Nova data: flavor, AZ…
@@ -148,14 +152,26 @@
value="$value,$p"
fi
done
- ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_ports -v $value
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_ports -v "$value"
if [ ! -z "$OS_REGION_NAME" ] ; then
- ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_region -v $OS_REGION_NAME
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_region -v "$OS_REGION_NAME"
+ fi
+
+ if [ ! -z "$OS_TENANT_ID" ] ; then
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_tenant_id -v "$OS_TENANT_ID"
+
+ if [ ! -z "$OS_TENANT_NAME" ] ; then
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_tenant_name -v "$OS_TENANT_NAME"
+ fi
+ else
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_project_id -v "$OS_PROJECT_ID"
+
+ if [ ! -z "$OS_PROJECT_NAME" ] ; then
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_project_name -v "$OS_PROJECT_NAME"
+ fi
fi
- ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_tenant_name -v $OS_TENANT_NAME
- ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_tenant_id -v $OS_TENANT_ID
}
OSInfo_usage() {
@@ -181,6 +197,8 @@
${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_region
${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_tenant_id
${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_tenant_name
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_project_id
+ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_project_name
exit $OCF_SUCCESS
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/pgsql new/resource-agents-4.2.0+git157.40de8382/heartbeat/pgsql
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/pgsql 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/pgsql 2019-06-14 06:47:58.000000000 +0200
@@ -483,7 +483,7 @@
"-q")
quietrun="-q"
shift 1;;
- "warn"|"err")
+ "info"|"warn"|"err")
loglevel="-$1"
shift 1;;
*)
@@ -544,7 +544,9 @@
local postgres_options
local rc
- if pgsql_status; then
+ pgsql_real_monitor info
+ rc=$?
+ if [ $rc -eq $OCF_SUCCESS -o $rc -eq $OCF_RUNNING_MASTER ]; then
ocf_log info "PostgreSQL is already running. PID=`cat $PIDFILE`"
if is_replication; then
return $OCF_ERR_GENERIC
@@ -974,11 +976,19 @@
case "$output" in
f) ocf_log debug "PostgreSQL is running as a primary."
if [ "$OCF_RESKEY_monitor_sql" = "$OCF_RESKEY_monitor_sql_default" ]; then
+ if ocf_is_probe; then
+ # Set initial score for primary.
+ exec_with_retry 0 $CRM_MASTER -v $PROMOTE_ME
+ fi
return $OCF_RUNNING_MASTER
fi
;;
t) ocf_log debug "PostgreSQL is running as a hot standby."
+ if ocf_is_probe; then
+ # Set initial score for hot standby.
+ exec_with_retry 0 $CRM_MASTER -v $CAN_NOT_PROMOTE
+ fi
return $OCF_SUCCESS;;
*) ocf_exit_reason "$CHECK_MS_SQL output is $output"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/podman new/resource-agents-4.2.0+git157.40de8382/heartbeat/podman
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/podman 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/podman 2019-06-14 06:47:58.000000000 +0200
@@ -190,14 +190,8 @@
return $rc
fi
- if podman exec --help >/dev/null 2>&1; then
- out=$(podman exec ${CONTAINER} $OCF_RESKEY_monitor_cmd 2>&1)
- rc=$?
- else
- out=$(echo "$OCF_RESKEY_monitor_cmd" | nsenter --target $(podman inspect --format {{.State.Pid}} ${CONTAINER}) --mount --uts --ipc --net --pid 2>&1)
- rc=$?
- fi
-
+ out=$(podman exec ${CONTAINER} $OCF_RESKEY_monitor_cmd 2>&1)
+ rc=$?
if [ $rc -eq 127 ]; then
ocf_log err "monitor cmd failed (rc=$rc), output: $out"
ocf_exit_reason "monitor_cmd, ${OCF_RESKEY_monitor_cmd} , not found within container."
@@ -238,11 +232,6 @@
{
local val
- container_exists
- if [ $? -ne 0 ]; then
- return $OCF_NOT_RUNNING
- fi
-
# retrieve the 'Running' attribute for the container
val=$(podman inspect --format {{.State.Running}} $CONTAINER 2>/dev/null)
if [ $? -ne 0 ]; then
@@ -260,15 +249,10 @@
podman_monitor()
{
- local rc=0
-
- podman_simple_status
- rc=$?
-
- if [ $rc -ne 0 ]; then
- return $rc
+ if [ -z "$OCF_RESKEY_monitor_cmd" ]; then
+ podman_simple_status
+ return $?
fi
-
monitor_cmd_exec
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resource-agents-4.2.0+git122.571ed619/heartbeat/vsftpd.in new/resource-agents-4.2.0+git157.40de8382/heartbeat/vsftpd.in
--- old/resource-agents-4.2.0+git122.571ed619/heartbeat/vsftpd.in 2019-06-04 12:00:08.000000000 +0200
+++ new/resource-agents-4.2.0+git157.40de8382/heartbeat/vsftpd.in 2019-06-14 06:47:58.000000000 +0200
@@ -165,7 +165,7 @@
*)
rm -f "$PIDFILE" > /dev/null 2>&1
ocf_exit_reason "Error encountered detecting pid of vsftpd."
- exit OCF_ERR_GENERIC
+ exit $OCF_ERR_GENERIC
;;
esac