diff --git a/backport-doc-add-fa-dev-guide-to-README.patch b/backport-doc-add-fa-dev-guide-to-README.patch new file mode 100644 index 0000000000000000000000000000000000000000..36b2b837d83a30bca51fb3e2b899571e3ddc2827 --- /dev/null +++ b/backport-doc-add-fa-dev-guide-to-README.patch @@ -0,0 +1,26 @@ +From 304ff12942166e914444fec9b3dc8b3fd4adf3b9 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Thu, 13 Jul 2023 16:53:50 +0200 +Subject: [PATCH 19/46] doc: add fa-dev-guide to README + +--- + README.md | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/README.md b/README.md +index 0f3ebbde..30861d22 100644 +--- a/README.md ++++ b/README.md +@@ -19,7 +19,8 @@ for further development. Creating or modifying a new fence agent should be quite + ## Where can I find more information? + + * [ClusterLabs website](http://www.clusterlabs.org/) +-* [User and developer documentation](https://github.com/ClusterLabs/fence-agents/tree/master/doc/FenceAgentAPI.md) ++* [Fence Agent Developer's Guide](https://github.com/ClusterLabs/fence-agents/tree/main/doc/fa-dev-guide.md) ++* [User and developer documentation](https://github.com/ClusterLabs/fence-agents/tree/main/doc/FenceAgentAPI.md) + * Mailing lists for [users](http://oss.clusterlabs.org/mailman/listinfo/users) and + [developers](http://oss.clusterlabs.org/mailman/listinfo/developers) + * #clusterlabs IRC channel on [freenode](http://freenode.net/) +-- +2.25.1 + diff --git a/backport-doc-add-fa-dev-guide.patch b/backport-doc-add-fa-dev-guide.patch new file mode 100644 index 0000000000000000000000000000000000000000..b1256790a1e12b5ab51db2f3e88ec00b7df976c0 --- /dev/null +++ b/backport-doc-add-fa-dev-guide.patch @@ -0,0 +1,233 @@ +From aa7522a3d6e47694957dc7993558a71229fee735 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Thu, 13 Jul 2023 13:42:59 +0200 +Subject: [PATCH 18/46] doc: add fa-dev-guide + +--- + doc/fa-dev-guide.md | 214 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 214 insertions(+) + create mode 100644 doc/fa-dev-guide.md + +diff --git a/doc/fa-dev-guide.md b/doc/fa-dev-guide.md +new file mode 100644 +index 00000000..6c888dbd +--- /dev/null ++++ b/doc/fa-dev-guide.md +@@ -0,0 +1,214 @@ ++# Fence Agent Developer's Guide ++ ++## Base on current agent ++The easiest way to get started is by starting with an existing agent and remove most of the code in set set_power_status(), get_power_status(), and get_list() and then update the connection and main() code. ++ ++Good choices for existing agents to use as base for new agents: ++- fence_vmware_rest for REST API ++- fence_ilo for other HTTP(S) APIs ++- fence_ilo_ssh for SSH ++- fence_ipmilan for command tools ++- fence_aws/fence_azure (does imports in separate library)/fence_gce for external libraries ++ ++ ++## git ++### Add agent ++- Go to and click Fork to create your own Fork. ++ ++``` ++git clone https://github.com//fence-agents ++git remote add upstream https://github.com/ClusterLabs/fence-agents ++git checkout -b fence_-new-fence-agent ++ ++mkdir agents/ ++vim agents//fence_.py ++ ++# add %package/%description/%files sections for agent in spec-file ++vim fence-agents.spec.in ++ ++./autogen.sh && ./configure ++make xml-upload ++make xml-check ++# make check # optional - runs delay-check (verifies that the agents work correctly with the delay parameter) and xml-check ++ ++git add agents//fence_.py ++git commit -a -c "fence_: new fence agent" ++git push ++``` ++ ++- Click link and create Pull Request. ++ ++ ++### Improve code/add feature/fix bugs in agent or library ++- Run `git log` to see examples of comments to use with -c (or skip -c to enter it in an editor). ++ ++``` ++git checkout main ++git fetch --all ++git rebase upstream/main ++git checkout -b fence_-fix- ++ ++vim agents//fence_.py ++ ++git commit -a -c "fence_: fix " ++git push ++``` ++ ++- Click link and create Pull Request. ++ ++ ++## Development ++### Import libraries/add state dictionary ++To develop you need to import the fencing library and some generic libraries, and define expected values for power states that will be translated translated to "on", "off", or "error". ++ ++The state dictionary contains translations from expected values from the fence device and their corresponding value in fencing (on/off/error). ++ ++Example: ++``` ++import sys ++import atexit ++import logging ++sys.path.append("@FENCEAGENTSLIBDIR@") ++from fencing import * ++from fencing import fail, run_delay, EC_LOGIN_DENIED, EC_STATUS ++ ++state = {"POWERED_ON": "on", 'POWERED_OFF': "off", 'SUSPENDED': "off"} ++``` ++ ++***only import used functions/return values from the fencing library in the 2nd `from fencing import` line*** ++ ++### Logging and failing ++Use logging.error(), logging.warn(), logging.debug(), and logging.info() to log output. ++- logging.info() should only be used when needed to avoid spamming the logs. ++- logging.debug() is good for debugging (shown when you use -v or set verbose=1). ++- `if options["--verbose-level"] > 1:` can be used to only print additional logging.debug() messages when -vv (or more v's) or verbose=2 or higher. ++ ++Use `fail()` or `fail_usage("Failed: ")` to exit with error-code or log Failed: with generic error code. ++- EC_* error codes can be imported from the fencing library:\ ++ ++ ++### get_power_status() / set_power_status() / get_list() ++- These functions defines the code to get or set status, and get list of nodes, which are run by the fencing library to turn off/on nodes or get a list of nodes available. ++ ++``` ++def get_power_status(conn, options): ++ # code to get power status ++ result = ... ++ return state[result] ++ ++def set_power_status(conn, options): ++ action = { ++ "on" : "start", ++ "off" : "stop" ++ }[options["--action"]] ++ ++ try: ++ # code to set power status. use "action" variable, which translates on and off to the equivalent command that the device expects ++ except Exception as e: ++ logging.debug("Failed: {}".format(e)) ++ fail(EC_STATUS) ++ ++def get_list(conn, options): ++ outlets = {} ++ ++ # code to get node list ++ ++ for r in res["value"]: ++ outlets[r["name"]] = ("", state[r["power_state"]]) ++ ++ return outlets ++``` ++ ++### define_new_opts() ++Specifies device specific parameters with defaults. ++- getopt is ":" for parameters that require a value and "" for parameters that get set without a value (e.g. -v) ++- do not use short short opts (e.g. "a:" or "a") as they are reserved for the fencing library ++- set required to 1 if the parameter is required (except for -o metadata or -h/--help) ++- Use `if "--" in options:` to check value-less parameters like --verbose and `if options.get("--") == "":` to check the value of parameters. ++ ++``` ++def define_new_opts(): ++ all_opt["api_path"] = { ++ "getopt" : ":", ++ "longopt" : "api-path", ++ "help" : "--api-path=[path] The path part of the API URL", ++ "default" : "/rest", ++ "required" : "0", ++ "shortdesc" : "The path part of the API URL", ++ "order" : 2} ++ all_opt["filter"] = { ++ "getopt" : ":", ++ "longopt" : "filter", ++ "help" : "--filter=[filter] Filter to only return relevant VMs" ++ " (e.g. \"filter.names=node1&filter.names=node2\").", ++ "required" : "0", ++ "shortdesc" : "Filter to only return relevant VMs. It can be used to avoid " ++ "the agent failing when more than 1000 VMs should be returned.", ++ "order" : 2} ++``` ++ ++### main() ++Defines parameters and general logic to show docs (when requested), or run specific fence action. ++- device_opt[] is a list of parameters to be used from the fencing library ++- define_new_opts() adds the device specific parameters defined above ++- all_opt["parameter"]["default"] allows you to override the default value for ++ parameters from the fencing library ++- options = check_input(device_opt, process_input(device_opt)) processes all the parameters ++ and checks that they are of the expected type ++- docs["shortdesc"] / docs["longdesc"] allows settings short and long description for metadata/help text (-h) ++- show_docs(options, docs) prints metadata or help text depending on whether you specify -o metadata or -h ++- run_delay(options) delays the fencing agent --delay=/delay= seconds when set ++- conn = connect(options) specifies function to call, and registers the connection as conn ++- atexit.register(disconnect, conn) tells the agent to run disconnect(conn) when it exits (e.g. timeouts or fails) ++- result = fence_action(conn, options, set_power_status, get_power_status, get_list) run set_power_status(), ++ get_power_status(), or get_list() depending on which action (-o) was specified ++- sys.exit(result) return return code from function run by fence_action() ++ ++``` ++def main(): ++ device_opt = [ ++ "ipaddr", ++ "api_path", ++ "login", ++ "passwd", ++ "ssl", ++ "notls", ++ "web", ++ "port", ++ "filter", ++ ] ++ ++ atexit.register(atexit_handler) ++ define_new_opts() ++ ++ all_opt["shell_timeout"]["default"] = "5" ++ all_opt["power_wait"]["default"] = "1" ++ ++ options = check_input(device_opt, process_input(device_opt)) ++ ++ docs = {} ++ docs["shortdesc"] = "Fence agent for VMware REST API" ++ docs["longdesc"] = """fence_vmware_rest is an I/O Fencing agent which can be \ ++used with VMware API to fence virtual machines. ++ ++NOTE: If there's more than 1000 VMs there is a filter parameter to work around \ ++the API limit. See https://code.vmware.com/apis/62/vcenter-management#/VM%20/get_vcenter_vm \ ++for full list of filters.""" ++ docs["vendorurl"] = "https://www.vmware.com" ++ show_docs(options, docs) ++ ++ #### ++ ## Fence operations ++ #### ++ run_delay(options) ++ ++ conn = connect(options) ++ atexit.register(disconnect, conn) ++ ++ result = fence_action(conn, options, set_power_status, get_power_status, get_list) ++ ++ sys.exit(result) ++ ++if __name__ == "__main__": ++ main() ++``` +-- +2.25.1 + diff --git a/backport-fa-dev-guide-add-General-git-section.patch b/backport-fa-dev-guide-add-General-git-section.patch new file mode 100644 index 0000000000000000000000000000000000000000..d0ffdfe243e3c158a55a17282c086c43b12d21c3 --- /dev/null +++ b/backport-fa-dev-guide-add-General-git-section.patch @@ -0,0 +1,31 @@ +From a62176babef8dc74b0f72ed854392afaef3daf8e Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Mon, 24 Jul 2023 11:47:11 +0200 +Subject: [PATCH 23/46] fa-dev-guide: add General git section + +--- + doc/fa-dev-guide.md | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/doc/fa-dev-guide.md b/doc/fa-dev-guide.md +index 6c888dbd..8c349274 100644 +--- a/doc/fa-dev-guide.md ++++ b/doc/fa-dev-guide.md +@@ -12,6 +12,14 @@ Good choices for existing agents to use as base for new agents: + + + ## git ++### General ++- Commit messages should start with "fence_: ", "fencing: " (or other library name), "build: ".\ ++ If in doubt run `git log` to find examples. ++- PRs without correct prefix will get squashed to correct it as part of the merge process. ++- If any parameters or descriptions has been updated you'll have to run `./autogen.sh && ./configure` followed by `make xml-upload`. ++- Build requirements can be easily installed on Fedora by running `sudo dnf builddep fence-agents-all`. ++ ++ + ### Add agent + - Go to and click Fork to create your own Fork. + +-- +2.25.1 + diff --git a/backport-fa-dev-guide-add-reboot_cycle-section.patch b/backport-fa-dev-guide-add-reboot_cycle-section.patch new file mode 100644 index 0000000000000000000000000000000000000000..97db23c5939a4d52f63b5810ebf9c2199313bc8c --- /dev/null +++ b/backport-fa-dev-guide-add-reboot_cycle-section.patch @@ -0,0 +1,48 @@ +From 3ea95247a182598f8b0d4aa24f417569f3efaa82 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Mon, 24 Jul 2023 12:13:16 +0200 +Subject: [PATCH 24/46] fa-dev-guide: add reboot_cycle() section + +--- + doc/fa-dev-guide.md | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/doc/fa-dev-guide.md b/doc/fa-dev-guide.md +index 8c349274..0ab8f770 100644 +--- a/doc/fa-dev-guide.md ++++ b/doc/fa-dev-guide.md +@@ -127,6 +127,31 @@ def get_list(conn, options): + return outlets + ``` + ++### reboot_cycle() ++***The reboot cycle method is not recommended as it might report success before the node is powered off.*** ++- fence_ipmilan contains a minimal reboot_cycle() approach. ++- Add "method" to the device_opt list. ++- Update all_opt["method"]["help"] with a warning that it might report success before the node is powered off. ++- Add reboot_cycle function to fence_action() call in main(). ++ ++Example: ++``` ++def reboot_cycle(_, options): ++ output = _run_command(options, "cycle") ++ return bool(re.search('chassis power control: cycle', str(output).lower())) ++... ++ ++def main(): ++... ++ device_opt = [ ..., "method" ] ++... ++ all_opt["method"]["help"] = "-m, --method=[method] Method to fence (onoff|cycle) (Default: onoff)\n" \ ++ "WARNING! This fence agent might report success before the node is powered off. " \ ++ "You should use -m/method onoff if your fence device works correctly with that option." ++... ++ result = fence_action(None, options, set_power_status, get_power_status, None, reboot_cycle) ++``` ++ + ### define_new_opts() + Specifies device specific parameters with defaults. + - getopt is ":" for parameters that require a value and "" for parameters that get set without a value (e.g. -v) +-- +2.25.1 + diff --git a/backport-fa-dev-guide-improve-fail-error-code-description.patch b/backport-fa-dev-guide-improve-fail-error-code-description.patch new file mode 100644 index 0000000000000000000000000000000000000000..35b8bb9b0c311b37d3012b888acdd1aef3356d68 --- /dev/null +++ b/backport-fa-dev-guide-improve-fail-error-code-description.patch @@ -0,0 +1,38 @@ +From 422c42bd192bb10e4eaaf3621e5e1ae0508ec261 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Mon, 24 Jul 2023 12:39:00 +0200 +Subject: [PATCH 25/46] fa-dev-guide: improve fail()/error code description + +--- + doc/fa-dev-guide.md | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/doc/fa-dev-guide.md b/doc/fa-dev-guide.md +index 0ab8f770..29145307 100644 +--- a/doc/fa-dev-guide.md ++++ b/doc/fa-dev-guide.md +@@ -91,9 +91,11 @@ Use logging.error(), logging.warn(), logging.debug(), and logging.info() to log + - logging.debug() is good for debugging (shown when you use -v or set verbose=1). + - `if options["--verbose-level"] > 1:` can be used to only print additional logging.debug() messages when -vv (or more v's) or verbose=2 or higher. + +-Use `fail()` or `fail_usage("Failed: ")` to exit with error-code or log Failed: with generic error code. ++Use `fail()` or `fail_usage("Failed: ")` to exit with error code message or log Failed: with generic error code. ++- fail() logs the specified error message from and exit with generic error code. + - EC_* error codes can be imported from the fencing library:\ + ++- To exit with specific error codes either use logging.error() followed by sys.exit() or fail(, stop=False), which allows you to return or sys.exit() with other error codes. + + ### get_power_status() / set_power_status() / get_list() + - These functions defines the code to get or set status, and get list of nodes, which are run by the fencing library to turn off/on nodes or get a list of nodes available. +@@ -146,7 +148,7 @@ def main(): + device_opt = [ ..., "method" ] + ... + all_opt["method"]["help"] = "-m, --method=[method] Method to fence (onoff|cycle) (Default: onoff)\n" \ +- "WARNING! This fence agent might report success before the node is powered off. " \ ++ "WARNING! This fence agent might report success before the node is powered off, when cycle method is used. " \ + "You should use -m/method onoff if your fence device works correctly with that option." + ... + result = fence_action(None, options, set_power_status, get_power_status, None, reboot_cycle) +-- +2.25.1 + diff --git a/fence-agents.spec b/fence-agents.spec index 9066fa2467d821892a4dbe8c4a77214a0d2bd4e5..b3618cc0a9f32ebff71f3bfb1e1127267b45870e 100644 --- a/fence-agents.spec +++ b/fence-agents.spec @@ -6,8 +6,8 @@ Name: fence-agents Summary: Set of unified programs capable of host isolation ("fencing") Version: 4.12.1 -Release: 14 -License: GPLv2+ and LGPLv2+ +Release: 15 +License: GPL-2.0-or-later AND LGPL-2.0-or-later Group: System Environment/Base URL: https://github.com/ClusterLabs/fence-agents Source0: https://github.com/ClusterLabs/fence-agents/archive//v%{version}/%{name}-%{version}.tar.gz @@ -28,6 +28,11 @@ Patch13: backport-fence_aliyun-update-order-for-new-parameters.patch Patch14: backport-fence_ibm_powervs-improved-performance.patch Patch15: backport-fencing-add-error-message-for-EC_GENERIC_ERROR.patch Patch16: backport-fencing-use-EC_OK.patch +Patch17: backport-doc-add-fa-dev-guide.patch +Patch18: backport-doc-add-fa-dev-guide-to-README.patch +Patch19: backport-fa-dev-guide-add-General-git-section.patch +Patch20: backport-fa-dev-guide-add-reboot_cycle-section.patch +Patch21: backport-fa-dev-guide-improve-fail-error-code-description.patch # skipped: pve, raritan, rcd-serial, virsh %global allfenceagents %(cat <= %{version}-%{release} @@ -265,7 +270,7 @@ The fence-agents-aliyun package contains a fence agent for Alibaba Cloud (Aliyun %endif %package alom -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for SUN ALOM Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -277,7 +282,7 @@ Fence agent for SUN ALOM. %{_mandir}/man8/fence_alom.8* %package amt -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Intel AMT devices Requires: amtterm Requires: fence-agents-common = %{version}-%{release} @@ -290,7 +295,7 @@ Fence agent for AMT compatibile devices that are accessed via %{_mandir}/man8/fence_amt.8* %package amt-ws -License: ASL 2.0 +License: Apache-2.0 Summary: Fence agent for Intel AMT (WS-Man) devices Requires: fence-agents-common = %{version}-%{release} Requires: openwsman-python3 @@ -302,7 +307,7 @@ The fence-agents-amt-ws package contains a fence agent for AMT (WS-Man) devices. %{_mandir}/man8/fence_amt_ws.8* %package apc -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for APC devices Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -314,7 +319,7 @@ Fence agent for APC devices that are accessed via telnet or SSH. %{_mandir}/man8/fence_apc.8* %package apc-snmp -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agents for APC devices (SNMP) Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -328,7 +333,7 @@ Fence agents for APC devices that are accessed via the SNMP protocol. %{_mandir}/man8/fence_tripplite_snmp.8* %package aws -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Amazon AWS Requires: fence-agents-common = %{version}-%{release} Requires: python3-boto3 @@ -341,7 +346,7 @@ Fence agent for Amazon AWS instances. %{_mandir}/man8/fence_aws.8* %package bladecenter -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM BladeCenter Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -354,7 +359,7 @@ via telnet or SSH. %{_mandir}/man8/fence_bladecenter.8* %package brocade -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Brocade switches Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -377,7 +382,7 @@ Fence agent for Sentry Switch CDU power switch. %{_mandir}/man8/fence_cdu.8* %package cisco-mds -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Cisco MDS 9000 series Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -390,7 +395,7 @@ via the SNMP protocol. %{_mandir}/man8/fence_cisco_mds.8* %package cisco-ucs -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Cisco UCS series Requires: python3-pycurl Requires: fence-agents-common = %{version}-%{release} @@ -404,7 +409,7 @@ via the SNMP protocol. %ifarch x86_64 %package compute -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Nova compute nodes Requires: python3-requests Requires: fence-agents-common = %{version}-%{release} @@ -419,7 +424,7 @@ Fence agent for Nova compute nodes. %endif %package cyberpower-ssh -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for CyberPower network PDUs Requires: openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -430,7 +435,7 @@ BuildArch: noarch %{_mandir}/man8/fence_cyberpower_ssh.8* %package docker -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Docker Requires: python3-pycurl Requires: fence-agents-common = %{version}-%{release} @@ -442,7 +447,7 @@ Fence agent for Docker images that are accessed over HTTP. %{_mandir}/man8/fence_docker.8* %package drac -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Dell DRAC Requires: telnet Requires: fence-agents-common = %{version}-%{release} @@ -455,7 +460,7 @@ via telnet. %{_mandir}/man8/fence_drac.8* %package drac5 -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Dell DRAC 5 Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -468,7 +473,7 @@ via telnet or SSH. %{_mandir}/man8/fence_drac5.8* %package eaton-snmp -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Eaton network power switches Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -493,7 +498,7 @@ via the serial protocol tunnel over SSH. %{_mandir}/man8/fence_eaton_ssh.8* %package ecloud -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for eCloud and eCloud VPC Requires: python3-requests Requires: fence-agents-common = %{version}-%{release} @@ -505,7 +510,7 @@ Fence agent for eCloud and eCloud VPC from ANS Group Limited %{_mandir}/man8/fence_ecloud.8* %package emerson -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Emerson devices (SNMP) Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -517,7 +522,7 @@ the SNMP protocol. %{_mandir}/man8/fence_emerson.8* %package eps -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for ePowerSwitch 8M+ power switches Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -529,7 +534,7 @@ via the HTTP(s) protocol. %{_mandir}/man8/fence_eps.8* %package gce -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for GCE (Google Cloud Engine) Requires: fence-agents-common = %{version}-%{release} Requires: python3-google-api-client @@ -542,7 +547,7 @@ Fence agent for GCE (Google Cloud Engine) instances. %{_mandir}/man8/fence_gce.8* %package hds-cb -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Hitachi Compute Blade systems Requires: telnet Requires: fence-agents-common = %{version}-%{release} @@ -554,7 +559,7 @@ Fence agent for Hitachi Compute Blades that are accessed via telnet. %{_mandir}/man8/fence_hds_cb.8* %package heuristics-ping -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Pseudo fence agent to affect other agents based on ping-heuristics Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -567,7 +572,7 @@ ping-heuristics. %{_mandir}/man8/fence_heuristics_ping.8* %package hpblade -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for HP BladeSystem devices Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -580,7 +585,7 @@ or SSH. %{_mandir}/man8/fence_hpblade.8* %package ibmblade -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM BladeCenter Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -593,7 +598,7 @@ via the SNMP protocol. %{_mandir}/man8/fence_ibmblade.8* %package ibmz -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM z LPARs Requires: python3-requests Requires: fence-agents-common = %{version}-%{release} @@ -606,7 +611,7 @@ Web Services REST API. %{_mandir}/man8/fence_ibmz.8* %package ibm-powervs -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM PowerVS Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -617,7 +622,7 @@ Fence agent for IBM PowerVS that are accessed via REST API. %{_mandir}/man8/fence_ibm_powervs.8* %package ibm-vpc -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM Cloud VPC Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -628,7 +633,7 @@ Fence agent for IBM Cloud VPC that are accessed via REST API. %{_mandir}/man8/fence_ibm_vpc.8* %package ifmib -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for devices with IF-MIB interfaces Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -641,7 +646,7 @@ the SNMP protocol. %{_mandir}/man8/fence_ifmib.8* %package ilo2 -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agents for HP iLO2 devices Requires: gnutls-utils Requires: fence-agents-common = %{version}-%{release} @@ -656,7 +661,7 @@ the HTTP(s) protocol. %{_mandir}/man8/fence_ilo2.8* %package ilo-moonshot -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for HP iLO Moonshot devices Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -669,7 +674,7 @@ via telnet or SSH. %{_mandir}/man8/fence_ilo_moonshot.8* %package ilo-mp -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for HP iLO MP devices Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -681,7 +686,7 @@ Fence agent for HP iLO MP devices that are accessed via telnet or SSH. %{_mandir}/man8/fence_ilo_mp.8* %package ilo-ssh -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agents for HP iLO devices over SSH Requires: openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -699,7 +704,7 @@ Fence agents for HP iLO devices that are accessed via telnet or SSH. %{_mandir}/man8/fence_ilo5_ssh.8* %package intelmodular -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for devices with Intel Modular interfaces Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -712,7 +717,7 @@ via the SNMP protocol. %{_mandir}/man8/fence_intelmodular.8* %package ipdu -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM iPDU network power switches Requires: net-snmp-utils Requires: fence-agents-common = %{version}-%{release} @@ -725,7 +730,7 @@ via the SNMP protocol. %{_mandir}/man8/fence_ipdu.8* %package ipmilan -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agents for devices with IPMI interface Requires: /usr/bin/ipmitool Requires: fence-agents-common = %{version}-%{release} @@ -750,7 +755,7 @@ Fence agents for devices with IPMI interface. %ifarch x86_64 %package ironic -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for OpenStack's Ironic (Bare Metal as a service) Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -762,7 +767,7 @@ Fence agent for OpenStack's Ironic (Bare Metal as a service) service. %endif %package kdump -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for use with kdump crash recovery service Requires: fence-agents-common = %{version}-%{release} # this cannot be noarch since it's compiled @@ -775,7 +780,7 @@ Fence agent for use with kdump crash recovery service. %{_mandir}/man8/fence_kdump_send.8* %package ldom -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Sun LDom virtual machines Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -787,7 +792,7 @@ Fence agent for APC devices that are accessed via telnet or SSH. %{_mandir}/man8/fence_ldom.8* %package lpar -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM LPAR Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -799,7 +804,7 @@ Fence agent for IBM LPAR devices that are accessed via telnet or SSH. %{_mandir}/man8/fence_lpar.8* %package mpath -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for reservations over Device Mapper Multipath Requires: device-mapper-multipath Requires: fence-agents-common = %{version}-%{release} @@ -813,7 +818,7 @@ Device Mapper Multipath. %{_mandir}/man8/fence_mpath.8* %package netio -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Koukaam NETIO devices Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -826,7 +831,7 @@ via telnet or SSH. %{_mandir}/man8/fence_netio.8* %package ovh -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for OVH provider Requires: python3-suds2 Requires: fence-agents-common = %{version}-%{release} @@ -839,7 +844,7 @@ Fence agent for OVH hosting provider. # skipped from allfenceagents %package pve -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for PVE Requires: python3-pycurl Requires: fence-agents-common = %{version}-%{release} @@ -852,7 +857,7 @@ Fence agent for PVE. # skipped from allfenceagents %package raritan -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Raritan Dominion PX Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -864,7 +869,7 @@ Fence agent for Raritan Dominion PX. # skipped from allfenceagents %package rcd-serial -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for RCD serial Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -875,7 +880,7 @@ Fence agent for RCD serial. %{_mandir}/man8/fence_rcd_serial.8* %package redfish -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Group: System Environment/Base Summary: Fence agent for Redfish Requires: fence-agents-common >= %{version}-%{release} @@ -889,7 +894,7 @@ The fence-agents-redfish package contains a fence agent for Redfish %{_mandir}/man8/fence_redfish.8* %package rhevm -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for RHEV-M Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -900,7 +905,7 @@ Fence agent for RHEV-M via REST API. %{_mandir}/man8/fence_rhevm.8* %package rsa -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM RSA II Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -913,7 +918,7 @@ via telnet or SSH. %{_mandir}/man8/fence_rsa.8* %package rsb -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Fujitsu RSB Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -926,7 +931,7 @@ via telnet or SSH. %{_mandir}/man8/fence_rsb.8* %package sanbox2 -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for QLogic SANBox2 FC switches Requires: telnet Requires: fence-agents-common = %{version}-%{release} @@ -938,7 +943,7 @@ Fence agent for QLogic SANBox2 switches that are accessed via telnet. %{_mandir}/man8/fence_sanbox2.8* %package sbd -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for SBD (storage-based death) Requires: sbd Requires: fence-agents-common = %{version}-%{release} @@ -950,7 +955,7 @@ Fence agent for SBD (storage-based death). %{_mandir}/man8/fence_sbd.8* %package scsi -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for SCSI persistent reservations Requires: sg3_utils Requires: fence-agents-common = %{version}-%{release} @@ -964,7 +969,7 @@ Fence agent for SCSI persistent reservations. %{_mandir}/man8/fence_scsi.8* %package vbox -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for VirtualBox Requires: openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -977,7 +982,7 @@ Fence agent for VirtualBox dom0 accessed via SSH. # skipped from allfenceagents %package virsh -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for virtual machines based on libvirt Requires: openssh-clients /usr/bin/virsh Requires: fence-agents-common = %{version}-%{release} @@ -989,7 +994,7 @@ Fence agent for virtual machines that are accessed via SSH. %{_mandir}/man8/fence_virsh.8* %package vmware -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for VMWare with VI Perl Toolkit or vmrun Requires: python3-pexpect Requires: fence-agents-common = %{version}-%{release} @@ -1001,7 +1006,7 @@ Fence agent for VMWare accessed with VI Perl Toolkit or vmrun. %{_mandir}/man8/fence_vmware.8* %package vmware-rest -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for VMWare with REST API Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -1013,7 +1018,7 @@ Fence agent for VMWare with REST API. %{_mandir}/man8/fence_vmware_rest.8* %package vmware-soap -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for VMWare with SOAP API v4.1+ Requires: python3-suds2 Requires: fence-agents-common = %{version}-%{release} @@ -1025,7 +1030,7 @@ Fence agent for VMWare with SOAP API v4.1+. %{_mandir}/man8/fence_vmware_soap.8* %package vmware-vcloud -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for VMWare vCloud Director Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -1037,7 +1042,7 @@ Fence agent for VMWare vCloud Director. %{_mandir}/man8/fence_vmware_vcloud.8* %package wti -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for WTI Network power switches Requires: telnet openssh-clients Requires: fence-agents-common = %{version}-%{release} @@ -1050,7 +1055,7 @@ via telnet or SSH. %{_mandir}/man8/fence_wti.8* %package xenapi -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for Citrix XenServer over XenAPI Requires: python3-pexpect Requires: fence-agents-common = %{version}-%{release} @@ -1064,7 +1069,7 @@ Fence agent for Citrix XenServer accessed over XenAPI. %{_mandir}/man8/fence_xenapi.8* %package zvm -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later Summary: Fence agent for IBM z/VM over IP Requires: fence-agents-common = %{version}-%{release} BuildArch: noarch @@ -1155,6 +1160,9 @@ are located on corosync cluster nodes. %{_libdir}/fence-virt/cpg.so %changelog +* Fri Jun 28 2024 liupei - 4.12.1-15 +- modify dev guide + * Tue Jun 11 2024 liupei - 4.12.1-14 - fencing: add error message for EC_GENERIC_ERROR - fencing: use EC_OK