diff --git a/.fence-agents.metadata b/.fence-agents.metadata
index f960a48..56c2199 100644
--- a/.fence-agents.metadata
+++ b/.fence-agents.metadata
@@ -13,8 +13,8 @@ bda476965c380701795849179ed91e9d8134ec7c SOURCES/aliyun-python-sdk-core-2.11.5.t
838eaf93a9cd4dfd3c87a342ee7691cf799b2df2 SOURCES/azure_mgmt_compute-34.0.0.tar.gz
adc0e3e2d5b126174273efcc40a5e6fc8fe8a8ff SOURCES/azure_mgmt_core-1.5.0.tar.gz
f70832bb6367a31808c22849ae2932dae9b17df0 SOURCES/azure_mgmt_network-28.1.0.tar.gz
-6591882be0937b2b900eab4ec70feadf34f71738 SOURCES/boto3-1.17.102-py2.py3-none-any.whl
-22507f43314ccb2dd203337e87ffafb385ba3627 SOURCES/botocore-1.20.102-py2.py3-none-any.whl
+18167d84640a4522ee23f6c115c208e09c852bb0 SOURCES/boto3-1.40.13.tar.gz
+0d393b17c1d023ab145ba0d06c7a292710291213 SOURCES/botocore-1.40.13.tar.gz
c953dcd6e69587e5b182d77255ed836172fea70a SOURCES/cachetools-4.2.2-py3-none-any.whl
0d12f48faa727f0979e9ad5c4c80dfa32b73caff SOURCES/cachetools-4.2.4.tar.gz
ec7e8dd8ef95edfdb83a1ea040b8b88507b47615 SOURCES/certifi-2023.7.22.tar.gz
@@ -77,7 +77,7 @@ c0d5be2edf538122d35fe06c29d2d7a5f22f3117 SOURCES/rsa-4.7.2-py3-none-any.whl
e8a53067e03fe1b6682fd99a40a7359396a06daa SOURCES/rsa-4.7.2.tar.gz
d1011ff44cd5a045de0460c1b79ec65592e86860 SOURCES/ruamel.yaml-0.17.16.tar.gz
27de97227bbbde5a9f571f9fad223578d7bdf7cc SOURCES/ruamel.yaml.clib-0.2.6.tar.gz
-d7eb0ced8b9f12005ad6f13035689d5611f8a81a SOURCES/s3transfer-0.4.2-py2.py3-none-any.whl
+cba8cc24b8a0dc50f1ef763ad029fa95bfbb3f88 SOURCES/s3transfer-0.13.1.tar.gz
fc3caa7370e18be4c0ca4703f813df1ca4a6b7ad SOURCES/setuptools-80.9.0.tar.gz
749fa3bff5be78c80ac6d6d313c38c73d679542c SOURCES/setuptools_scm-8.1.0.tar.gz
06fa0bb50f2a4e2917fd14c21e9d2d5508ce0163 SOURCES/six-1.16.0.tar.gz
diff --git a/.gitignore b/.gitignore
index 1fa8dd3..dae6134 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,8 +13,8 @@ SOURCES/azure_identity-1.19.0.tar.gz
SOURCES/azure_mgmt_compute-34.0.0.tar.gz
SOURCES/azure_mgmt_core-1.5.0.tar.gz
SOURCES/azure_mgmt_network-28.1.0.tar.gz
-SOURCES/boto3-1.17.102-py2.py3-none-any.whl
-SOURCES/botocore-1.20.102-py2.py3-none-any.whl
+SOURCES/boto3-1.40.13.tar.gz
+SOURCES/botocore-1.40.13.tar.gz
SOURCES/cachetools-4.2.2-py3-none-any.whl
SOURCES/cachetools-4.2.4.tar.gz
SOURCES/certifi-2023.7.22.tar.gz
@@ -77,7 +77,7 @@ SOURCES/rsa-4.7.2-py3-none-any.whl
SOURCES/rsa-4.7.2.tar.gz
SOURCES/ruamel.yaml-0.17.16.tar.gz
SOURCES/ruamel.yaml.clib-0.2.6.tar.gz
-SOURCES/s3transfer-0.4.2-py2.py3-none-any.whl
+SOURCES/s3transfer-0.13.1.tar.gz
SOURCES/setuptools-80.9.0.tar.gz
SOURCES/setuptools_scm-8.1.0.tar.gz
SOURCES/six-1.16.0.tar.gz
diff --git a/SOURCES/RHEL-109923-fence_aws-add-skipshutdown-parameter.patch b/SOURCES/RHEL-109923-fence_aws-add-skipshutdown-parameter.patch
new file mode 100644
index 0000000..747b97e
--- /dev/null
+++ b/SOURCES/RHEL-109923-fence_aws-add-skipshutdown-parameter.patch
@@ -0,0 +1,92 @@
+From 5cf006ffa3a948ccded3a55c15669f1d5efef5f5 Mon Sep 17 00:00:00 2001
+From: gguifelixamz <45173771+gguifelixamz@users.noreply.github.com>
+Date: Tue, 19 Aug 2025 02:04:53 -0700
+Subject: [PATCH] fence_aws: Add new skip_os_shutdown flag (#632)
+
+---
+ agents/aws/fence_aws.py | 29 ++++++++++++++++++++++++++---
+ tests/data/metadata/fence_aws.xml | 5 +++++
+ 2 files changed, 31 insertions(+), 3 deletions(-)
+
+diff --git a/agents/aws/fence_aws.py b/agents/aws/fence_aws.py
+index 5459a06c4..cddca4580 100644
+--- a/agents/aws/fence_aws.py
++++ b/agents/aws/fence_aws.py
+@@ -12,7 +12,7 @@
+
+ try:
+ import boto3
+- from botocore.exceptions import ConnectionError, ClientError, EndpointConnectionError, NoRegionError
++ from botocore.exceptions import ConnectionError, ClientError, EndpointConnectionError, NoRegionError, ParamValidationError
+ except ImportError:
+ pass
+
+@@ -120,14 +120,28 @@ def get_self_power_status(conn, instance_id):
+ def set_power_status(conn, options):
+ my_instance = get_instance_id(options)
+ try:
++ if options.get("--skip-os-shutdown", "false").lower() in ["1", "yes", "on", "true"]:
++ shutdown_option = {
++ "SkipOsShutdown": True,
++ "Force": True
++ }
++ else:
++ shutdown_option = {
++ "SkipOsShutdown": False,
++ "Force": True
++ }
+ if (options["--action"]=="off"):
+ if "--skip-race-check" in options or get_self_power_status(conn,my_instance) == "ok":
+- conn.instances.filter(InstanceIds=[options["--plug"]]).stop(Force=True)
++ conn.instances.filter(InstanceIds=[options["--plug"]]).stop(**shutdown_option)
+ logger.debug("Called StopInstance API call for %s", options["--plug"])
+ else:
+ logger.debug("Skipping fencing as instance is not in running status")
+ elif (options["--action"]=="on"):
+ conn.instances.filter(InstanceIds=[options["--plug"]]).start()
++ except ParamValidationError:
++ if (options["--action"] == "off"):
++ logger.warning(f"SkipOsShutdown not supported with the current boto3 version {boto3.__version__} - falling back to graceful shutdown")
++ conn.instances.filter(InstanceIds=[options["--plug"]]).stop(Force=True)
+ except Exception as e:
+ logger.debug("Failed to power %s %s: %s", \
+ options["--action"], options["--plug"], e)
+@@ -183,12 +197,21 @@ def define_new_opts():
+ "required": "0",
+ "order": 7
+ }
++ all_opt["skip_os_shutdown"] = {
++ "getopt" : ":",
++ "longopt" : "skip-os-shutdown",
++ "help" : "--skip-os-shutdown=[true|false] Uses SkipOsShutdown flag",
++ "shortdesc" : "Use SkipOsShutdown flag to stop the EC2 instance",
++ "required" : "0",
++ "default" : "false",
++ "order" : 8
++ }
+
+ # Main agent method
+ def main():
+ conn = None
+
+- device_opt = ["port", "no_password", "region", "access_key", "secret_key", "filter", "boto3_debug", "skip_race_check"]
++ device_opt = ["port", "no_password", "region", "access_key", "secret_key", "filter", "boto3_debug", "skip_race_check", "skip_os_shutdown"]
+
+ atexit.register(atexit_handler)
+
+diff --git a/tests/data/metadata/fence_aws.xml b/tests/data/metadata/fence_aws.xml
+index ad471c797..c53873bbe 100644
+--- a/tests/data/metadata/fence_aws.xml
++++ b/tests/data/metadata/fence_aws.xml
+@@ -51,6 +51,11 @@ For instructions see: https://boto3.readthedocs.io/en/latest/guide/quickstart.ht
+
+ Skip race condition check
+
++
++
++
++ Use SkipOsShutdown flag to stop the EC2 instance
++
+
+
+
diff --git a/SOURCES/RHEL-96183-fence_kubevirt-force-off.patch b/SOURCES/RHEL-96183-fence_kubevirt-force-off.patch
new file mode 100644
index 0000000..ac2e281
--- /dev/null
+++ b/SOURCES/RHEL-96183-fence_kubevirt-force-off.patch
@@ -0,0 +1,23 @@
+From b6e05c57a73e5d9bdde7d133ba7ec43737a7c6b7 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen
+Date: Tue, 25 Feb 2025 16:11:32 +0100
+Subject: [PATCH] fence_kubevirt: set grace_period_seconds=0 to immediately
+ power off the node
+
+---
+ agents/kubevirt/fence_kubevirt.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agents/kubevirt/fence_kubevirt.py b/agents/kubevirt/fence_kubevirt.py
+index e3817b0fb..8ba8ce8db 100755
+--- a/agents/kubevirt/fence_kubevirt.py
++++ b/agents/kubevirt/fence_kubevirt.py
+@@ -108,7 +108,7 @@ def define_new_opts():
+ def virtctl_vm_action(conn, action, namespace, name, apiversion):
+ path = '/apis/subresources.{api_version}/namespaces/{namespace}/virtualmachines/{name}/{action}'
+ path = path.format(api_version=apiversion, namespace=namespace, name=name, action=action)
+- return conn.request('put', path, header_params={'accept': '*/*'})
++ return conn.request('put', path, header_params={'accept': '*/*'}, body={'gracePeriod': 0} if action == 'stop' else None)
+
+ # Main agent method
+ def main():
diff --git a/SPECS/fence-agents.spec b/SPECS/fence-agents.spec
index c2648a6..103b481 100644
--- a/SPECS/fence-agents.spec
+++ b/SPECS/fence-agents.spec
@@ -57,7 +57,7 @@
Name: fence-agents
Summary: Set of unified programs capable of host isolation ("fencing")
Version: 4.10.0
-Release: 86%{?alphatag:.%{alphatag}}%{?dist}.9
+Release: 86%{?alphatag:.%{alphatag}}%{?dist}.11
License: GPLv2+ and LGPLv2+
URL: https://github.com/ClusterLabs/fence-agents
Source0: https://fedorahosted.org/releases/f/e/fence-agents/%{name}-%{version}.tar.gz
@@ -90,10 +90,10 @@ Source2001: aliyun-openapi-meta-5cf98b660.tar.gz
## go mod vendor
Source2002: aliyun-cli-go-vendor.tar.gz
# aws
-Source1007: boto3-1.17.102-py2.py3-none-any.whl
-Source1008: botocore-1.20.102-py2.py3-none-any.whl
+Source1007: boto3-1.40.13.tar.gz
+Source1008: botocore-1.40.13.tar.gz
Source1009: python_%{dateutil}-%{dateutil_version}-py2.py3-none-any.whl
-Source1010: s3transfer-0.4.2-py2.py3-none-any.whl
+Source1010: s3transfer-0.13.1.tar.gz
Source1011: %{urllib3}-%{urllib3_version}.tar.gz
# azure
Source1012: adal-1.2.7.tar.gz
@@ -248,6 +248,8 @@ Patch63: RHEL-83488-fence_ibm_vpc-refresh-bearer-token.patch
Patch64: RHEL-92695-1-fence_sbd-improve-error-handling.patch
Patch65: RHEL-92695-2-fence_sbd-get-devices-from-SBD_DEVICE-if-devices-parameter-isnt-set.patch
Patch66: RHEL-107529-fence_ibm_vpc-add-apikey-file-support.patch
+Patch67: RHEL-109923-fence_aws-add-skipshutdown-parameter.patch
+Patch68: RHEL-96183-fence_kubevirt-force-off.patch
### HA support libs/utils ###
# all archs
@@ -436,6 +438,8 @@ BuildRequires: %{systemd_units}
%patch -p1 -P 64
%patch -p1 -P 65
%patch -p1 -P 66
+%patch -p1 -P 67 -F2
+%patch -p1 -P 68
# prevent compilation of something that won't get used anyway
sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac
@@ -634,10 +638,10 @@ Provides: bundled(python-pycparser) = 2.20
Provides: bundled(aliyun-cli) = 3.0.198
Provides: bundled(aliyun-openapi-meta) = 5cf98b660
# aws
-Provides: bundled(python-boto3) = 1.17.102
-Provides: bundled(python-botocore) = 1.20.102
+Provides: bundled(python-boto3) = 1.40.13
+Provides: bundled(python-botocore) = 1.40.13
Provides: bundled(python-%{dateutil}) = %{dateutil_version}
-Provides: bundled(python-s3transfer) = 0.4.2
+Provides: bundled(python-s3transfer) = 0.13.1
Provides: bundled(python-urllib3) = 1.26.18
# azure
Provides: bundled(python-adal) = 1.2.7
@@ -1543,6 +1547,14 @@ are located on corosync cluster nodes.
%endif
%changelog
+* Thu Sep 11 2025 Oyvind Albrigtsen - 4.10.0-86.11
+- fence_kubevirt: use hard poweroff
+ Resolves: RHEL-96183
+
+* Tue Aug 19 2025 Oyvind Albrigtsen - 4.10.0-86.10
+- fence_aws: add "skip_os_shutdown" parameter to allow hard poweroff
+ Resolves: RHEL-109923
+
* Tue Aug 12 2025 Oyvind Albrigtsen - 4.10.0-86.9
- fence_ibm_vpc: add apikey file support
Resolves: RHEL-107529