- fence_ibm_powervs: performance improvements
Resolves: rhbz#2155453
This commit is contained in:
parent
acc7086b1d
commit
8a918a13d7
150
bz2155453-fence_ibm_powervs-performance-improvements.patch
Normal file
150
bz2155453-fence_ibm_powervs-performance-improvements.patch
Normal file
@ -0,0 +1,150 @@
|
||||
From 22935608247816be0ccec85fc590f19b509f3614 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schauberer <74912604+andscha@users.noreply.github.com>
|
||||
Date: Thu, 15 Jun 2023 16:34:13 +0200
|
||||
Subject: [PATCH 1/3] fence_ibm_powervs: improved performance
|
||||
|
||||
fence_ibm_powervs: improved performance
|
||||
- improved performance using less power-iaas.cloud.ibm.com API calls
|
||||
- add support for reboot_cycle, method to fence (onoff|cycle) (Default: onoff)
|
||||
|
||||
Addressed comments by oalbrigt in ClusterLabs #PR542
|
||||
- you can use if options["--verbose-level"] > 1: to only print it when -vv or more or verbose_level is set to 2 or higher.
|
||||
- Removed all_opt["method"] defaults
|
||||
---
|
||||
agents/ibm_powervs/fence_ibm_powervs.py | 70 ++++++++++++++++++-------
|
||||
1 file changed, 51 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/agents/ibm_powervs/fence_ibm_powervs.py b/agents/ibm_powervs/fence_ibm_powervs.py
|
||||
index 183893616..e65462cb9 100755
|
||||
--- a/agents/ibm_powervs/fence_ibm_powervs.py
|
||||
+++ b/agents/ibm_powervs/fence_ibm_powervs.py
|
||||
@@ -12,6 +12,8 @@
|
||||
state = {
|
||||
"ACTIVE": "on",
|
||||
"SHUTOFF": "off",
|
||||
+ "HARD_REBOOT": "on",
|
||||
+ "SOFT_REBOOT": "on",
|
||||
"ERROR": "unknown"
|
||||
}
|
||||
|
||||
@@ -37,21 +39,30 @@ def get_list(conn, options):
|
||||
return outlets
|
||||
|
||||
for r in res["pvmInstances"]:
|
||||
- if "--verbose" in options:
|
||||
+ if options["--verbose-level"] > 1:
|
||||
logging.debug(json.dumps(r, indent=2))
|
||||
outlets[r["pvmInstanceID"]] = (r["serverName"], state[r["status"]])
|
||||
|
||||
return outlets
|
||||
|
||||
def get_power_status(conn, options):
|
||||
+ outlets = {}
|
||||
+ logging.debug("Info: getting power status for LPAR " + options["--plug"] + " instance " + options["--instance"])
|
||||
try:
|
||||
command = "cloud-instances/{}/pvm-instances/{}".format(
|
||||
options["--instance"], options["--plug"])
|
||||
res = send_command(conn, command)
|
||||
- result = get_list(conn, options)[options["--plug"]][1]
|
||||
+ outlets[res["pvmInstanceID"]] = (res["serverName"], state[res["status"]])
|
||||
+ if options["--verbose-level"] > 1:
|
||||
+ logging.debug(json.dumps(res, indent=2))
|
||||
+ result = outlets[options["--plug"]][1]
|
||||
+ logging.debug("Info: Status: {}".format(result))
|
||||
except KeyError as e:
|
||||
- logging.debug("Failed: Unable to get status for {}".format(e))
|
||||
- fail(EC_STATUS)
|
||||
+ try:
|
||||
+ result = get_list(conn, options)[options["--plug"]][1]
|
||||
+ except KeyError as ex:
|
||||
+ logging.debug("Failed: Unable to get status for {}".format(ex))
|
||||
+ fail(EC_STATUS)
|
||||
|
||||
return result
|
||||
|
||||
@@ -61,6 +72,7 @@ def set_power_status(conn, options):
|
||||
"off" : '{"action" : "immediate-shutdown"}',
|
||||
}[options["--action"]]
|
||||
|
||||
+ logging.debug("Info: set power status to " + options["--action"] + " for LPAR " + options["--plug"] + " instance " + options["--instance"])
|
||||
try:
|
||||
send_command(conn, "cloud-instances/{}/pvm-instances/{}/action".format(
|
||||
options["--instance"], options["--plug"]), "POST", action)
|
||||
@@ -68,6 +80,25 @@ def set_power_status(conn, options):
|
||||
logging.debug("Failed: Unable to set power to {} for {}".format(options["--action"], e))
|
||||
fail(EC_STATUS)
|
||||
|
||||
+def reboot_cycle(conn, options):
|
||||
+ action = {
|
||||
+ "reboot" : '{"action" : "hard-reboot"}',
|
||||
+ }[options["--action"]]
|
||||
+
|
||||
+ logging.debug("Info: start reboot cycle with action " + options["--action"] + " for LPAR " + options["--plug"] + " instance " + options["--instance"])
|
||||
+ try:
|
||||
+ send_command(conn, "cloud-instances/{}/pvm-instances/{}/action".format(
|
||||
+ options["--instance"], options["--plug"]), "POST", action)
|
||||
+ except Exception as e:
|
||||
+ result = get_power_status(conn, options)
|
||||
+ logging.debug("Info: Status {}".format(result))
|
||||
+ if result == "off":
|
||||
+ return True
|
||||
+ else:
|
||||
+ logging.debug("Failed: Unable to cycle with {} for {}".format(options["--action"], e))
|
||||
+ fail(EC_STATUS)
|
||||
+ return True
|
||||
+
|
||||
def connect(opt, token):
|
||||
conn = pycurl.Curl()
|
||||
|
||||
@@ -200,21 +231,21 @@ def define_new_opts():
|
||||
"order" : 0
|
||||
}
|
||||
all_opt["api-type"] = {
|
||||
- "getopt" : ":",
|
||||
- "longopt" : "api-type",
|
||||
- "help" : "--api-type=[public|private] API-type: 'public' (default) or 'private'",
|
||||
- "required" : "0",
|
||||
- "shortdesc" : "API-type (public|private)",
|
||||
- "order" : 0
|
||||
- }
|
||||
+ "getopt" : ":",
|
||||
+ "longopt" : "api-type",
|
||||
+ "help" : "--api-type=[public|private] API-type: 'public' (default) or 'private'",
|
||||
+ "required" : "0",
|
||||
+ "shortdesc" : "API-type (public|private)",
|
||||
+ "order" : 0
|
||||
+ }
|
||||
all_opt["proxy"] = {
|
||||
- "getopt" : ":",
|
||||
- "longopt" : "proxy",
|
||||
- "help" : "--proxy=[http://<URL>:<PORT>] Proxy: 'http://<URL>:<PORT>'",
|
||||
- "required" : "0",
|
||||
- "shortdesc" : "Network proxy",
|
||||
- "order" : 0
|
||||
- }
|
||||
+ "getopt" : ":",
|
||||
+ "longopt" : "proxy",
|
||||
+ "help" : "--proxy=[http://<URL>:<PORT>] Proxy: 'http://<URL>:<PORT>'",
|
||||
+ "required" : "0",
|
||||
+ "shortdesc" : "Network proxy",
|
||||
+ "order" : 0
|
||||
+ }
|
||||
|
||||
|
||||
def main():
|
||||
@@ -227,6 +258,7 @@ def main():
|
||||
"proxy",
|
||||
"port",
|
||||
"no_password",
|
||||
+ "method",
|
||||
]
|
||||
|
||||
atexit.register(atexit_handler)
|
||||
@@ -259,7 +291,7 @@ def main():
|
||||
conn = connect(options, token)
|
||||
atexit.register(disconnect, conn)
|
||||
|
||||
- result = fence_action(conn, options, set_power_status, get_power_status, get_list)
|
||||
+ result = fence_action(conn, options, set_power_status, get_power_status, get_list, reboot_cycle)
|
||||
|
||||
sys.exit(result)
|
@ -87,7 +87,7 @@
|
||||
Name: fence-agents
|
||||
Summary: Set of unified programs capable of host isolation ("fencing")
|
||||
Version: 4.2.1
|
||||
Release: 118%{?alphatag:.%{alphatag}}%{?dist}
|
||||
Release: 119%{?alphatag:.%{alphatag}}%{?dist}
|
||||
License: GPLv2+ and LGPLv2+
|
||||
Group: System Environment/Base
|
||||
URL: https://github.com/ClusterLabs/fence-agents
|
||||
@ -273,6 +273,7 @@ Patch130: bz2187329-fence_scsi-1-detect-devices-in-shared-vgs.patch
|
||||
Patch131: bz2187329-fence_scsi-2-support-space-separated-devices.patch
|
||||
Patch132: bz2211460-fence_azure-arm-1-stack-hub-support.patch
|
||||
Patch133: bz2211460-fence_azure-arm-2-metadata-endpoint-error-message.patch
|
||||
Patch134: bz2155453-fence_ibm_powervs-performance-improvements.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
|
||||
@ -484,6 +485,7 @@ BuildRequires: python3-google-api-client python3-pip python3-wheel python3-jinja
|
||||
%patch131 -p1
|
||||
%patch132 -p1
|
||||
%patch133 -p1
|
||||
%patch134 -p1
|
||||
|
||||
# prevent compilation of something that won't get used anyway
|
||||
sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac
|
||||
@ -1481,6 +1483,10 @@ Fence agent for IBM z/VM over IP.
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Jul 11 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-119
|
||||
- fence_ibm_powervs: performance improvements
|
||||
Resolves: rhbz#2155453
|
||||
|
||||
* Mon Jul 3 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-118
|
||||
- fence_azure_arm: add Stack Hub support
|
||||
Resolves: rhbz#2211460
|
||||
|
Loading…
Reference in New Issue
Block a user