fence-agents/RHEL-109814-1-fence_aws-add-skipshutdown-parameter.patch
Oyvind Albrigtsen d96e9a88fd - fence_aws: add skip_os_shutdown parameter
Resolves: RHEL-109814
2025-08-21 09:21:29 +02:00

93 lines
3.7 KiB
Diff

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 @@
import requests
import boto3
from requests import HTTPError
-from botocore.exceptions import ConnectionError, ClientError, EndpointConnectionError, NoRegionError
+from botocore.exceptions import ConnectionError, ClientError, EndpointConnectionError, NoRegionError, ParamValidationError
logger = logging.getLogger()
logger.propagate = False
@@ -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
<content type="boolean" />
<shortdesc lang="en">Skip race condition check</shortdesc>
</parameter>
+ <parameter name="skip_os_shutdown" unique="0" required="0">
+ <getopt mixed="--skip-os-shutdown=[true|false]" />
+ <content type="string" default="false" />
+ <shortdesc lang="en">Use SkipOsShutdown flag to stop the EC2 instance</shortdesc>
+ </parameter>
<parameter name="quiet" unique="0" required="0">
<getopt mixed="-q, --quiet" />
<content type="boolean" />