From 2551a232d8e255bec624ce92d700effa53e2ff06 Mon Sep 17 00:00:00 2001
From: CentOS Sources <bugs@centos.org>
Date: Tue, 28 Mar 2023 10:16:44 +0000
Subject: [PATCH] import fence-agents-4.2.1-112.el8

---
 ...re_soap-set-timeout-cleanup-tmp-dirs.patch |   70 +
 ...-fence_vmware_soap-login-timeout-15s.patch |   23 +
 ...ence_ibm_vpc-add-token-cache-support.patch |  431 ++++++
 ...only-output-additional-info-on-debug.patch |   33 +
 ...6-fence_ibm_powervs-improve-defaults.patch |   46 +
 ...2152105-fencing-1-add-plug_separator.patch |   74 +
 ...2105-fencing-2-update-DEPENDENCY_OPT.patch | 1212 +++++++++++++++++
 ...z2160478-fence_scsi-fix-validate-all.patch |   30 +
 SPECS/fence-agents.spec                       |   60 +-
 9 files changed, 1977 insertions(+), 2 deletions(-)
 create mode 100644 SOURCES/bz1787178-1-fence_vmware_soap-set-timeout-cleanup-tmp-dirs.patch
 create mode 100644 SOURCES/bz1787178-2-fence_vmware_soap-login-timeout-15s.patch
 create mode 100644 SOURCES/bz2102024-fence_ibm_vpc-add-token-cache-support.patch
 create mode 100644 SOURCES/bz2134017-fence_lpar-only-output-additional-info-on-debug.patch
 create mode 100644 SOURCES/bz2136076-fence_ibm_powervs-improve-defaults.patch
 create mode 100644 SOURCES/bz2152105-fencing-1-add-plug_separator.patch
 create mode 100644 SOURCES/bz2152105-fencing-2-update-DEPENDENCY_OPT.patch
 create mode 100644 SOURCES/bz2160478-fence_scsi-fix-validate-all.patch

