diff --git a/backport-fence_eaton_ssh-new-fence-agent-for-Eaton-ePDU-G3-over-ssh.patch b/backport-fence_eaton_ssh-new-fence-agent-for-Eaton-ePDU-G3-over-ssh.patch new file mode 100644 index 0000000..79bf95d --- /dev/null +++ b/backport-fence_eaton_ssh-new-fence-agent-for-Eaton-ePDU-G3-over-ssh.patch @@ -0,0 +1,714 @@ +From 849861d2bdf76f70c7ee0b97387a27082f8a3fdd Mon Sep 17 00:00:00 2001 +From: Enno G +Date: Mon, 26 Jun 2023 11:05:59 +0200 +Subject: [PATCH 16/46] fence_eaton_ssh: new fence agent for Eaton ePDU G3 over + SSH (#549) + +* fence_eaton_ssh: Initial add +* Docker: Add dockerized build environment +* Fix incorrect repository path in configure.ac +--- + README.md | 19 +- + agents/eaton_ssh/fence_eaton_ssh.py | 318 ++++++++++++++++++++++++ + configure.ac | 2 +- + docker/Dockerfile | 34 +++ + docker/README.md | 10 + + docker/entrypoint.sh | 8 + + fence-agents.spec.in | 13 + + tests/data/metadata/fence_eaton_ssh.xml | 206 +++++++++++++++ + 8 files changed, 603 insertions(+), 7 deletions(-) + create mode 100644 agents/eaton_ssh/fence_eaton_ssh.py + create mode 100644 docker/Dockerfile + create mode 100644 docker/README.md + create mode 100755 docker/entrypoint.sh + create mode 100644 tests/data/metadata/fence_eaton_ssh.xml + +diff --git a/README.md b/README.md +index d9fcb94b..0f3ebbde 100644 +--- a/README.md ++++ b/README.md +@@ -1,18 +1,25 @@ + # Fence agents + +-Fence agents were developed as device "drivers" which are able to prevent computers from destroying data on shared storage. Their aim is to isolate a corrupted computer, using one of three methods: ++Fence agents were developed as device "drivers" which are able to prevent computers from destroying data on shared ++storage. Their aim is to isolate a corrupted computer, using one of three methods: + +- * Power - A computer that is switched off cannot corrupt data, but it is important to not do a "soft-reboot" as we won't know if this is possible. This also works for virtual machines when the fence device is a hypervisor. +- * Network - Switches can prevent routing to a given computer, so even if a computer is powered on it won't be able to harm the data. ++ * Power - A computer that is switched off cannot corrupt data, but it is important to not do a "soft-reboot" as we ++ won't know if this is possible. This also works for virtual machines when the fence device is a hypervisor. ++ * Network - Switches can prevent routing to a given computer, so even if a computer is powered on it won't be able to ++ harm the data. + * Configuration - Fibre-channel switches or SCSI devices allow us to limit who can write to managed disks. + +-Fence agents do not use configuration files, as configuration management is outside of their scope. All of the configuration has to be specified either as command-line arguments or lines of standard input (see the complete list for more info). ++Fence agents do not use configuration files, as configuration management is outside of their scope. All of the ++configuration has to be specified either as command-line arguments or lines of standard input (see the complete list ++for more info). + +-Because many fence agents are quite similar to each other, a fencing library (in Python) was developed. Please use it for further development. Creating or modifying a new fence agent should be quite simple using this library. ++Because many fence agents are quite similar to each other, a fencing library (in Python) was developed. Please use it ++for further development. Creating or modifying a new fence agent should be quite simple using this library. + + ## 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) +-* Mailing lists for [users](http://oss.clusterlabs.org/mailman/listinfo/users) and [developers](http://oss.clusterlabs.org/mailman/listinfo/developers) ++* 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/) +diff --git a/agents/eaton_ssh/fence_eaton_ssh.py b/agents/eaton_ssh/fence_eaton_ssh.py +new file mode 100644 +index 00000000..8e536a2e +--- /dev/null ++++ b/agents/eaton_ssh/fence_eaton_ssh.py +@@ -0,0 +1,318 @@ ++#!@PYTHON@ -tt ++ ++""" ++Plug numbering starts with 1! There were no tests performed so far with daisy chained PDUs. ++ ++Example usage: ++ fence_eaton_ssh -v -a -l -p --login-timeout=60 --action status --plug 1 ++""" ++ ++##### ++## ++## The Following Agent Has Been Tested On: ++## ++## Model Firmware ++## +---------------------------------------------+ ++## EMAB04 04.02.0001 ++##### ++ ++import enum ++import sys ++import atexit ++ ++sys.path.append("@FENCEAGENTSLIBDIR@") ++from fencing import * ++from fencing import fail, EC_STATUS, EC_LOGIN_DENIED ++ ++ ++class FenceEatonPowerActions(enum.Enum): ++ """ ++ Status of the plug on the PDU. ++ """ ++ ERROR = -1 ++ OFF = 0 ++ ON = 1 ++ PENDING_OFF = 2 ++ PENDING_ON = 3 ++ ++ ++def get_plug_names(conn, plug_ids, command_prompt, shell_timout): ++ """ ++ Get the names of plugs via their ID. ++ ++ :param conn: The "fspawn" object. ++ :param plug_ids: The list of plug IDs. Plugs start with the ID 1. ++ :param command_prompt: The characters that make up the base prompt. This is important to detect a finished command. ++ :param shell_timeout: The maximum time the shell should wait for a response. ++ :returns: The name of the requested plugs. ++ """ ++ # fspawn is subclassed from pexpect which is not correctly type annotated in all cases. ++ result = {} ++ full_node_mapping = {} ++ conn.send_eol("get PDU.OutletSystem.Outlet[x].iName") ++ conn.log_expect(command_prompt, shell_timout) ++ result_plug_names = conn.before.split("\n") # type: ignore ++ if len(result_plug_names) != 3: ++ fail(EC_STATUS) ++ plug_names = result_plug_names.split("|") ++ for counter in range(1, len(plug_names)): ++ full_node_mapping[counter] = plug_names[counter] ++ for plug_id in plug_ids: ++ result[plug_id] = full_node_mapping[plug_id] ++ return result ++ ++ ++def get_plug_ids(conn, nodenames, command_prompt, shell_timout): ++ """ ++ Get the IDs that map to the given nodenames. Non existing names are skipped. ++ ++ :param conn: The "fspawn" object. ++ :param nodenames: The list of human readable names that should be converted to IDs. ++ :param command_prompt: The characters that make up the base prompt. This is important to detect a finished command. ++ :param shell_timeout: The maximum time the shell should wait for a response. ++ :returns: A dictionary - possibly empty - where the keys are the node names and the values are the node IDs. ++ """ ++ result = {} ++ full_node_mapping = {} ++ conn.send_eol("get PDU.OutletSystem.Outlet[x].iName") ++ conn.log_expect(command_prompt, shell_timout) ++ result_plug_names = conn.before.split("\n") # type: ignore ++ if len(result_plug_names) != 3: ++ fail(EC_STATUS) ++ plug_names = result_plug_names.split("|") ++ for counter in range(1, len(plug_names)): ++ full_node_mapping[plug_names[counter]] = counter ++ for node in nodenames: ++ if node in full_node_mapping: ++ result[node] = full_node_mapping[node] ++ return result ++ ++ ++def get_plug_count(conn, command_prompt, shell_timout): ++ """ ++ Get the number of plugs that the PDU has. ++ ++ In case the PDU is daisy chained this also contains the plugs of the other PDUs. ++ ++ :param conn: The "fspawn" object. ++ :param command_prompt: The characters that make up the base prompt. This is important to detect a finished command. ++ :param shell_timeout: The maximum time the shell should wait for a response. ++ :returns: The number of plugs that the PDU has. ++ """ ++ # fspawn is subclassed from pexpect which is not correctly type annotated in all cases. ++ conn.send_eol("get PDU.OutletSystem.Outlet.Count") ++ conn.log_expect(command_prompt, shell_timout) ++ result_plug_count = conn.before.split("\n") # type: ignore ++ if len(result_plug_count) != 3: ++ fail(EC_STATUS) ++ return int(result_plug_count[1].strip()) ++ ++ ++def get_plug_status(conn, plug_id, command_prompt, shell_timout): ++ """ ++ Get the current status of the plug. The return value of this doesn't account for operations that will act via ++ schedules or a delay. As such the status is only valid at the time of retrieval. ++ ++ :param conn: The "fspawn" object. ++ :param plug_id: The ID of the plug that should be powered off. Counting plugs starts at 1. ++ :returns: The current status of the plug. ++ """ ++ # fspawn is subclassed from pexpect which is not correctly type annotated in all cases. ++ conn.send_eol(f"get PDU.OutletSystem.Outlet[{plug_id}].PresentStatus.SwitchOnOff") ++ conn.log_expect(command_prompt, shell_timout) ++ result_plug_status = conn.before.split("\n") # type: ignore ++ if len(result_plug_status) != 3: ++ fail(EC_STATUS) ++ if result_plug_status[1].strip() == "0": ++ return FenceEatonPowerActions.OFF ++ elif result_plug_status[1].strip() == "1": ++ return FenceEatonPowerActions.ON ++ else: ++ return FenceEatonPowerActions.ERROR ++ ++ ++def power_on_plug(conn, plug_id, command_prompt, shell_timout, delay=0): ++ """ ++ Powers on a plug with an optional delay. ++ ++ :param conn: The "fspawn" object. ++ :param plug_id: The ID of the plug that should be powered off. Counting plugs starts at 1. ++ :param command_prompt: The characters that make up the base prompt. This is important to detect a finished command. ++ :param shell_timeout: The maximum time the shell should wait for a response. ++ :param delay: The delay in seconds. Passing "-1" aborts the power off action. ++ """ ++ conn.send_eol(f"set PDU.OutletSystem.Outlet[{plug_id}].DelayBeforeStartup {delay}") ++ conn.log_expect(command_prompt, shell_timout) ++ ++ ++def power_off_plug(conn, plug_id, command_prompt, shell_timout, delay=0): ++ """ ++ Powers off a plug with an optional delay. ++ ++ :param conn: The "fspawn" object. ++ :param plug_id: The ID of the plug that should be powered off. Counting plugs starts at 1. ++ :param command_prompt: The characters that make up the base prompt. This is important to detect a finished command. ++ :param shell_timeout: The maximum time the shell should wait for a response. ++ :param delay: The delay in seconds. Passing "-1" aborts the power off action. ++ """ ++ conn.send_eol(f"set PDU.OutletSystem.Outlet[{plug_id}].DelayBeforeShutdown {delay}") ++ conn.log_expect(command_prompt, shell_timout) ++ ++ ++def get_power_status(conn, options): ++ """ ++ Retrieve the power status for the requested plug. Since we have a serial like interface via SSH we need to parse the ++ output of the SSH session manually. ++ ++ If abnormal behavior is detected the method will exit via "fail()". ++ ++ :param conn: The "fspawn" object. ++ :param options: The option dictionary. ++ :returns: In case there is an error this method does not return but instead calls "sys.exit". Otherwhise one of ++ "off", "on" or "error" is returned. ++ """ ++ if conn is None: ++ fail(EC_LOGIN_DENIED) ++ ++ requested_plug = options.get("--plug", "") ++ if not requested_plug: ++ fail(EC_STATUS) ++ plug_status = get_plug_status( ++ conn, # type: ignore ++ int(requested_plug), ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ if plug_status == FenceEatonPowerActions.OFF: ++ return "off" ++ elif plug_status == FenceEatonPowerActions.ON: ++ return "on" ++ else: ++ return "error" ++ ++ ++def set_power_status(conn, options): ++ """ ++ Set the power status for the requested plug. Only resposible for powering on and off. ++ ++ If abnormal behavior is detected the method will exit via "fail()". ++ ++ :param conn: The "fspawn" object. ++ :param options: The option dictionary. ++ :returns: In case there is an error this method does not return but instead calls "sys.exit". ++ """ ++ if conn is None: ++ fail(EC_LOGIN_DENIED) ++ ++ requested_plug = options.get("--plug", "") ++ if not requested_plug: ++ fail(EC_STATUS) ++ requested_action = options.get("--action", "") ++ if not requested_action: ++ fail(EC_STATUS) ++ ++ if requested_action == "off": ++ power_off_plug( ++ conn, # type: ignore ++ int(requested_plug), ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ elif requested_action == "on": ++ power_on_plug( ++ conn, # type: ignore ++ int(requested_plug), ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ else: ++ fail(EC_STATUS) ++ ++ ++def get_outlet_list(conn, options): ++ """ ++ Retrieves the list of plugs with their correspondin status. ++ ++ :param conn: The "fspawn" object. ++ :param options: The option dictionary. ++ :returns: Keys are the Plug IDs which each have a Tuple with the alias for the plug and its status. ++ """ ++ if conn is None: ++ fail(EC_LOGIN_DENIED) ++ ++ result = {} ++ plug_count = get_plug_count(conn, options["--command-prompt"], int(options["--shell-timeout"])) # type: ignore ++ for counter in range(1, plug_count): ++ plug_names = get_plug_names( ++ conn, # type: ignore ++ [counter], ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ plug_status_enum = get_plug_status( ++ conn, # type: ignore ++ counter, ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ if plug_status_enum == FenceEatonPowerActions.OFF: ++ plug_status = "OFF" ++ elif plug_status_enum == FenceEatonPowerActions.ON: ++ plug_status = "ON" ++ else: ++ plug_status = None ++ result[str(counter)] = (plug_names[counter], plug_status) ++ return result ++ ++ ++def reboot_cycle(conn, options) -> None: ++ """ ++ Responsible for power cycling a machine. Not responsible for singular on and off actions. ++ ++ :param conn: The "fspawn" object. ++ :param options: The option dictionary. ++ """ ++ requested_plug = options.get("--plug", "") ++ if not requested_plug: ++ fail(EC_STATUS) ++ ++ power_off_plug( ++ conn, # type: ignore ++ int(requested_plug), ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ power_on_plug( ++ conn, # type: ignore ++ int(requested_plug), ++ options["--command-prompt"], ++ int(options["--shell-timeout"]) ++ ) ++ ++ ++def main(): ++ """ ++ Main entrypoint for the fence_agent. ++ """ ++ device_opt = ["secure", "ipaddr", "login", "passwd", "port", "cmd_prompt"] ++ atexit.register(atexit_handler) ++ options = check_input(device_opt, process_input(device_opt)) ++ options["--ssh"] = None ++ options["--ipport"] = 22 ++ options["--command-prompt"] = "pdu#0>" ++ ++ docs = {} ++ docs["shortdesc"] = "Fence agent for Eaton ePDU G3 over SSH" ++ docs["longdesc"] = "fence_eaton_ssh is a fence agent that connects to Eaton ePDU devices. It logs into \ ++device via ssh and reboot a specified outlet." ++ docs["vendorurl"] = "https://www.eaton.com/" ++ show_docs(options, docs) ++ ++ conn = fence_login(options) ++ result = fence_action(conn, options, set_power_status, get_power_status, get_outlet_list, reboot_cycle) ++ fence_logout(conn, "quit") ++ sys.exit(result) ++ ++ ++if __name__ == "__main__": ++ main() +diff --git a/configure.ac b/configure.ac +index 65a9718d..8436ba25 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -567,7 +567,7 @@ if test "x$VERSION" = "xUNKNOWN"; then + configure was unable to determine the source tree's current version. This + generally happens when using git archive (or the github download button) + generated tarball/zip file. In order to workaround this issue, either use git +- clone https://github.com/ClusterLabs/fence-virt.git or use an official release ++ clone https://github.com/ClusterLabs/fence-agents.git or use an official release + tarball. Alternatively you can add a compatible version in a .tarball-version + file at the top of the source tree, wipe your autom4te.cache dir and generated + configure, and rerun autogen.sh. +diff --git a/docker/Dockerfile b/docker/Dockerfile +new file mode 100644 +index 00000000..6ac9480c +--- /dev/null ++++ b/docker/Dockerfile +@@ -0,0 +1,34 @@ ++FROM opensuse/leap:15.5 ++ ++RUN zypper in -y \ ++ git \ ++ autoconf \ ++ automake \ ++ libtool \ ++ make \ ++ gcc \ ++ libcorosync-devel \ ++ libxslt1 \ ++ libxslt-tools \ ++ python3-devel \ ++ python3-httplib2 \ ++ python3-pexpect \ ++ python3-pycurl \ ++ python3-requests \ ++ python3-suds-jurko \ ++ python3-openwsman \ ++ python3-boto3 \ ++ python3-novaclient \ ++ python3-keystoneclient \ ++ mozilla-nss-devel \ ++ mozilla-nspr-devel \ ++ libvirt-devel \ ++ libxml2-devel \ ++ flex \ ++ bison \ ++ libuuid-devel \ ++ systemd ++ ++WORKDIR /code ++VOLUME /code ++ENTRYPOINT ["./docker/entrypoint.sh"] +diff --git a/docker/README.md b/docker/README.md +new file mode 100644 +index 00000000..2aef7421 +--- /dev/null ++++ b/docker/README.md +@@ -0,0 +1,10 @@ ++# Dockerfile to build the fence-agents locally ++ ++Usage is as follows: ++ ++``` ++podman build -f docker/Dockerfile -t fence-agents:main . ++podman run -it -v $PWD:/code --rm localhost/fence-agents:main ++``` ++ ++In case you are running docker replace `podman` with `docker` and it should work the same. +diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh +new file mode 100755 +index 00000000..caa778e2 +--- /dev/null ++++ b/docker/entrypoint.sh +@@ -0,0 +1,8 @@ ++#!/usr/bin/bash ++ ++echo "### Running autogen" ++./autogen.sh ++echo "### Running configure" ++./configure ++echo "### Running make" ++make +diff --git a/fence-agents.spec.in b/fence-agents.spec.in +index b6af20d9..343f1c1a 100644 +--- a/fence-agents.spec.in ++++ b/fence-agents.spec.in +@@ -55,6 +55,7 @@ fence-agents-docker \\ + fence-agents-drac \\ + fence-agents-drac5 \\ + fence-agents-eaton-snmp \\ ++fence-agents-eaton-ssh \\ + fence-agents-ecloud \\ + fence-agents-emerson \\ + fence-agents-eps \\ +@@ -631,6 +632,18 @@ via the SNMP protocol. + %{_sbindir}/fence_eaton_snmp + %{_mandir}/man8/fence_eaton_snmp.8* + ++%package eaton-ssh ++License: GPL-2.0-or-later AND LGPL-2.0-or-later ++Summary: Fence agent for Eaton network power switches ++Requires: fence-agents-common = %{version}-%{release} ++BuildArch: noarch ++%description eaton-ssh ++Fence agent for Eaton network power switches that are accessed ++via the serial protocol tunnel over SSH. ++%files eaton-ssh ++%{_sbindir}/fence_eaton_ssh ++%{_mandir}/man8/fence_eaton_ssh.8* ++ + %package ecloud + License: GPL-2.0-or-later AND LGPL-2.0-or-later + Summary: Fence agent for eCloud and eCloud VPC +diff --git a/tests/data/metadata/fence_eaton_ssh.xml b/tests/data/metadata/fence_eaton_ssh.xml +new file mode 100644 +index 00000000..a3be1ac6 +--- /dev/null ++++ b/tests/data/metadata/fence_eaton_ssh.xml +@@ -0,0 +1,206 @@ ++ ++ ++fence_eaton_ssh is a fence agent that connects to Eaton ePDU devices. It logs into device via ssh and reboot a specified outlet. ++https://www.eaton.com/ ++ ++ ++ ++ ++ Fencing action ++ ++ ++ ++ ++ Force Python regex for command prompt ++ ++ ++ ++ ++ Force Python regex for command prompt ++ ++ ++ ++ Identity file (private key) for SSH ++ ++ ++ ++ ++ Forces agent to use IPv4 addresses only ++ ++ ++ ++ ++ Forces agent to use IPv6 addresses only ++ ++ ++ ++ ++ IP address or hostname of fencing device ++ ++ ++ ++ ++ IP address or hostname of fencing device ++ ++ ++ ++ ++ TCP/UDP port to use for connection with device ++ ++ ++ ++ ++ Login name ++ ++ ++ ++ ++ Login password or passphrase ++ ++ ++ ++ ++ Script to run to retrieve password ++ ++ ++ ++ ++ Login password or passphrase ++ ++ ++ ++ ++ Script to run to retrieve password ++ ++ ++ ++ ++ Physical plug number on device, UUID or identification of machine ++ ++ ++ ++ ++ Physical plug number on device, UUID or identification of machine ++ ++ ++ ++ ++ Use SSH connection ++ ++ ++ ++ ++ Use SSH connection ++ ++ ++ ++ ++ SSH options to use ++ ++ ++ ++ ++ Login name ++ ++ ++ ++ ++ Disable logging to stderr. Does not affect --verbose or --debug-file or logging to syslog. ++ ++ ++ ++ ++ Verbose mode. Multiple -v flags can be stacked on the command line (e.g., -vvv) to increase verbosity. ++ ++ ++ ++ ++ Level of debugging detail in output. Defaults to the number of --verbose flags specified on the command line, or to 1 if verbose=1 in a stonith device configuration (i.e., on stdin). ++ ++ ++ ++ ++ Write debug information to given file ++ ++ ++ ++ Write debug information to given file ++ ++ ++ ++ ++ Display version information and exit ++ ++ ++ ++ ++ Display help and exit ++ ++ ++ ++ ++ Separator for plug parameter when specifying more than 1 plug ++ ++ ++ ++ ++ Separator for CSV created by 'list' operation ++ ++ ++ ++ ++ Wait X seconds before fencing is started ++ ++ ++ ++ ++ Disable timeout (true/false) (default: true when run from Pacemaker 2.0+) ++ ++ ++ ++ ++ Wait X seconds for cmd prompt after login ++ ++ ++ ++ ++ Test X seconds for status change after ON/OFF ++ ++ ++ ++ ++ Wait X seconds after issuing ON/OFF ++ ++ ++ ++ ++ Wait X seconds for cmd prompt after issuing command ++ ++ ++ ++ ++ Sleep X seconds between status calls during a STONITH action ++ ++ ++ ++ ++ Count of attempts to retry power on ++ ++ ++ ++ Path to ssh binary ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.25.1 + diff --git a/backport-spec-Migrate-to-SPDX-license.patch b/backport-spec-Migrate-to-SPDX-license.patch new file mode 100644 index 0000000..36e4deb --- /dev/null +++ b/backport-spec-Migrate-to-SPDX-license.patch @@ -0,0 +1,644 @@ +From 6e41bc2e69a9b5395c7d0c48aa2fc5424365f8d1 Mon Sep 17 00:00:00 2001 +From: Jan Friesse +Date: Tue, 6 Jun 2023 18:08:00 +0200 +Subject: [PATCH 11/46] spec: Migrate to SPDX license + +Both Fedora and openSUSE now recommends to use SPDX shortname format for +License. + +This work is 1:1 based on Fedora patch made by Antonio Torres + and he should get all credit. + +Signed-off-by: Jan Friesse +--- + fence-agents.spec.in | 138 +++++++++++++++++++++---------------------- + 1 file changed, 69 insertions(+), 69 deletions(-) + +diff --git a/fence-agents.spec.in b/fence-agents.spec.in +index 38296937..b6af20d9 100644 +--- a/fence-agents.spec.in ++++ b/fence-agents.spec.in +@@ -19,7 +19,7 @@ Name: fence-agents + Summary: Set of unified programs capable of host isolation ("fencing") + Version: @version@ + Release: @specver@%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} +-License: GPLv2+ and LGPLv2+ ++License: GPL-2.0-or-later AND LGPL-2.0-or-later + Group: System Environment/Base + URL: https://github.com/ClusterLabs/fence-agents + Source0: %{name}-%{version}%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.bz2 +@@ -256,7 +256,7 @@ network, storage, or similar. They operate through a unified interface + (calling conventions) devised for the original Red Hat clustering solution. + + %package common +-License: GPLv2+ and LGPLv2+ ++License: GPL-2.0-or-later AND LGPL-2.0-or-later + Summary: Common base for Fence Agents + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-pexpect python3-pycurl +@@ -293,7 +293,7 @@ This package contains support files including the Python fencing library. + %endif + + %package all +-License: GPLv2+ and LGPLv2+ and ASL 2.0 ++License: GPL-2.0-or-later AND LGPL-2.0-or-later AND Apache-2.0 + Summary: Set of unified programs capable of host isolation ("fencing") + Requires: %{allfenceagents} + Provides: fence-agents = %{version}-%{release} +@@ -308,7 +308,7 @@ This package serves as a catch-all for all supported fence agents. + + %ifarch x86_64 + %package aliyun +-License: GPLv2+ and LGPLv2+ and ASL 2.0 and BSD and MIT ++License: GPL-2.0-or-later AND LGPL-2.0-or-later AND Apache-2.0 AND BSD-3-Clause AND MIT + Group: System Environment/Base + Summary: Fence agent for Alibaba Cloud (Aliyun) + Requires: fence-agents-common >= %{version}-%{release} +@@ -323,7 +323,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -342,7 +342,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} +@@ -355,7 +355,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} + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} +@@ -376,7 +376,7 @@ 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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -395,7 +395,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} +@@ -410,7 +410,7 @@ Fence agents for APC devices that are accessed via the SNMP protocol. + + %if ! %{defined rhel7_s390x} + %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} + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} +@@ -428,7 +428,7 @@ Fence agent for Amazon AWS instances. + %endif + + %package azure-arm +-License: GPLv2+ and LGPLv2+ ++License: GPL-2.0-or-later AND LGPL-2.0-or-later + Summary: Fence agent for Azure Resource Manager + Requires: fence-agents-common = %{version}-%{release} + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} +@@ -457,7 +457,7 @@ Fence agent for Azure Resource Manager instances. + %{_mandir}/man8/fence_azure_arm.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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -477,7 +477,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -496,7 +496,7 @@ Fence agent for Brocade devices that are accessed via telnet or SSH. + %{_mandir}/man8/fence_brocade.8* + + %package cdu +-License: GPLv3-only ++License: GPL-3.0-only + Summary: Fence agent for a Sentry Switch CDU + Requires: fence-agents-common = %{version}-%{release} + BuildArch: noarch +@@ -507,7 +507,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} +@@ -520,7 +520,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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-pycurl +@@ -538,7 +538,7 @@ via the SNMP protocol. + + %ifarch x86_64 ppc64le + %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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-requests +@@ -559,7 +559,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} +@@ -570,7 +570,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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-pycurl +@@ -586,7 +586,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} +@@ -599,7 +599,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -619,7 +619,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} +@@ -632,7 +632,7 @@ via the SNMP protocol. + %{_mandir}/man8/fence_eaton_snmp.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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} +@@ -649,7 +649,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 +@@ -661,7 +661,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 +@@ -674,7 +674,7 @@ via the HTTP(s) protocol. + + %if ! %{defined rhel7_s390x} + %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} + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} +@@ -697,7 +697,7 @@ Fence agent for GCE (Google Cloud Engine) instances. + %endif + + %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} +@@ -709,7 +709,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 +@@ -722,7 +722,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -742,7 +742,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} +@@ -755,7 +755,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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-requests +@@ -772,7 +772,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 +@@ -783,7 +783,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 +@@ -794,7 +794,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} +@@ -807,7 +807,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} +@@ -822,7 +822,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -842,7 +842,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -861,7 +861,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} +@@ -879,7 +879,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} +@@ -892,7 +892,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} +@@ -905,7 +905,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} +@@ -930,7 +930,7 @@ Fence agents for devices with IPMI interface. + + %ifarch x86_64 ppc64le + %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 +@@ -942,7 +942,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 +@@ -955,7 +955,7 @@ Fence agent for use with kdump crash recovery service. + %{_mandir}/man8/fence_kdump_send.8* + + %package kubevirt +-License: GPLv2+ and LGPLv2+ ++License: GPL-2.0-or-later AND LGPL-2.0-or-later + Summary: Fence agent for KubeVirt platform + Requires: python3-openshift >= 0.12.1 + Requires: fence-agents-common = %{version}-%{release} +@@ -967,7 +967,7 @@ Fence agent for KubeVirt platform. + %{_mandir}/man8/fence_kubevirt.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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -986,7 +986,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -1005,7 +1005,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} +@@ -1019,7 +1019,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -1040,7 +1040,7 @@ via telnet or SSH. + + %ifarch x86_64 ppc64le + %package openstack +-License: GPLv2+ and LGPLv2+ ++License: GPL-2.0-or-later AND LGPL-2.0-or-later + Summary: Fence agent for OpenStack's Nova service + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-requests +@@ -1057,7 +1057,7 @@ Fence agent for OpenStack's Nova service. + %endif + + %package ovh +-License: GPLv2+ and LGPLv2+ ++License: GPL-2.0-or-later AND LGPL-2.0-or-later + Summary: Fence agent for OVH provider + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + %if 0%{?suse_version} > 1500 +@@ -1078,7 +1078,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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-pycurl +@@ -1095,7 +1095,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 +@@ -1107,7 +1107,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 +@@ -1118,7 +1118,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} +@@ -1136,7 +1136,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 +@@ -1147,7 +1147,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -1167,7 +1167,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -1187,7 +1187,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} +@@ -1199,7 +1199,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} +@@ -1211,7 +1211,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} +@@ -1225,7 +1225,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} +@@ -1238,7 +1238,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} +@@ -1250,7 +1250,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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-pexpect +@@ -1266,7 +1266,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 +@@ -1278,7 +1278,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+ + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + %if 0%{?suse_version} > 1500 +@@ -1298,7 +1298,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 +@@ -1310,7 +1310,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: openssh-clients + %if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} +@@ -1330,7 +1330,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 + %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} + Requires: python3-pexpect +@@ -1350,7 +1350,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 +-- +2.25.1 + diff --git a/fence-agents.spec b/fence-agents.spec index 2045404..2801341 100644 --- a/fence-agents.spec +++ b/fence-agents.spec @@ -6,7 +6,7 @@ Name: fence-agents Summary: Set of unified programs capable of host isolation ("fencing") Version: 4.12.1 -Release: 9 +Release: 10 License: GPLv2+ and LGPLv2+ Group: System Environment/Base URL: https://github.com/ClusterLabs/fence-agents @@ -20,6 +20,8 @@ Patch5: backport-fence_scsi-Automatically-detect-devices-for-shared-VGs.patch Patch6: backport-fence_scsi-Add-support-for-space-separated-devices-and-update-in-meta-data.patch Patch7: backport-fence_azure_arm-add-stack-cloud-support.patch Patch8: backport-azure_fence-use-correct-credential_scope-and-profile.patch +Patch9: backport-spec-Migrate-to-SPDX-license.patch +Patch10: backport-fence_eaton_ssh-new-fence-agent-for-Eaton-ePDU-G3-over-ssh.patch # skipped: pve, raritan, rcd-serial, virsh %global allfenceagents %(cat < - 4.12.1-10 +- spec: Migrate to SPDX license +- fence_eaton_ssh: new fence agent for Eaton ePDU G3 over SSH + * Fri May 24 2024 liupei - 4.12.1-9 - fence_azure_arm:add stack cloud support - azure_fence: use correct credential_scope and profile for stack hub