diff --git a/SOURCES/bz1787178-1-fence_vmware_soap-set-timeout-cleanup-tmp-dirs.patch b/SOURCES/bz1787178-1-fence_vmware_soap-set-timeout-cleanup-tmp-dirs.patch
new file mode 100644
index 0000000..fee804b
--- /dev/null
+++ b/SOURCES/bz1787178-1-fence_vmware_soap-set-timeout-cleanup-tmp-dirs.patch
@@ -0,0 +1,70 @@
+From d4d2dd5066b62210a05c1256c6aee39609e3a974 Mon Sep 17 00:00:00 2001
+From: Thanasis Katsios <thkatsios@gmail.com>
+Date: Mon, 1 Nov 2021 12:31:36 +0200
+Subject: [PATCH 1/3] fence_vmware_soap: Use --login-timeout option
+
+Fixes issue #446.
+---
+ agents/vmware_soap/fence_vmware_soap.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/agents/vmware_soap/fence_vmware_soap.py b/agents/vmware_soap/fence_vmware_soap.py
+index a7f08b3d6..034695931 100644
+--- a/agents/vmware_soap/fence_vmware_soap.py
++++ b/agents/vmware_soap/fence_vmware_soap.py
+@@ -57,7 +57,8 @@ def soap_login(options):
+ 
+ 	try:
+ 		headers = {"Content-Type" : "text/xml;charset=UTF-8", "SOAPAction" : "vim25"}
+-		conn = Client(url + "/vimService.wsdl", location=url, transport=RequestsTransport(verify=verify), headers=headers)
++		login_timeout = int(options["--login-timeout"])
++		conn = Client(url + "/vimService.wsdl", location=url, transport=RequestsTransport(verify=verify), headers=headers, timeout=login_timeout)
+ 
+ 		mo_ServiceInstance = Property('ServiceInstance')
+ 		mo_ServiceInstance._type = 'ServiceInstance'
+
+From 1e8f0d7582c7768149269f8d002d71b2febbdda0 Mon Sep 17 00:00:00 2001
+From: Thanasis Katsios <thkatsios@gmail.com>
+Date: Tue, 2 Nov 2021 16:52:59 +0200
+Subject: [PATCH 2/3] Set timeout to 60s when disable-timeouts is used
+
+---
+ agents/vmware_soap/fence_vmware_soap.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agents/vmware_soap/fence_vmware_soap.py b/agents/vmware_soap/fence_vmware_soap.py
+index 034695931..38101352e 100644
+--- a/agents/vmware_soap/fence_vmware_soap.py
++++ b/agents/vmware_soap/fence_vmware_soap.py
+@@ -57,7 +57,7 @@ def soap_login(options):
+ 
+ 	try:
+ 		headers = {"Content-Type" : "text/xml;charset=UTF-8", "SOAPAction" : "vim25"}
+-		login_timeout = int(options["--login-timeout"])
++		login_timeout = 60 if "--disable-timeout" in options and options["--disable-timeout"] != "false" else int(options["--login-timeout"])
+ 		conn = Client(url + "/vimService.wsdl", location=url, transport=RequestsTransport(verify=verify), headers=headers, timeout=login_timeout)
+ 
+ 		mo_ServiceInstance = Property('ServiceInstance')
+
+From 8094c8a5a06adf0bd891d4fddcc0b72861a0947e Mon Sep 17 00:00:00 2001
+From: Thanasis Katsios <thkatsios@gmail.com>
+Date: Tue, 2 Nov 2021 18:51:02 +0200
+Subject: [PATCH 3/3] Support disable-timeout simplification
+
+---
+ agents/vmware_soap/fence_vmware_soap.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agents/vmware_soap/fence_vmware_soap.py b/agents/vmware_soap/fence_vmware_soap.py
+index 38101352e..2cd45e0b3 100644
+--- a/agents/vmware_soap/fence_vmware_soap.py
++++ b/agents/vmware_soap/fence_vmware_soap.py
+@@ -57,7 +57,7 @@ def soap_login(options):
+ 
+ 	try:
+ 		headers = {"Content-Type" : "text/xml;charset=UTF-8", "SOAPAction" : "vim25"}
+-		login_timeout = 60 if "--disable-timeout" in options and options["--disable-timeout"] != "false" else int(options["--login-timeout"])
++		login_timeout = int(options["--login-timeout"]) or 60
+ 		conn = Client(url + "/vimService.wsdl", location=url, transport=RequestsTransport(verify=verify), headers=headers, timeout=login_timeout)
+ 
+ 		mo_ServiceInstance = Property('ServiceInstance')
diff --git a/SOURCES/bz1787178-2-fence_vmware_soap-login-timeout-15s.patch b/SOURCES/bz1787178-2-fence_vmware_soap-login-timeout-15s.patch
new file mode 100644
index 0000000..58b90bc
--- /dev/null
+++ b/SOURCES/bz1787178-2-fence_vmware_soap-login-timeout-15s.patch
@@ -0,0 +1,23 @@
+From 2d4b3ea47fa7a9a301d34cefc8f279cae7df4afd Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Thu, 26 Jan 2023 13:19:16 +0100
+Subject: [PATCH] fence_vmware_soap: set login_timeout lower than default
+ pcmk_monitor_timeout (20s) to remove tmp dirs on fail
+
+---
+ agents/vmware_soap/fence_vmware_soap.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agents/vmware_soap/fence_vmware_soap.py b/agents/vmware_soap/fence_vmware_soap.py
+index b1d27a9fb..4a4ec1780 100644
+--- a/agents/vmware_soap/fence_vmware_soap.py
++++ b/agents/vmware_soap/fence_vmware_soap.py
+@@ -57,7 +57,7 @@ def soap_login(options):
+ 
+ 	try:
+ 		headers = {"Content-Type" : "text/xml;charset=UTF-8", "SOAPAction" : "vim25"}
+-		login_timeout = int(options["--login-timeout"]) or 60
++		login_timeout = int(options["--login-timeout"]) or 15
+ 		conn = Client(url + "/vimService.wsdl", location=url, transport=RequestsTransport(verify=verify), headers=headers, timeout=login_timeout)
+ 
+ 		mo_ServiceInstance = Property('ServiceInstance')
diff --git a/SOURCES/bz2102024-fence_ibm_vpc-add-token-cache-support.patch b/SOURCES/bz2102024-fence_ibm_vpc-add-token-cache-support.patch
new file mode 100644
index 0000000..801034f
--- /dev/null
+++ b/SOURCES/bz2102024-fence_ibm_vpc-add-token-cache-support.patch
@@ -0,0 +1,431 @@
+From bccac64a5135815ada30d385ab573409f1176905 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Thu, 7 Jul 2022 14:18:21 +0200
+Subject: [PATCH 1/3] build: make xml-check: ignore detected paths in *_file
+ parameters not matching saved metadata
+
+---
+ make/agentpycheck.mk                          | 2 +-
+ 83 files changed, 1 insertion(+), 108 deletions(-)
+
+diff --git a/make/agentpycheck.mk b/make/agentpycheck.mk
+index f686c4c89..4044dbad3 100644
+--- a/make/agentpycheck.mk
++++ b/make/agentpycheck.mk
+@@ -1,5 +1,5 @@
+ DATADIR:=$(abs_top_srcdir)/tests/data/metadata
+-AWK_VAL='BEGIN {store=-1} /name=".*_path"/ {store=2} {if (store!=0) {print}; store--}'
++AWK_VAL='BEGIN {store=-1} /name=".*_path"/ || /name=".*_file"/ {store=2} {if (store!=0) {print}; store--}'
+ 
+ TEST_TARGET=$(filter-out $(TEST_TARGET_SKIP),$(TARGET))
+ 
+From 1b7f3cc431ca53962506e6d96e7a4938c4388416 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Fri, 1 Jul 2022 13:29:16 +0200
+Subject: [PATCH 2/3] build: add FENCETMPDIR for state files
+
+---
+ Makefile.am                  |  3 ++-
+ configure.ac                 | 30 ++++++++++++++++++++++++++++++
+ m4/PKG_CHECK_VAR.m4          | 24 ++++++++++++++++++++++++
+ make/fencebuild.mk           |  1 +
+ systemd/Makefile.am          | 24 ++++++++++++++++++++++++
+ systemd/fence-agents.conf.in |  1 +
+ 7 files changed, 97 insertions(+), 2 deletions(-)
+ create mode 100644 m4/PKG_CHECK_VAR.m4
+ create mode 100644 systemd/Makefile.am
+ create mode 100644 systemd/fence-agents.conf.in
+
+diff --git a/Makefile.am b/Makefile.am
+index c1091b93a..1d115e5aa 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -23,7 +23,7 @@ TARFILES		= $(PACKAGE_NAME)-$(VERSION).tar.bz2 \
+ 
+ ACLOCAL_AMFLAGS		= -I m4
+ 
+-SUBDIRS			= lib agents doc
++SUBDIRS			= lib agents doc systemd
+ 
+ .PHONY: $(SUBDIRS)
+ 
+@@ -34,6 +34,7 @@ doc: agents
+ install-exec-local:
+ 			$(INSTALL) -d $(DESTDIR)/$(LOGDIR)
+ 			$(INSTALL) -d $(DESTDIR)/$(CLUSTERVARRUN)
++			$(INSTALL) -d -m 1755 $(DESTDIR)$(FENCETMPDIR)
+ 
+ uninstall-local:
+ 			rmdir $(DESTDIR)/$(LOGDIR) || :;
+diff --git a/configure.ac b/configure.ac
+index 1bad8e3b0..d7afb8dbe 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -135,10 +135,38 @@ AC_ARG_WITH([agents],
+ 	[ AGENTS_LIST="$withval" ],
+ 	[ AGENTS_LIST="all" ])
+ 
++FENCETMPDIR=${localstatedir}/run/fence-agents
++AC_ARG_WITH(fencetmpdir,
++    [  --with-fencetmpdir=DIR      directory for fence agents state files [${FENCETMPDIR}]],
++    [ FENCETMPDIR="$withval" ])
++
++# Expand $prefix
++eval FENCETMPDIR="`eval echo ${FENCETMPDIR}`"
++AC_DEFINE_UNQUOTED(FENCETMPDIR,"$FENCETMPDIR", Where Fence agents keep state files)
++AC_SUBST(FENCETMPDIR)
++
++
+ if test "x$AGENTS_LIST" = x; then
+ 	AC_ERROR([No agents selected])
+ fi
+ 
++# PKG_CHECK_MODULES will fail if systemd is not found by default, so make sure
++# we set the proper vars and deal with it
++PKG_CHECK_MODULES([systemd], [systemd], [HAS_SYSTEMD=yes], [HAS_SYSTEMD=no])
++if test "x$HAS_SYSTEMD" == "xyes"; then
++	PKG_CHECK_VAR([SYSTEMD_TMPFILES_DIR], [systemd], [tmpfilesdir])
++	if test "x$SYSTEMD_TMPFILES_DIR" == "x"; then
++		AC_MSG_ERROR([Unable to detect systemd tmpfiles directory automatically])
++	fi
++
++	# sanitize systed vars when using non standard prefix
++	if test "$prefix" != "/usr"; then
++		SYSTEMD_TMPFILES_DIR="$prefix/$SYSTEMD_TMPFILES_DIR"
++		AC_SUBST([SYSTEMD_TMPFILES_DIR])
++	fi
++fi
++AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$HAS_SYSTEMD" == xyes ])
++
+ FENCE_KDUMP=0
+ if echo "$AGENTS_LIST" | grep -q -E "all|kdump"; then
+ 	case "$host_os" in
+@@ -552,6 +580,8 @@ AM_EXTRA_RECURSIVE_TARGETS([xml-check xml-upload])
+ AC_CONFIG_FILES([Makefile
+ 		 agents/Makefile
+ 		 lib/Makefile
++		 systemd/Makefile
++		 systemd/fence-agents.conf
+ 		 doc/Makefile])
+ 
+ AC_OUTPUT
+diff --git a/m4/PKG_CHECK_VAR.m4 b/m4/PKG_CHECK_VAR.m4
+new file mode 100644
+index 000000000..2221a69eb
+--- /dev/null
++++ b/m4/PKG_CHECK_VAR.m4
+@@ -0,0 +1,24 @@
++dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
++dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
++dnl -------------------------------------------
++dnl Since: 0.28
++dnl
++dnl Retrieves the value of the pkg-config variable for the given module.
++dnl
++dnl Origin (declared license: GPLv2+ with less restrictive exception):
++dnl https://cgit.freedesktop.org/pkg-config/tree/pkg.m4.in?h=pkg-config-0.29.1#n261
++dnl (AS_VAR_COPY replaced with backward-compatible equivalent and guard
++dnl to prefer system-wide variant by Jan Pokorny <jpokorny@redhat.com>)
++
++m4_ifndef([PKG_CHECK_VAR],[
++AC_DEFUN([PKG_CHECK_VAR],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
++AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
++
++_PKG_CONFIG([$1], [variable="][$3]["], [$2])
++dnl AS_VAR_COPY([$1], [pkg_cv_][$1])
++$1=AS_VAR_GET([pkg_cv_][$1])
++
++AS_VAR_IF([$1], [""], [$5], [$4])dnl
++])dnl PKG_CHECK_VAR
++])dnl m4_ifndef
+diff --git a/make/fencebuild.mk b/make/fencebuild.mk
+index 762db62c4..9a3c6d6dd 100644
+--- a/make/fencebuild.mk
++++ b/make/fencebuild.mk
+@@ -8,6 +8,7 @@ define gen_agent_from_py
+ 		-e 's#@''LOGDIR@#${LOGDIR}#g' \
+ 		-e 's#@''SBINDIR@#${sbindir}#g' \
+ 		-e 's#@''LIBEXECDIR@#${libexecdir}#g' \
++		-e 's#@''FENCETMPDIR@#${FENCETMPDIR}#g' \
+ 		-e 's#@''IPMITOOL_PATH@#${IPMITOOL_PATH}#g' \
+ 		-e 's#@''OPENSTACK_PATH@#${OPENSTACK_PATH}#g' \
+ 		-e 's#@''AMTTOOL_PATH@#${AMTTOOL_PATH}#g' \
+diff --git a/systemd/Makefile.am b/systemd/Makefile.am
+new file mode 100644
+index 000000000..aa3a01679
+--- /dev/null
++++ b/systemd/Makefile.am
+@@ -0,0 +1,24 @@
++#
++# Copyright (C) 2017 Oyvind Albrigtsen
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version 2
++# of the License, or (at your option) any later version.
++# 
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++# 
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
++#
++
++MAINTAINERCLEANFILES    = Makefile.in
++
++if HAVE_SYSTEMD
++tmpfilesdir		= $(SYSTEMD_TMPFILES_DIR)
++tmpfiles_DATA		= fence-agents.conf
++endif
+diff --git a/systemd/fence-agents.conf.in b/systemd/fence-agents.conf.in
+new file mode 100644
+index 000000000..4181287da
+--- /dev/null
++++ b/systemd/fence-agents.conf.in
+@@ -0,0 +1 @@
++d @FENCETMPDIR@ 1755 root root
+
+From d5a12d9c30b66eb8720e037c4dce5fe0f3ad7dbb Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Thu, 30 Jun 2022 13:20:37 +0200
+Subject: [PATCH 3/3] fence_ibm_vpc: add token cache support
+
+---
+ agents/ibm_vpc/fence_ibm_vpc.py         | 126 ++++++++++++++++++++----
+ tests/data/metadata/fence_ibm_vpc.xml   |   4 +
+ 3 files changed, 110 insertions(+), 22 deletions(-)
+
+diff --git a/agents/ibm_vpc/fence_ibm_vpc.py b/agents/ibm_vpc/fence_ibm_vpc.py
+index 3da3ce056..847010584 100755
+--- a/agents/ibm_vpc/fence_ibm_vpc.py
++++ b/agents/ibm_vpc/fence_ibm_vpc.py
+@@ -4,9 +4,10 @@
+ import pycurl, io, json
+ import logging
+ import atexit
++import hashlib
+ sys.path.append("@FENCEAGENTSLIBDIR@")
+ from fencing import *
+-from fencing import fail, run_delay, EC_LOGIN_DENIED, EC_STATUS
++from fencing import fail, run_delay, EC_LOGIN_DENIED, EC_STATUS, EC_GENERIC_ERROR
+ 
+ state = {
+ 	 "running": "on",
+@@ -22,7 +23,7 @@ def get_list(conn, options):
+ 
+ 	try:
+ 		command = "instances?version=2021-05-25&generation=2&limit={}".format(options["--limit"])
+-		res = send_command(conn, command)
++		res = send_command(conn, options, command)
+ 	except Exception as e:
+ 		logging.debug("Failed: Unable to get list: {}".format(e))
+ 		return outlets
+@@ -38,7 +39,7 @@ def get_list(conn, options):
+ def get_power_status(conn, options):
+ 	try:
+ 		command = "instances/{}?version=2021-05-25&generation=2".format(options["--plug"])
+-		res = send_command(conn, command)
++		res = send_command(conn, options, command)
+ 		result = state[res["status"]]
+ 		if options["--verbose-level"] > 1:
+ 			logging.debug("Result:\n{}".format(json.dumps(res, indent=2)))
+@@ -57,27 +58,71 @@ def set_power_status(conn, options):
+ 
+ 	try:
+ 		command = "instances/{}/actions?version=2021-05-25&generation=2".format(options["--plug"])
+-		send_command(conn, command, "POST", action, 201)
++		send_command(conn, options, command, "POST", action, 201)
+ 	except Exception as e:
+ 		logging.debug("Failed: Unable to set power to {} for {}".format(options["--action"], e))
+ 		fail(EC_STATUS)
+ 
+ def get_bearer_token(conn, options):
++	import os, errno
++
++	try:
++		# FIPS requires usedforsecurity=False and might not be
++		# available on all distros: https://bugs.python.org/issue9216
++		hash = hashlib.sha256(options["--apikey"].encode("utf-8"), usedforsecurity=False).hexdigest()
++	except (AttributeError, TypeError):
++		hash = hashlib.sha256(options["--apikey"].encode("utf-8")).hexdigest()
++	file_path = options["--token-file"].replace("[hash]", hash)
+ 	token = None
++
++	if not os.path.isdir(os.path.dirname(file_path)):
++		os.makedirs(os.path.dirname(file_path))
++
++	# For security, remove file with potentially elevated mode
+ 	try:
+-		conn.setopt(pycurl.HTTPHEADER, [
+-			"Content-Type: application/x-www-form-urlencoded",
+-			"User-Agent: curl",
+-		])
+-		token = send_command(conn, "https://iam.cloud.ibm.com/identity/token", "POST", "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey={}".format(options["--apikey"]))["access_token"]
+-	except Exception:
+-		logging.error("Failed: Unable to authenticate")
+-		fail(EC_LOGIN_DENIED)
++		os.remove(file_path)
++	except OSError:
++		pass
++
++	try:
++		oldumask = os.umask(0)
++		file_handle = os.open(file_path, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600)
++	except OSError as e:
++		if e.errno == errno.EEXIST:  # Failed as the file already exists.
++			logging.error("Failed: File already exists: {}".format(e))
++			sys.exit(EC_GENERIC_ERROR)
++		else:  # Something unexpected went wrong
++			logging.error("Failed: Unable to open file: {}".format(e))
++			sys.exit(EC_GENERIC_ERROR)
++	else:  # No exception, so the file must have been created successfully.
++		with os.fdopen(file_handle, 'w') as file_obj:
++			try:
++				conn.setopt(pycurl.HTTPHEADER, [
++					"Content-Type: application/x-www-form-urlencoded",
++					"User-Agent: curl",
++				])
++				token = send_command(conn, options, "https://iam.cloud.ibm.com/identity/token", "POST", "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey={}".format(options["--apikey"]))["access_token"]
++			except Exception as e:
++				logging.error("Failed: Unable to authenticate: {}".format(e))
++				fail(EC_LOGIN_DENIED)
++			file_obj.write(token)
++	finally:
++		os.umask(oldumask)
+ 
+ 	return token
+ 
++def set_bearer_token(conn, bearer_token):
++	conn.setopt(pycurl.HTTPHEADER, [
++		"Content-Type: application/json",
++		"Authorization: Bearer {}".format(bearer_token),
++		"User-Agent: curl",
++	])
++
++	return conn
++
+ def connect(opt):
+ 	conn = pycurl.Curl()
++	bearer_token = ""
+ 
+ 	## setup correct URL
+ 	conn.base_url = "https://" + opt["--region"] + ".iaas.cloud.ibm.com/v1/"
+@@ -91,21 +136,28 @@ def connect(opt):
+ 	conn.setopt(pycurl.PROXY, "{}".format(opt["--proxy"]))
+ 
+ 	# get bearer token
+-	bearer_token = get_bearer_token(conn, opt)
++	try:
++		try:
++			# FIPS requires usedforsecurity=False and might not be
++			# available on all distros: https://bugs.python.org/issue9216
++			hash = hashlib.sha256(opt["--apikey"].encode("utf-8"), usedforsecurity=False).hexdigest()
++		except (AttributeError, TypeError):
++			hash = hashlib.sha256(opt["--apikey"].encode("utf-8")).hexdigest()
++		f = open(opt["--token-file"].replace("[hash]", hash))
++		bearer_token = f.read()
++		f.close()
++	except IOError:
++		bearer_token = get_bearer_token(conn, opt)
+ 
+ 	# set auth token for later requests
+-	conn.setopt(pycurl.HTTPHEADER, [
+-		"Content-Type: application/json",
+-		"Authorization: Bearer {}".format(bearer_token),
+-		"User-Agent: curl",
+-	])
++	conn = set_bearer_token(conn, bearer_token)
+ 
+ 	return conn
+ 
+ def disconnect(conn):
+ 	conn.close()
+ 
+-def send_command(conn, command, method="GET", action=None, expected_rc=200):
++def send_command(conn, options, command, method="GET", action=None, expected_rc=200):
+ 	if not command.startswith("https"):
+ 		url = conn.base_url + command
+ 	else:
+@@ -130,6 +182,26 @@ def send_command(conn, command, method="GET", action=None, expected_rc=200):
+ 		raise(e)
+ 
+ 	rc = conn.getinfo(pycurl.HTTP_CODE)
++
++	# auth if token has expired
++	if rc in [400, 401, 415]:
++		tokenconn = pycurl.Curl()
++		token = get_bearer_token(tokenconn, options)
++		tokenconn.close()
++		conn = set_bearer_token(conn, token)
++
++		# flush web_buffer
++		web_buffer.close()
++		web_buffer = io.BytesIO()
++		conn.setopt(pycurl.WRITEFUNCTION, web_buffer.write)
++
++		try:
++			conn.perform()
++		except Exception as e:
++			raise(e)
++
++		rc = conn.getinfo(pycurl.HTTP_CODE)
++
+ 	result = web_buffer.getvalue().decode("UTF-8")
+ 
+ 	web_buffer.close()
+@@ -173,7 +245,7 @@ def define_new_opts():
+ 	all_opt["proxy"] = {
+                 "getopt" : ":",
+                 "longopt" : "proxy",
+-                "help" : "--proxy=[http://<URL>:<PORT>]          Proxy: 'http://<URL>:<PORT>'",
++                "help" : "--proxy=[http://<URL>:<PORT>]  Proxy: 'http://<URL>:<PORT>'",
+                 "required" : "0",
+ 		"default": "",
+                 "shortdesc" : "Network proxy",
+@@ -188,14 +260,26 @@ def define_new_opts():
+ 		"shortdesc" : "Number of nodes returned by API",
+ 		"order" : 0
+ 	}
++	all_opt["token_file"] = {
++		"getopt" : ":",
++		"longopt" : "token-file",
++		"help" : "--token-file=[path]            Path to the token cache file\n"
++			"\t\t\t\t  (Default: @FENCETMPDIR@/fence_ibm_vpc/[hash].token)\n"
++			"\t\t\t\t  [hash] will be replaced by a hashed value",
++		"required" : "0",
++		"default": "@FENCETMPDIR@/fence_ibm_vpc/[hash].token",
++		"shortdesc" : "Path to the token cache file",
++		"order" : 0
++	}
+ 
+ 
+ def main():
+ 	device_opt = [
+ 		"apikey",
+ 		"region",
+-		"limit",
+ 		"proxy",
++		"limit",
++		"token_file",
+ 		"port",
+ 		"no_password",
+ 	]
+diff --git a/tests/data/metadata/fence_ibm_vpc.xml b/tests/data/metadata/fence_ibm_vpc.xml
+index acf4925fc..c35bc4619 100644
+--- a/tests/data/metadata/fence_ibm_vpc.xml
++++ b/tests/data/metadata/fence_ibm_vpc.xml
+@@ -23,6 +23,10 @@
+ 		<content type="string"  />
+ 		<shortdesc lang="en">Region</shortdesc>
+ 	</parameter>
++	<parameter name="token_file" unique="0" required="0">
++		<getopt mixed="--token-file=[path]" />
++		<shortdesc lang="en">Path to the token cache file</shortdesc>
++	</parameter>
+ 	<parameter name="action" unique="0" required="1">
+ 		<getopt mixed="-o, --action=[action]" />
+ 		<content type="string" default="reboot"  />
diff --git a/SOURCES/bz2134017-fence_lpar-only-output-additional-info-on-debug.patch b/SOURCES/bz2134017-fence_lpar-only-output-additional-info-on-debug.patch
new file mode 100644
index 0000000..8d29594
--- /dev/null
+++ b/SOURCES/bz2134017-fence_lpar-only-output-additional-info-on-debug.patch
@@ -0,0 +1,33 @@
+From 46f94d4dbad868afc70b96bd612323221991d06e Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Tue, 11 Oct 2022 09:51:24 +0200
+Subject: [PATCH] fence_lpar: only output additional error output on DEBUG
+ level
+
+Without this patch we get ERROR logged with trace info when doing
+status-action for nodes that doesnt exist.
+---
+ agents/lpar/fence_lpar.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/agents/lpar/fence_lpar.py b/agents/lpar/fence_lpar.py
+index 2046b0e4e..975971a57 100644
+--- a/agents/lpar/fence_lpar.py
++++ b/agents/lpar/fence_lpar.py
+@@ -12,6 +12,7 @@
+ 
+ import sys, re
+ import atexit
++import logging
+ sys.path.append("@FENCEAGENTSLIBDIR@")
+ from fencing import *
+ from fencing import fail, fail_usage, EC_STATUS_HMC
+@@ -48,7 +49,7 @@ def get_power_status(conn, options):
+ 		elif options["--hmc-version"] in ["4", "IVM"]:
+ 			status = re.compile(",state=(.*?),", re.IGNORECASE).search(conn.before).group(1)
+ 	except AttributeError as e:
+-		fail_usage("Command on HMC failed: {}\n{}".format(command, str(e)), False)
++		logging.debug("Command on HMC failed: {}\n{}".format(command, str(e)))
+ 		fail(EC_STATUS_HMC)
+ 
+ 	return _normalize_status(status)
diff --git a/SOURCES/bz2136076-fence_ibm_powervs-improve-defaults.patch b/SOURCES/bz2136076-fence_ibm_powervs-improve-defaults.patch
new file mode 100644
index 0000000..7f5e578
--- /dev/null
+++ b/SOURCES/bz2136076-fence_ibm_powervs-improve-defaults.patch
@@ -0,0 +1,46 @@
+From 3373431dc49d6e429bbf613765385cb33a56e917 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Tue, 25 Oct 2022 10:39:29 +0200
+Subject: [PATCH] fence_ibm_powervs: improve defaults based on testing
+
+---
+ agents/ibm_powervs/fence_ibm_powervs.py   | 4 ++--
+ tests/data/metadata/fence_ibm_powervs.xml | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/agents/ibm_powervs/fence_ibm_powervs.py b/agents/ibm_powervs/fence_ibm_powervs.py
+index b0caed7c5..183893616 100755
+--- a/agents/ibm_powervs/fence_ibm_powervs.py
++++ b/agents/ibm_powervs/fence_ibm_powervs.py
+@@ -232,10 +232,10 @@ def main():
+ 	atexit.register(atexit_handler)
+ 	define_new_opts()
+ 
+-	all_opt["shell_timeout"]["default"] = "15"
++	all_opt["shell_timeout"]["default"] = "500"
+ 	all_opt["power_timeout"]["default"] = "30"
+ 	all_opt["power_wait"]["default"] = "1"
+-	all_opt["stonith_status_sleep"]["default"] = "3"
++	all_opt["stonith_status_sleep"]["default"] = "2"
+ 	all_opt["api-type"]["default"] = "private"
+ 	all_opt["proxy"]["default"] = ""
+ 
+diff --git a/tests/data/metadata/fence_ibm_powervs.xml b/tests/data/metadata/fence_ibm_powervs.xml
+index 40c494110..326bc2378 100644
+--- a/tests/data/metadata/fence_ibm_powervs.xml
++++ b/tests/data/metadata/fence_ibm_powervs.xml
+@@ -119,12 +119,12 @@
+ 	</parameter>
+ 	<parameter name="shell_timeout" unique="0" required="0">
+ 		<getopt mixed="--shell-timeout=[seconds]" />
+-		<content type="second" default="15"  />
++		<content type="second" default="500"  />
+ 		<shortdesc lang="en">Wait X seconds for cmd prompt after issuing command</shortdesc>
+ 	</parameter>
+ 	<parameter name="stonith_status_sleep" unique="0" required="0">
+ 		<getopt mixed="--stonith-status-sleep=[seconds]" />
+-		<content type="second" default="3"  />
++		<content type="second" default="2"  />
+ 		<shortdesc lang="en">Sleep X seconds between status calls during a STONITH action</shortdesc>
+ 	</parameter>
+ 	<parameter name="retry_on" unique="0" required="0">
diff --git a/SOURCES/bz2152105-fencing-1-add-plug_separator.patch b/SOURCES/bz2152105-fencing-1-add-plug_separator.patch
new file mode 100644
index 0000000..e0a8f08
--- /dev/null
+++ b/SOURCES/bz2152105-fencing-1-add-plug_separator.patch
@@ -0,0 +1,74 @@
+From 90ea995038e560222f9345310f31a79b595a5219 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Thu, 24 Nov 2022 10:19:29 +0100
+Subject: [PATCH 1/2] fencing: add plug_separator parameter to be able to
+ specify one that isnt part of the plug name(s)
+
+---
+ lib/fencing.py.py | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/lib/fencing.py.py b/lib/fencing.py.py
+index 940bd01d1..cf1c48e78 100644
+--- a/lib/fencing.py.py
++++ b/lib/fencing.py.py
+@@ -322,6 +322,13 @@
+ 		"help" : "-6, --inet6-only               Forces agent to use IPv6 addresses only",
+ 		"required" : "0",
+ 		"order" : 1},
++	"plug_separator" : {
++		"getopt" : ":",
++		"longopt" : "plug-separator",
++		"help" : "--plug-separator=[char]        Separator for plug parameter when specifying more than 1 plug",
++		"default" : ",",
++		"required" : "0",
++		"order" : 100},
+ 	"separator" : {
+ 		"getopt" : "C:",
+ 		"longopt" : "separator",
+@@ -934,7 +941,7 @@ def fence_action(connection, options, set_power_fn, get_power_fn, get_outlet_lis
+ 
+ 	try:
+ 		if "--plug" in options:
+-			options["--plugs"] = options["--plug"].split(",")
++			options["--plugs"] = options["--plug"].split(options["--plug-separator"])
+ 
+ 		## Process options that manipulate fencing device
+ 		#####
+
+From 55e2a56b81ed2188dedfce07cc3155e2175183cd Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Mon, 28 Nov 2022 12:40:00 +0100
+Subject: [PATCH 2/2] fence_wti: increase login timeout to avoid random
+ timeouts
+
+---
+ agents/wti/fence_wti.py           | 1 +
+ tests/data/metadata/fence_wti.xml | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/agents/wti/fence_wti.py b/agents/wti/fence_wti.py
+index 68640ae65..97cc66de2 100644
+--- a/agents/wti/fence_wti.py
++++ b/agents/wti/fence_wti.py
+@@ -178,6 +178,7 @@ def main():
+ 	atexit.register(atexit_handler)
+ 
+ 	all_opt["cmd_prompt"]["default"] = ["RSM>", "MPC>", "IPS>", "TPS>", "NBB>", "NPS>", "VMR>"]
++	all_opt["login_timeout"]["default"] = "10"
+ 
+ 	options = check_input(device_opt, process_input(device_opt))
+ 
+diff --git a/tests/data/metadata/fence_wti.xml b/tests/data/metadata/fence_wti.xml
+index 6bdccd2dc..8e15f4852 100644
+--- a/tests/data/metadata/fence_wti.xml
++++ b/tests/data/metadata/fence_wti.xml
+@@ -153,7 +153,7 @@
+ 	</parameter>
+ 	<parameter name="login_timeout" unique="0" required="0">
+ 		<getopt mixed="--login-timeout=[seconds]" />
+-		<content type="second" default="5"  />
++		<content type="second" default="10"  />
+ 		<shortdesc lang="en">Wait X seconds for cmd prompt after login</shortdesc>
+ 	</parameter>
+ 	<parameter name="power_timeout" unique="0" required="0">
diff --git a/SOURCES/bz2152105-fencing-2-update-DEPENDENCY_OPT.patch b/SOURCES/bz2152105-fencing-2-update-DEPENDENCY_OPT.patch
new file mode 100644
index 0000000..b3c7a35
--- /dev/null
+++ b/SOURCES/bz2152105-fencing-2-update-DEPENDENCY_OPT.patch
@@ -0,0 +1,1212 @@
+From 0f280ea4a299037a7d4e99d80b0193fd6fcdbd79 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Tue, 24 Jan 2023 12:19:41 +0100
+Subject: [PATCH] fencing: add plug_separator to default DEPENDENCY_OPT
+
+---
+ lib/fencing.py.py                             | 2 +-
+ tests/data/metadata/fence_aliyun.xml          | 5 +++++
+ tests/data/metadata/fence_alom.xml            | 5 +++++
+ tests/data/metadata/fence_amt.xml             | 5 +++++
+ tests/data/metadata/fence_amt_ws.xml          | 5 +++++
+ tests/data/metadata/fence_apc.xml             | 5 +++++
+ tests/data/metadata/fence_apc_snmp.xml        | 5 +++++
+ tests/data/metadata/fence_aws.xml             | 5 +++++
+ tests/data/metadata/fence_azure_arm.xml       | 5 +++++
+ tests/data/metadata/fence_bladecenter.xml     | 5 +++++
+ tests/data/metadata/fence_brocade.xml         | 5 +++++
+ tests/data/metadata/fence_cisco_mds.xml       | 5 +++++
+ tests/data/metadata/fence_cisco_ucs.xml       | 5 +++++
+ tests/data/metadata/fence_compute.xml         | 5 +++++
+ tests/data/metadata/fence_docker.xml          | 5 +++++
+ tests/data/metadata/fence_drac.xml            | 5 +++++
+ tests/data/metadata/fence_drac5.xml           | 5 +++++
+ tests/data/metadata/fence_dummy.xml           | 5 +++++
+ tests/data/metadata/fence_eaton_snmp.xml      | 5 +++++
+ tests/data/metadata/fence_emerson.xml         | 5 +++++
+ tests/data/metadata/fence_eps.xml             | 5 +++++
+ tests/data/metadata/fence_evacuate.xml        | 5 +++++
+ tests/data/metadata/fence_gce.xml             | 5 +++++
+ tests/data/metadata/fence_hds_cb.xml          | 5 +++++
+ tests/data/metadata/fence_heuristics_ping.xml | 5 +++++
+ tests/data/metadata/fence_hpblade.xml         | 5 +++++
+ tests/data/metadata/fence_ibm_powervs.xml     | 5 +++++
+ tests/data/metadata/fence_ibm_vpc.xml         | 5 +++++
+ tests/data/metadata/fence_ibmblade.xml        | 5 +++++
+ tests/data/metadata/fence_idrac.xml           | 5 +++++
+ tests/data/metadata/fence_ifmib.xml           | 5 +++++
+ tests/data/metadata/fence_ilo.xml             | 5 +++++
+ tests/data/metadata/fence_ilo2.xml            | 5 +++++
+ tests/data/metadata/fence_ilo3.xml            | 5 +++++
+ tests/data/metadata/fence_ilo3_ssh.xml        | 5 +++++
+ tests/data/metadata/fence_ilo4.xml            | 5 +++++
+ tests/data/metadata/fence_ilo4_ssh.xml        | 5 +++++
+ tests/data/metadata/fence_ilo_moonshot.xml    | 5 +++++
+ tests/data/metadata/fence_ilo_mp.xml          | 5 +++++
+ tests/data/metadata/fence_ilo_ssh.xml         | 5 +++++
+ tests/data/metadata/fence_imm.xml             | 5 +++++
+ tests/data/metadata/fence_intelmodular.xml    | 5 +++++
+ tests/data/metadata/fence_ipdu.xml            | 5 +++++
+ tests/data/metadata/fence_ipmilan.xml         | 5 +++++
+ tests/data/metadata/fence_ironic.xml          | 5 +++++
+ tests/data/metadata/fence_ldom.xml            | 5 +++++
+ tests/data/metadata/fence_lpar.xml            | 5 +++++
+ tests/data/metadata/fence_mpath.xml           | 5 +++++
+ tests/data/metadata/fence_netio.xml           | 5 +++++
+ tests/data/metadata/fence_ovh.xml             | 5 +++++
+ tests/data/metadata/fence_powerman.xml        | 5 +++++
+ tests/data/metadata/fence_pve.xml             | 5 +++++
+ tests/data/metadata/fence_raritan.xml         | 5 +++++
+ tests/data/metadata/fence_rcd_serial.xml      | 5 +++++
+ tests/data/metadata/fence_redfish.xml         | 5 +++++
+ tests/data/metadata/fence_rhevm.xml           | 5 +++++
+ tests/data/metadata/fence_rsa.xml             | 5 +++++
+ tests/data/metadata/fence_rsb.xml             | 5 +++++
+ tests/data/metadata/fence_sanbox2.xml         | 5 +++++
+ tests/data/metadata/fence_sbd.xml             | 5 +++++
+ tests/data/metadata/fence_scsi.xml            | 5 +++++
+ tests/data/metadata/fence_tripplite_snmp.xml  | 5 +++++
+ tests/data/metadata/fence_vbox.xml            | 5 +++++
+ tests/data/metadata/fence_virsh.xml           | 5 +++++
+ tests/data/metadata/fence_vmware.xml          | 5 +++++
+ tests/data/metadata/fence_vmware_rest.xml     | 5 +++++
+ tests/data/metadata/fence_vmware_soap.xml     | 5 +++++
+ tests/data/metadata/fence_vmware_vcloud.xml   | 5 +++++
+ tests/data/metadata/fence_wti.xml             | 5 +++++
+ tests/data/metadata/fence_xenapi.xml          | 5 +++++
+ tests/data/metadata/fence_zvmip.xml           | 5 +++++
+ 84 files changed, 416 insertions(+), 1 deletion(-)
+
+diff --git a/lib/fencing.py.py b/lib/fencing.py.py
+index cf1c48e78..c5b5e94a1 100644
+--- a/lib/fencing.py.py
++++ b/lib/fencing.py.py
+@@ -494,7 +494,7 @@
+ 			 "version", "action", "agent", "power_timeout",
+ 			 "shell_timeout", "login_timeout", "disable_timeout",
+ 			 "power_wait", "stonith_status_sleep", "retry_on", "delay",
+-			 "quiet"],
++			 "plug_separator", "quiet"],
+ 		"passwd" : ["passwd_script"],
+ 		"sudo" : ["sudo_path"],
+ 		"secure" : ["identity_file", "ssh_options", "ssh_path", "inet4_only", "inet6_only"],
+diff --git a/tests/data/metadata/fence_aliyun.xml b/tests/data/metadata/fence_aliyun.xml
+index 35112eb68..56d792048 100644
+--- a/tests/data/metadata/fence_aliyun.xml
++++ b/tests/data/metadata/fence_aliyun.xml
+@@ -72,6 +72,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_alom.xml b/tests/data/metadata/fence_alom.xml
+index 939b3a56e..6532ad6dd 100644
+--- a/tests/data/metadata/fence_alom.xml
++++ b/tests/data/metadata/fence_alom.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_amt.xml b/tests/data/metadata/fence_amt.xml
+index 98b5ceeb4..809c2dfea 100644
+--- a/tests/data/metadata/fence_amt.xml
++++ b/tests/data/metadata/fence_amt.xml
+@@ -106,6 +106,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="amttool_path" unique="0" required="0">
+ 		<getopt mixed="--amttool-path=[path]" />
+ 		<shortdesc lang="en">Path to amttool binary</shortdesc>
+diff --git a/tests/data/metadata/fence_amt_ws.xml b/tests/data/metadata/fence_amt_ws.xml
+index af7c433f0..97a222526 100644
+--- a/tests/data/metadata/fence_amt_ws.xml
++++ b/tests/data/metadata/fence_amt_ws.xml
+@@ -106,6 +106,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_apc.xml b/tests/data/metadata/fence_apc.xml
+index da029bbb0..6081b1ff5 100644
+--- a/tests/data/metadata/fence_apc.xml
++++ b/tests/data/metadata/fence_apc.xml
+@@ -141,6 +141,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_apc_snmp.xml b/tests/data/metadata/fence_apc_snmp.xml
+index 5f5a33398..02efbb0b0 100644
+--- a/tests/data/metadata/fence_apc_snmp.xml
++++ b/tests/data/metadata/fence_apc_snmp.xml
+@@ -147,6 +147,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_aws.xml b/tests/data/metadata/fence_aws.xml
+index 682b9f0de..76995ecf2 100644
+--- a/tests/data/metadata/fence_aws.xml
++++ b/tests/data/metadata/fence_aws.xml
+@@ -80,6 +80,11 @@ For instructions see: https://boto3.readthedocs.io/en/latest/guide/quickstart.ht
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_azure_arm.xml b/tests/data/metadata/fence_azure_arm.xml
+index f7882fa23..c6e1f203b 100644
+--- a/tests/data/metadata/fence_azure_arm.xml
++++ b/tests/data/metadata/fence_azure_arm.xml
+@@ -132,6 +132,11 @@ When using network fencing the reboot-action will cause a quick-return once the
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_bladecenter.xml b/tests/data/metadata/fence_bladecenter.xml
+index 656d12b8b..3cc415355 100644
+--- a/tests/data/metadata/fence_bladecenter.xml
++++ b/tests/data/metadata/fence_bladecenter.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_brocade.xml b/tests/data/metadata/fence_brocade.xml
+index e6265b68f..a78738d96 100644
+--- a/tests/data/metadata/fence_brocade.xml
++++ b/tests/data/metadata/fence_brocade.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_cisco_mds.xml b/tests/data/metadata/fence_cisco_mds.xml
+index e2f5c5b6a..829c9dcbe 100644
+--- a/tests/data/metadata/fence_cisco_mds.xml
++++ b/tests/data/metadata/fence_cisco_mds.xml
+@@ -146,6 +146,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_cisco_ucs.xml b/tests/data/metadata/fence_cisco_ucs.xml
+index e232f33bc..76d15e9f4 100644
+--- a/tests/data/metadata/fence_cisco_ucs.xml
++++ b/tests/data/metadata/fence_cisco_ucs.xml
+@@ -122,6 +122,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_compute.xml b/tests/data/metadata/fence_compute.xml
+index 1b25910f5..f6aa1920b 100644
+--- a/tests/data/metadata/fence_compute.xml
++++ b/tests/data/metadata/fence_compute.xml
+@@ -157,6 +157,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_docker.xml b/tests/data/metadata/fence_docker.xml
+index 12725b95a..f685b1162 100644
+--- a/tests/data/metadata/fence_docker.xml
++++ b/tests/data/metadata/fence_docker.xml
+@@ -110,6 +110,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_drac.xml b/tests/data/metadata/fence_drac.xml
+index bb83f5860..a99126132 100644
+--- a/tests/data/metadata/fence_drac.xml
++++ b/tests/data/metadata/fence_drac.xml
+@@ -107,6 +107,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_drac5.xml b/tests/data/metadata/fence_drac5.xml
+index c539923c0..a0c73ebf8 100644
+--- a/tests/data/metadata/fence_drac5.xml
++++ b/tests/data/metadata/fence_drac5.xml
+@@ -145,6 +145,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_dummy.xml b/tests/data/metadata/fence_dummy.xml
+index a711d3869..0651f5ae0 100644
+--- a/tests/data/metadata/fence_dummy.xml
++++ b/tests/data/metadata/fence_dummy.xml
+@@ -56,6 +56,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_eaton_snmp.xml b/tests/data/metadata/fence_eaton_snmp.xml
+index b3e870b95..1d89b5272 100644
+--- a/tests/data/metadata/fence_eaton_snmp.xml
++++ b/tests/data/metadata/fence_eaton_snmp.xml
+@@ -146,6 +146,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_emerson.xml b/tests/data/metadata/fence_emerson.xml
+index b46ef8293..1ed792e2b 100644
+--- a/tests/data/metadata/fence_emerson.xml
++++ b/tests/data/metadata/fence_emerson.xml
+@@ -146,6 +146,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_eps.xml b/tests/data/metadata/fence_eps.xml
+index 6cf772895..a8cf8ad41 100644
+--- a/tests/data/metadata/fence_eps.xml
++++ b/tests/data/metadata/fence_eps.xml
+@@ -109,6 +109,11 @@ Agent basically works by connecting to hidden page and pass appropriate argument
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_evacuate.xml b/tests/data/metadata/fence_evacuate.xml
+index 10b84abca..df2181eb6 100644
+--- a/tests/data/metadata/fence_evacuate.xml
++++ b/tests/data/metadata/fence_evacuate.xml
+@@ -152,6 +152,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_gce.xml b/tests/data/metadata/fence_gce.xml
+index c7d400e10..2a89b16c2 100644
+--- a/tests/data/metadata/fence_gce.xml
++++ b/tests/data/metadata/fence_gce.xml
+@@ -147,6 +147,11 @@ For instructions see: https://cloud.google.com/compute/docs/tutorials/python-gui
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_hds_cb.xml b/tests/data/metadata/fence_hds_cb.xml
+index 90f4d2809..e25d889e3 100644
+--- a/tests/data/metadata/fence_hds_cb.xml
++++ b/tests/data/metadata/fence_hds_cb.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_heuristics_ping.xml b/tests/data/metadata/fence_heuristics_ping.xml
+index 3832e3c9d..b10189b91 100644
+--- a/tests/data/metadata/fence_heuristics_ping.xml
++++ b/tests/data/metadata/fence_heuristics_ping.xml
+@@ -82,6 +82,11 @@ This is not a fence agent by itself! Its only purpose is to enable/disable anoth
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_hpblade.xml b/tests/data/metadata/fence_hpblade.xml
+index 6f190f3f3..0957fcdd4 100644
+--- a/tests/data/metadata/fence_hpblade.xml
++++ b/tests/data/metadata/fence_hpblade.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ibm_powervs.xml b/tests/data/metadata/fence_ibm_powervs.xml
+index 326bc2378..79878a9a7 100644
+--- a/tests/data/metadata/fence_ibm_powervs.xml
++++ b/tests/data/metadata/fence_ibm_powervs.xml
+@@ -87,6 +87,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ibm_vpc.xml b/tests/data/metadata/fence_ibm_vpc.xml
+index c35bc4619..fe29ffb89 100644
+--- a/tests/data/metadata/fence_ibm_vpc.xml
++++ b/tests/data/metadata/fence_ibm_vpc.xml
+@@ -76,6 +76,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ibmblade.xml b/tests/data/metadata/fence_ibmblade.xml
+index 9598abf6f..3286ca6de 100644
+--- a/tests/data/metadata/fence_ibmblade.xml
++++ b/tests/data/metadata/fence_ibmblade.xml
+@@ -146,6 +146,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_idrac.xml b/tests/data/metadata/fence_idrac.xml
+index a38345629..2d4876493 100644
+--- a/tests/data/metadata/fence_idrac.xml
++++ b/tests/data/metadata/fence_idrac.xml
+@@ -150,6 +150,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ifmib.xml b/tests/data/metadata/fence_ifmib.xml
+index c9328797e..4b56e2335 100644
+--- a/tests/data/metadata/fence_ifmib.xml
++++ b/tests/data/metadata/fence_ifmib.xml
+@@ -148,6 +148,11 @@ It was written with managed ethernet switches in mind, in order to fence iSCSI S
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ilo.xml b/tests/data/metadata/fence_ilo.xml
+index 384b40dc6..0bac03c83 100644
+--- a/tests/data/metadata/fence_ilo.xml
++++ b/tests/data/metadata/fence_ilo.xml
+@@ -133,6 +133,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo2.xml b/tests/data/metadata/fence_ilo2.xml
+index 3c98719d9..3d954a345 100644
+--- a/tests/data/metadata/fence_ilo2.xml
++++ b/tests/data/metadata/fence_ilo2.xml
+@@ -133,6 +133,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo3.xml b/tests/data/metadata/fence_ilo3.xml
+index b0183ecee..0567b539c 100644
+--- a/tests/data/metadata/fence_ilo3.xml
++++ b/tests/data/metadata/fence_ilo3.xml
+@@ -150,6 +150,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo3_ssh.xml b/tests/data/metadata/fence_ilo3_ssh.xml
+index 1a9e56c50..e2a25661d 100644
+--- a/tests/data/metadata/fence_ilo3_ssh.xml
++++ b/tests/data/metadata/fence_ilo3_ssh.xml
+@@ -149,6 +149,11 @@ WARNING: The monitor-action is prone to timeouts. Use the fence_ilo-equivalent t
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo4.xml b/tests/data/metadata/fence_ilo4.xml
+index 22df71375..647bb1021 100644
+--- a/tests/data/metadata/fence_ilo4.xml
++++ b/tests/data/metadata/fence_ilo4.xml
+@@ -150,6 +150,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo4_ssh.xml b/tests/data/metadata/fence_ilo4_ssh.xml
+index 78aed1c4e..4fd6b2ef1 100644
+--- a/tests/data/metadata/fence_ilo4_ssh.xml
++++ b/tests/data/metadata/fence_ilo4_ssh.xml
+@@ -149,6 +149,11 @@ WARNING: The monitor-action is prone to timeouts. Use the fence_ilo-equivalent t
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo_moonshot.xml b/tests/data/metadata/fence_ilo_moonshot.xml
+index b38be58f3..c88c5922f 100644
+--- a/tests/data/metadata/fence_ilo_moonshot.xml
++++ b/tests/data/metadata/fence_ilo_moonshot.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ilo_mp.xml b/tests/data/metadata/fence_ilo_mp.xml
+index ea0a8e69c..7d4fd22d5 100644
+--- a/tests/data/metadata/fence_ilo_mp.xml
++++ b/tests/data/metadata/fence_ilo_mp.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ilo_ssh.xml b/tests/data/metadata/fence_ilo_ssh.xml
+index b8ffe3c6d..2e1cb84b2 100644
+--- a/tests/data/metadata/fence_ilo_ssh.xml
++++ b/tests/data/metadata/fence_ilo_ssh.xml
+@@ -149,6 +149,11 @@ WARNING: The monitor-action is prone to timeouts. Use the fence_ilo-equivalent t
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_imm.xml b/tests/data/metadata/fence_imm.xml
+index 5ed4e8c30..5c5bf910f 100644
+--- a/tests/data/metadata/fence_imm.xml
++++ b/tests/data/metadata/fence_imm.xml
+@@ -150,6 +150,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_intelmodular.xml b/tests/data/metadata/fence_intelmodular.xml
+index 03c7c55d8..5dad0d0bd 100644
+--- a/tests/data/metadata/fence_intelmodular.xml
++++ b/tests/data/metadata/fence_intelmodular.xml
+@@ -148,6 +148,11 @@ Note: Since firmware update version 2.7, SNMP v2 write support is removed, and r
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ipdu.xml b/tests/data/metadata/fence_ipdu.xml
+index d9a44dd0f..22024a7a1 100644
+--- a/tests/data/metadata/fence_ipdu.xml
++++ b/tests/data/metadata/fence_ipdu.xml
+@@ -146,6 +146,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ipmilan.xml b/tests/data/metadata/fence_ipmilan.xml
+index f8ede91cd..a31afcfd4 100644
+--- a/tests/data/metadata/fence_ipmilan.xml
++++ b/tests/data/metadata/fence_ipmilan.xml
+@@ -150,6 +150,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_ironic.xml b/tests/data/metadata/fence_ironic.xml
+index 4da784826..813b03732 100644
+--- a/tests/data/metadata/fence_ironic.xml
++++ b/tests/data/metadata/fence_ironic.xml
+@@ -102,6 +102,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ldom.xml b/tests/data/metadata/fence_ldom.xml
+index 0c8c45e24..59facad6f 100644
+--- a/tests/data/metadata/fence_ldom.xml
++++ b/tests/data/metadata/fence_ldom.xml
+@@ -138,6 +138,11 @@ Very useful parameter is -c (or cmd_prompt in stdin mode). This must be set to s
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_lpar.xml b/tests/data/metadata/fence_lpar.xml
+index e2adbc334..22f12dc23 100644
+--- a/tests/data/metadata/fence_lpar.xml
++++ b/tests/data/metadata/fence_lpar.xml
+@@ -150,6 +150,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_mpath.xml b/tests/data/metadata/fence_mpath.xml
+index d656013bb..e22d3a1f9 100644
+--- a/tests/data/metadata/fence_mpath.xml
++++ b/tests/data/metadata/fence_mpath.xml
+@@ -75,6 +75,11 @@ When used as a watchdog device you can define e.g. retry=1, retry-sleep=2 and ve
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_netio.xml b/tests/data/metadata/fence_netio.xml
+index 7d8a4c723..95f3cf34a 100644
+--- a/tests/data/metadata/fence_netio.xml
++++ b/tests/data/metadata/fence_netio.xml
+@@ -97,6 +97,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_ovh.xml b/tests/data/metadata/fence_ovh.xml
+index 5913e49ad..79d5eda94 100644
+--- a/tests/data/metadata/fence_ovh.xml
++++ b/tests/data/metadata/fence_ovh.xml
+@@ -87,6 +87,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_powerman.xml b/tests/data/metadata/fence_powerman.xml
+index eb2509452..10514fd3c 100644
+--- a/tests/data/metadata/fence_powerman.xml
++++ b/tests/data/metadata/fence_powerman.xml
+@@ -67,6 +67,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="3"  />
+diff --git a/tests/data/metadata/fence_pve.xml b/tests/data/metadata/fence_pve.xml
+index ec1405448..1ed3cda4f 100644
+--- a/tests/data/metadata/fence_pve.xml
++++ b/tests/data/metadata/fence_pve.xml
+@@ -145,6 +145,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_raritan.xml b/tests/data/metadata/fence_raritan.xml
+index 9983cc08c..5e387c784 100644
+--- a/tests/data/metadata/fence_raritan.xml
++++ b/tests/data/metadata/fence_raritan.xml
+@@ -97,6 +97,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_rcd_serial.xml b/tests/data/metadata/fence_rcd_serial.xml
+index 2d0a49d9f..c14d342f7 100644
+--- a/tests/data/metadata/fence_rcd_serial.xml
++++ b/tests/data/metadata/fence_rcd_serial.xml
+@@ -55,6 +55,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_redfish.xml b/tests/data/metadata/fence_redfish.xml
+index 5bdb32365..76a23af30 100644
+--- a/tests/data/metadata/fence_redfish.xml
++++ b/tests/data/metadata/fence_redfish.xml
+@@ -132,6 +132,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_rhevm.xml b/tests/data/metadata/fence_rhevm.xml
+index 372c1bbca..0b2239931 100644
+--- a/tests/data/metadata/fence_rhevm.xml
++++ b/tests/data/metadata/fence_rhevm.xml
+@@ -140,6 +140,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_rsa.xml b/tests/data/metadata/fence_rsa.xml
+index 6dfb0925c..284f9184d 100644
+--- a/tests/data/metadata/fence_rsa.xml
++++ b/tests/data/metadata/fence_rsa.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_rsb.xml b/tests/data/metadata/fence_rsb.xml
+index 52978583c..e3d6e1096 100644
+--- a/tests/data/metadata/fence_rsb.xml
++++ b/tests/data/metadata/fence_rsb.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_sanbox2.xml b/tests/data/metadata/fence_sanbox2.xml
+index 2fa3f295b..b29b8bb75 100644
+--- a/tests/data/metadata/fence_sanbox2.xml
++++ b/tests/data/metadata/fence_sanbox2.xml
+@@ -107,6 +107,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_sbd.xml b/tests/data/metadata/fence_sbd.xml
+index 7248b864a..d5600b7ce 100644
+--- a/tests/data/metadata/fence_sbd.xml
++++ b/tests/data/metadata/fence_sbd.xml
+@@ -65,6 +65,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_scsi.xml b/tests/data/metadata/fence_scsi.xml
+index 97c44cc21..4fa86189c 100644
+--- a/tests/data/metadata/fence_scsi.xml
++++ b/tests/data/metadata/fence_scsi.xml
+@@ -90,6 +90,11 @@ When used as a watchdog device you can define e.g. retry=1, retry-sleep=2 and ve
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_tripplite_snmp.xml b/tests/data/metadata/fence_tripplite_snmp.xml
+index b767597c5..c5f66d56f 100644
+--- a/tests/data/metadata/fence_tripplite_snmp.xml
++++ b/tests/data/metadata/fence_tripplite_snmp.xml
+@@ -147,6 +147,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_vbox.xml b/tests/data/metadata/fence_vbox.xml
+index daf8ee98a..35577a6b6 100644
+--- a/tests/data/metadata/fence_vbox.xml
++++ b/tests/data/metadata/fence_vbox.xml
+@@ -138,6 +138,11 @@ By default, vbox needs to log in as a user that is a member of the vboxusers gro
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_virsh.xml b/tests/data/metadata/fence_virsh.xml
+index b9b4082fe..82fe9b6d1 100644
+--- a/tests/data/metadata/fence_virsh.xml
++++ b/tests/data/metadata/fence_virsh.xml
+@@ -138,6 +138,11 @@ By default, virsh needs root account to do properly work. So you must allow ssh
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_vmware.xml b/tests/data/metadata/fence_vmware.xml
+index 8d6eabc6f..a46ffdb0f 100644
+--- a/tests/data/metadata/fence_vmware.xml
++++ b/tests/data/metadata/fence_vmware.xml
+@@ -149,6 +149,11 @@ After you have successfully installed VI Perl Toolkit or VIX API, you should be
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="delay" unique="0" required="0">
+ 		<getopt mixed="--delay=[seconds]" />
+ 		<content type="second" default="0"  />
+diff --git a/tests/data/metadata/fence_vmware_rest.xml b/tests/data/metadata/fence_vmware_rest.xml
+index e46c7a993..5c69c2f21 100644
+--- a/tests/data/metadata/fence_vmware_rest.xml
++++ b/tests/data/metadata/fence_vmware_rest.xml
+@@ -128,6 +128,11 @@ NOTE: If there's more than 1000 VMs there is a filter parameter to work around t
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_vmware_soap.xml b/tests/data/metadata/fence_vmware_soap.xml
+index 1327abac6..72b27e351 100644
+--- a/tests/data/metadata/fence_vmware_soap.xml
++++ b/tests/data/metadata/fence_vmware_soap.xml
+@@ -119,6 +119,11 @@ Name of virtual machine (-n / port) has to be used in inventory path format (e.g
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_vmware_vcloud.xml b/tests/data/metadata/fence_vmware_vcloud.xml
+index 85d970e0a..3c8bb74a3 100644
+--- a/tests/data/metadata/fence_vmware_vcloud.xml
++++ b/tests/data/metadata/fence_vmware_vcloud.xml
+@@ -121,6 +121,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_wti.xml b/tests/data/metadata/fence_wti.xml
+index 8e15f4852..b9eb9c6bc 100644
+--- a/tests/data/metadata/fence_wti.xml
++++ b/tests/data/metadata/fence_wti.xml
+@@ -136,6 +136,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_xenapi.xml b/tests/data/metadata/fence_xenapi.xml
+index 83c83fff0..380ac28da 100644
+--- a/tests/data/metadata/fence_xenapi.xml
++++ b/tests/data/metadata/fence_xenapi.xml
+@@ -87,6 +87,11 @@
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
+diff --git a/tests/data/metadata/fence_zvmip.xml b/tests/data/metadata/fence_zvmip.xml
+index 192d1e76b..6996ab736 100644
+--- a/tests/data/metadata/fence_zvmip.xml
++++ b/tests/data/metadata/fence_zvmip.xml
+@@ -150,6 +150,11 @@ to access the system's directory manager.
+ 		<content type="boolean"  />
+ 		<shortdesc lang="en">Display help and exit</shortdesc>
+ 	</parameter>
++	<parameter name="plug_separator" unique="0" required="0">
++		<getopt mixed="--plug-separator=[char]" />
++		<content type="string" default=","  />
++		<shortdesc lang="en">Separator for plug parameter when specifying more than 1 plug</shortdesc>
++	</parameter>
+ 	<parameter name="separator" unique="0" required="0">
+ 		<getopt mixed="-C, --separator=[char]" />
+ 		<content type="string" default=","  />
diff --git a/SOURCES/bz2160478-fence_scsi-fix-validate-all.patch b/SOURCES/bz2160478-fence_scsi-fix-validate-all.patch
new file mode 100644
index 0000000..1aadca1
--- /dev/null
+++ b/SOURCES/bz2160478-fence_scsi-fix-validate-all.patch
@@ -0,0 +1,30 @@
+From a416a367a804f1e5abaf142c629fe6ab5572d3b6 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Thu, 12 Jan 2023 15:46:41 +0100
+Subject: [PATCH] fence_scsi: skip key generation during validate-all action
+
+---
+ agents/scsi/fence_scsi.py | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/agents/scsi/fence_scsi.py b/agents/scsi/fence_scsi.py
+index e33339614..f9e6823b2 100644
+--- a/agents/scsi/fence_scsi.py
++++ b/agents/scsi/fence_scsi.py
+@@ -566,11 +566,12 @@ def main():
+ 	or ("--key" in options and options["--key"])):
+ 		fail_usage("Failed: nodename or key is required", stop_after_error)
+ 
+-	if not ("--key" in options and options["--key"]):
+-		options["--key"] = generate_key(options)
++	if options["--action"] != "validate-all":
++		if not ("--key" in options and options["--key"]):
++			options["--key"] = generate_key(options)
+ 
+-	if options["--key"] == "0" or not options["--key"]:
+-		fail_usage("Failed: key cannot be 0", stop_after_error)
++		if options["--key"] == "0" or not options["--key"]:
++			fail_usage("Failed: key cannot be 0", stop_after_error)
+ 
+ 	if "--key-value" in options\
+ 	and (options["--key-value"] != "id" and options["--key-value"] != "hash"):
diff --git a/SPECS/fence-agents.spec b/SPECS/fence-agents.spec
index 091209f..f5dfce6 100644
--- a/SPECS/fence-agents.spec
+++ b/SPECS/fence-agents.spec
@@ -87,7 +87,7 @@
 Name: fence-agents
 Summary: Set of unified programs capable of host isolation ("fencing")
 Version: 4.2.1
-Release: 103%{?alphatag:.%{alphatag}}%{?dist}
+Release: 112%{?alphatag:.%{alphatag}}%{?dist}
 License: GPLv2+ and LGPLv2+
 Group: System Environment/Base
 URL: https://github.com/ClusterLabs/fence-agents
@@ -259,6 +259,14 @@ Patch116: bz2072421-2-fence_zvmip-connect-error.patch
 Patch117: bz2091826-fence_ibm_vpc-add-proxy-support.patch
 Patch118: bz2092921-fence_ibm_powervs-proxy-private-api-servers.patch
 Patch119: bz1886074-4-fencing-source_env-dont-process-empty-lines.patch
+Patch120: bz1787178-1-fence_vmware_soap-set-timeout-cleanup-tmp-dirs.patch
+Patch121: bz1787178-2-fence_vmware_soap-login-timeout-15s.patch
+Patch122: bz2102024-fence_ibm_vpc-add-token-cache-support.patch
+Patch123: bz2134017-fence_lpar-only-output-additional-info-on-debug.patch
+Patch124: bz2136076-fence_ibm_powervs-improve-defaults.patch
+Patch125: bz2160478-fence_scsi-fix-validate-all.patch
+Patch126: bz2152105-fencing-1-add-plug_separator.patch
+Patch127: bz2152105-fencing-2-update-DEPENDENCY_OPT.patch
 
 %if 0%{?fedora} || 0%{?rhel} > 7
 %global supportedagents amt_ws apc apc_snmp bladecenter brocade cisco_mds cisco_ucs compute drac5 eaton_snmp emerson eps evacuate hds_cb hpblade ibmblade ibm_powervs ibm_vpc ifmib ilo ilo_moonshot ilo_mp ilo_ssh intelmodular ipdu ipmilan kdump kubevirt lpar mpath redfish rhevm rsa rsb sbd scsi vmware_rest vmware_soap wti
@@ -456,6 +464,14 @@ BuildRequires: python3-google-api-client python3-pip python3-wheel python3-jinja
 %patch117 -p1
 %patch118 -p1
 %patch119 -p1
+%patch120 -p1
+%patch121 -p1
+%patch122 -p1 -F2
+%patch123 -p1
+%patch124 -p1
+%patch125 -p1
+%patch126 -p1
+%patch127 -p1
 
 # prevent compilation of something that won't get used anyway
 sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac
@@ -488,7 +504,13 @@ cp %{aliyunsdkvpc_dir}/README.rst %{aliyunsdkvpc}_README.rst
 
 %build
 ./autogen.sh
-%{configure} PYTHON="%{__python3}" --with-agents='%{supportedagents} %{testagents}'
+%{configure} PYTHON="%{__python3}" \
+%if %{defined _tmpfilesdir}
+	SYSTEMD_TMPFILES_DIR=%{_tmpfilesdir} \
+	--with-fencetmpdir=/run/fence-agents \
+%endif
+	--with-agents='%{supportedagents} %{testagents}'
+
 CFLAGS="$(echo '%{optflags}')" make %{_smp_mflags}
 
 %ifarch x86_64
@@ -599,6 +621,14 @@ This package contains support files including the Python fencing library.
 %exclude %{_datadir}/cluster/fence_scsi_check*
 %exclude %{_sbindir}/*
 %exclude %{_mandir}/man8/*
+%if %{defined _tmpfilesdir}
+%{_tmpfilesdir}/%{name}.conf
+%endif
+%if %{defined _tmpfilesdir}
+%dir %attr (1755, root, root)	/run/%{name}
+%else
+%dir %attr (1755, root, root)	%{_var}/run/%{name}
+%endif
 
 %package all
 License: GPLv2+ and LGPLv2+ and ASL 2.0
@@ -1439,6 +1469,32 @@ Fence agent for IBM z/VM over IP.
 %endif
 
 %changelog
+* Thu Jan 26 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-112
+- fence_vmware_soap: set login_timeout lower than default
+  pcmk_monitor_timeout (20s) to remove tmp dirs
+  Resolves: rhbz#1787178
+
+* Wed Jan 25 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-111
+- fencing/fence_wti: add --plug-separator to be able to avoid
+  characters that are in node name(s)
+  Resolves: rhbz#2152105
+
+* Fri Jan 13 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-110
+- fence_scsi: skip key generation during validate-all action
+  Resolves: rhbz#2160478
+
+* Thu Oct 27 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-108
+- fence_ibm_powervs: improve defaults
+  Resolves: rhbz#2136076
+
+* Wed Oct 12 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-107
+- fence_lpar: only output additional output info on DEBUG level
+  Resolves: rhbz#2134017
+
+* Mon Sep  5 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-106
+- fence_ibm_vpc: add token cache support
+  Resolves: rhbz#2102024
+
 * Tue Aug 16 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-103
 - fence_openstack: new fence agent
   Resolves: rhbz#1886074