diff --git a/agents/ecloud/fence_ecloud.py b/agents/ecloud/fence_ecloud.py
new file mode 100644
index 00000000..0707e102
--- /dev/null
+++ b/agents/ecloud/fence_ecloud.py
@@ -0,0 +1,169 @@
+#!@PYTHON@ -tt
+#
+# Fence agent for eCloud and eCloud VPC
+# https://www.ans.co.uk/cloud-and-infrastructure/ecloud/
+#
+# Copyright (c) 2022 ANS Group Limited
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+import sys
+import time
+import atexit
+import logging
+import requests
+sys.path.append("@FENCEAGENTSLIBDIR@")
+from fencing import *
+from fencing import run_delay, fail_usage, fail, EC_TIMED_OUT
+
+API_BASE = "https://api.ukfast.io/ecloud"
+API_MONITOR = API_BASE + "/ping"
+API_VPC_INSTANCE_DATA = API_BASE + "/v2/instances/:ID"
+API_VPC_POWER_ON = API_BASE + "/v2/instances/:ID/power-on"
+API_VPC_POWER_OFF = API_BASE + "/v2/instances/:ID/power-off"
+API_V1_INSTANCE_DATA = API_BASE + "/v1/vms/:ID"
+API_V1_POWER_ON = API_BASE + "/v1/vms/:ID/power-on"
+API_V1_POWER_OFF = API_BASE + "/v1/vms/:ID/power-off"
+
+
+def set_power_fn(conn, options):
+    logging.debug("setting power {}".format(options['--action']))
+    del conn
+
+    action = options['--action']
+    vpc = options['--ecloud-vpc']
+    plug = options['--plug']
+
+    url = fence_url(vpc, action, plug)
+    hdrs = headers(options['--apikey'])
+
+    logging.info("executing '{}' action on '{}'".format(action, plug))
+
+    retries = 0
+    while True:
+        resp = requests.put(url, headers=hdrs)
+        if resp.status_code == 409:
+            # If we attempt to power the instance back on too soon after powering it off,
+            # e.g. during a reboot, the API will return a 409 because while the power status
+            # has changed, the task is still executing. Retry the action until we exceed
+            # retries or get a different status code.
+            if retries >= 6:
+                logging.error("timed out trying to execute '{}' action after repeated 409 codes from API", action)
+                fail(EC_TIMED_OUT)
+
+            time.sleep(2)
+            retries += 1
+            continue
+
+        if resp.status_code != 202:
+            logging.error("unexpected status code '{}' from endpoint '{}': {}".format(
+                resp.status_code, url, resp.text
+            ))
+            
+        break
+
+
+def get_power_fn(conn, options):
+    logging.debug("getting power state")
+    del conn
+
+    vpc = options['--ecloud-vpc']
+    plug = options['--plug']
+
+    url = instance_data_url(vpc, plug)
+    hdrs = headers(options['--apikey'])
+
+    resp = requests.get(url, headers=hdrs)
+    if resp.status_code != 200:
+        logging.error("unexpected status code ('{}') from endpoint '{}': {}".format(
+            resp.status_code, url, resp.text
+        ))
+        return "bad status {}".format(resp.status_code)
+
+    instance = resp.json()['data']
+    if vpc:
+        logging.debug("power state return value: {}".format(instance['online']))
+        return "on" if instance['online'] else "off"
+    else:
+        if instance['power_status'] == "Online":
+            return "on"
+        elif instance['power_status'] == "Offline":
+            return "off"
+        else:
+            # Could be 'Unknown' or other value
+            return instance['power_status']
+
+
+def headers(apikey):
+    return {
+        "Authorization": apikey,
+        "User-Agent": "fence_ecloud"
+    }
+
+
+def itp(url, plug):
+    return url.replace(':ID', plug)
+
+
+def fence_url(vpc, action, plug):
+    if action == "on":
+        return itp(API_VPC_POWER_ON, plug) if vpc else itp(API_V1_POWER_ON, plug)
+    if action == "off":
+        return itp(API_VPC_POWER_OFF, plug) if vpc else itp(API_V1_POWER_OFF, plug)
+    
+    fail_usage("no available API configured for action '{}'".format(action))
+
+
+def instance_data_url(vpc, plug):
+    return itp(API_VPC_INSTANCE_DATA, plug) if vpc else itp(API_V1_INSTANCE_DATA, plug)
+
+
+def main():
+    device_opt = ["apikey", "port", "no_login", "no_password"]
+
+    all_opt["apikey"] = {
+        "getopt": ":",
+        "longopt": "apikey",
+        "help": "--apikey=[key]                 eCloud API Key",
+        "required": "1",
+        "shortdesc": "API Key",
+        "order": 0,
+    }
+    all_opt["port"]["help"] = "-n, --plug=[instance]          Instance ID (VPC) or server ID (v1)"
+
+    atexit.register(atexit_handler)
+
+    options = check_input(device_opt, process_input(device_opt))
+
+    docs = {}
+    docs["shortdesc"] = "Fence Agent for ANS eCloud"
+    docs["longdesc"] = "fence_ecloud is a fence agent for use with the ANS \
+eCloud platform which is compatible with eCloud VPC and eCloud v1."
+    docs["vendorurl"] = "https://www.ans.co.uk"
+    show_docs(options, docs)
+
+    if options['--action'] in ['on', 'off', 'reboot', 'status']:
+        plug = options['--plug']
+
+        options['--ecloud-vpc'] = True
+        if not plug.startswith("i-"):
+            options['--ecloud-vpc'] = False
+
+    run_delay(options)
+    fence_action(None, options, set_power_fn, get_power_fn)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/doc/COPYRIGHT b/doc/COPYRIGHT
index 7aac93c4..4594455b 100644
--- a/doc/COPYRIGHT
+++ b/doc/COPYRIGHT
@@ -1,82 +1,86 @@
 Unless specified otherwise in the "exceptions section" below:
 
 Copyright (C) 1997-2003 Sistina Software, Inc.  All rights reserved.
 Copyright (C) 2004-2011 Red Hat, Inc.  All rights reserved.
 
 Exceptions:
 
 agents/raritan_px3/*:
  Copyright (c) 2021 SUSE LLC
  Contributed by Thomas Renninger <trenn@suse.de>
 
 agents/ibmz/*:
  Copyright (c) 2020 IBM Corp.
  Contributed by Paulo de Rezende Pinatti <ppinatti at linux.ibm.com>
 
 agents/hds_cb/*:
  Copyright (C) 2012 Matthew Clark.
  Author: Matthew Clark <mattjclark0407 at hotmail.com>
  
 agents/xenapi/*:
  Copyright (C) 2011 Matthew Clark.
  Author: Matthew Clark <mattjclark0407 at hotmail.com>
  
 agents/apc_snmp/powernet369.mib:
  Copyright (c) 2005 American Power Conversion, Inc.
  PowerNet is a Trademark of American Power Conversion Corp.
 
 agents/eaton_snmp/fence_eaton_snmp.py:
  Copyright (c) 2011 eaton.com
  Author: Arnaud Quette <ArnaudQuette at Eaton.com>
 
 agents/ifmib/fence_ifmib.py:
  Copyright (C) 2008-2011 Ross Vandegrift.
  Written by Ross Vandegrift <ross at kallisti.us>
 
 agents/intelmodular/fence_intelmodular.pl:
  Contributed by Matthew Kent <matt at bravenet.com>
 
 agents/ipmilan/expect.{c,h}:
  Copyright (C) 2000 Alan Robertson <alanr at unix.sh>
 
 agents/node_assassin/*
  Copyright (C) 2009-2011 Madison Kelly/Alteeve's Niche!
  Author: Digimer <digimer at alteeve.com>
 
+agents/ecloud/fence_ecloud.py:
+ Copyright (C) 2022 ANS Group Limited
+ Author: Dane Elwell <dane.elwell@ans.co.uk>
+
 man/fence_ifmib.8:
  Copyright (C) 2008-2011 Ross Vandegrift.
  Written by Ross Vandegrift <ross at kallisti.us>
 
 Authors as known by current RCS as of the time of writing:
 
 Abhijith Das <adas at redhat.com>
 Adam Manthei <amanthei at redhat.com>
 A. J. Lewis <alewis at redhat.com>
 Alasdair G. Kergon <agk at redhat.com>
 Andrew Price <andy at andrewprice.me.uk>
 Benjamin Marzinski <bmarzins at redhat.com>
 Bob Peterson <rpeterso at redhat.com>
 Chris Feist <cfeist at redhat.com>
 Christine Caulfield <ccaulfie at redhat.com>
 Daniel Phillips <phillips at redhat.com>
 David Teigland <teigland at redhat.com>
 Fabio M. Di Nitto <fdinitto at redhat.com>
 James Parsons <jparsons at redhat.com>
 Joel Becker <joel.becker at oracle.com>
 Jonathan Brassow <jbrassow at redhat.com>
 jparsons <jparsons at redhat.com>
 Ken Preslan <kpreslan at redhat.com>
 Klaus Wenninger <kwenning at redhat.com>
 Lon Hohberger <lhh at redhat.com>
 Marc - A. Dahlhaus <mad at wol.de>
 Marek 'marx' Grac <mgrac at redhat.com>
 Mark Hlawatschek <hlawatschek at atix.de>
 Michael Conrad Tadpol Tilstra <mtilstra at redhat.com>
 Patrick Caulfield <pcaulfie at redhat.com>
 Robert Peterson <rpeterso at redhat.com>
 Ross Vandegrift <ross at kallisti.us>
 Ryan McCabe <rmccabe at redhat.com>
 Ryan O'Hara <rohara at redhat.com>
 Stanko Kupcevic <kupcevic at redhat.com>
 Steven Whitehouse <swhiteho at redhat.com>
 Wendy Cheng <wcheng at redhat.com>
diff --git a/fence-agents.spec.in b/fence-agents.spec.in
index 9bf009ff..34b14cb4 100644
--- a/fence-agents.spec.in
+++ b/fence-agents.spec.in
@@ -1,1428 +1,1446 @@
 ###############################################################################
 ###############################################################################
 ##
 ##  Copyright (C) 2019-2021 Red Hat, Inc.  All rights reserved.
 ##
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
 ##  of the GNU General Public License v.2.
 ##
 ###############################################################################
 ###############################################################################
 
 %global rcver @rcver@
 %global alphatag @alphatag@
 %global numcomm @numcomm@
 %global dirty @dirty@
 
 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+
 Group: System Environment/Base
 URL: https://github.com/ClusterLabs/fence-agents
 Source0: %{name}-%{version}%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.bz2
 
 %if 0%{?rhel} == 7
 %ifarch s390x
 %define rhel7_s390x 1
 %endif
 %endif
 
 %if 0%{?rhel} == 9
 %ifarch ppc64le s390x
 %define rhel9_ppc64le_s390x 1
 %endif
 %endif
 
 # skipped: pve, raritan, rcd-serial, virsh
 %global allfenceagents %(cat <<EOF
 fence-agents-alom \\
 fence-agents-amt \\
 fence-agents-amt-ws \\
 fence-agents-apc \\
 fence-agents-apc-snmp \\
 fence-agents-aws \\
 fence-agents-azure-arm \\
 fence-agents-bladecenter \\
 fence-agents-brocade \\
 fence-agents-cdu \\
 fence-agents-cisco-mds \\
 fence-agents-cisco-ucs \\
 fence-agents-cyberpower-ssh \\
 fence-agents-docker \\
 fence-agents-drac \\
 fence-agents-drac5 \\
 fence-agents-eaton-snmp \\
+fence-agents-ecloud \\
 fence-agents-emerson \\
 fence-agents-eps \\
 fence-agents-gce \\
 fence-agents-hds-cb \\
 fence-agents-heuristics-ping \\
 fence-agents-hpblade \\
 fence-agents-ibmblade \\
 fence-agents-ibmz \\
 fence-agents-ibm-powervs \\
 fence-agents-ibm-vpc \\
 fence-agents-ifmib \\
 fence-agents-ilo-moonshot \\
 fence-agents-ilo-mp \\
 fence-agents-ilo-ssh \\
 fence-agents-ilo2 \\
 fence-agents-intelmodular \\
 fence-agents-ipdu \\
 fence-agents-ipmilan \\
 fence-agents-kdump \\
 fence-agents-ldom \\
 fence-agents-lpar \\
 fence-agents-mpath \\
 fence-agents-netio \\
 fence-agents-ovh \\
 fence-agents-redfish \\
 fence-agents-rhevm \\
 fence-agents-rsa \\
 fence-agents-rsb \\
 fence-agents-sanbox2 \\
 fence-agents-sbd \\
 fence-agents-scsi \\
 fence-agents-vbox \\
 fence-virt \\
 fence-agents-vmware \\
 fence-agents-vmware-rest \\
 fence-agents-vmware-soap \\
 fence-agents-vmware-vcloud \\
 fence-agents-wti \\
 fence-agents-xenapi \\
 fence-agents-zvm \\
 
 EOF)
 
 %ifarch x86_64 ppc64le
 %global allfenceagents %(cat <<EOF
 %{allfenceagents} \\
 fence-agents-compute \\
 fence-agents-ironic \\
 fence-agents-openstack
 
 EOF)
 %endif
 
 %if ! %{defined rhel7_s390x}
 %global allfenceagents %(cat <<EOF
 %{allfenceagents} \\
 fence-agents-aws \\
 fence-agents-gce
 
 EOF)
 %endif
 
 # Build dependencies
 ## general
 BuildRequires: autoconf automake libtool make
 ## compiled code (-kdump)
 BuildRequires: gcc
 ## man pages generating
 BuildRequires: libxslt
 ## Python dependencies
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 BuildRequires: python3-devel
 BuildRequires: python3-httplib2 python3-pexpect python3-pycurl python3-requests
 %if 0%{?suse_version} > 1500
 BuildRequires: python3-suds-community
 %else
 BuildRequires: python3-suds
 %endif
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7
 BuildRequires: openwsman-python3
 %if ! %{defined rhel9_ppc64le_s390x}
 BuildRequires: python3-boto3
 %endif
 %endif
 %if 0%{?suse_version}
 BuildRequires: python3-openwsman python3-boto3
 %endif
 %else
 BuildRequires: python-devel
 BuildRequires: pexpect python-pycurl python-requests
 BuildRequires: python-suds openwsman-python
 %if ! %{defined rhel7_s390x}
 BuildRequires: python-boto3 python-httplib2
 %endif
 # (-openstack)
 %ifarch x86_64 ppc64le
 BuildRequires: python-novaclient python-keystoneclient
 %endif
 %endif
 
 # fence-virt
 %if 0%{?suse_version}
 %define nss_devel mozilla-nss-devel
 %define nspr_devel mozilla-nspr-devel
 %define systemd_units systemd
 %else
 %define nss_devel nss-devel
 %define nspr_devel nspr-devel
 %define systemd_units systemd-units
 %endif
 
 BuildRequires:  corosynclib-devel libvirt-devel
 BuildRequires:  libxml2-devel %{nss_devel} %{nspr_devel}
 BuildRequires:  flex bison libuuid-devel
 BuildRequires: %{systemd_units}
 
 
 # turn off the brp-python-bytecompile script
 # (for F28+ or equivalent, the latter is the preferred form)
 %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompilespace:.*$!!g')
 #undefine __brp_python_bytecompile
 
 %prep
 %setup -q -n %{name}-%{version}%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}
 %autopatch -p1
 # prevent compilation of something that won't get used anyway
 sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac
 
 %build
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 	export PYTHON="%{__python3}"
 %endif
 
 ./autogen.sh
 %{configure} \
 %if %{defined _tmpfilesdir}
 	SYSTEMD_TMPFILES_DIR=%{_tmpfilesdir} \
 	--with-fencetmpdir=/run/fence-agents \
 %endif
 	--disable-libvirt-qmf-plugin
 
 CFLAGS="$(echo '%{optflags}')" make %{_smp_mflags}
 
 %install
 rm -rf %{buildroot}
 make install DESTDIR=%{buildroot}
 mkdir -p %{buildroot}/%{_unitdir}/
 install -m 0644 agents/virt/fence_virtd.service %{buildroot}/%{_unitdir}/
 # bytecompile Python source code in a non-standard location
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7
 %py_byte_compile %{__python3} %{buildroot}%{_datadir}/fence
 %endif
 # XXX unsure if /usr/sbin/fence_* should be compiled as well
 
 ## tree fix up
 # fix libfence permissions
 chmod 0755 %{buildroot}%{_datadir}/fence/*.py
 # remove docs
 rm -rf %{buildroot}/usr/share/doc/fence-agents
 # remove .a files
 rm -f %{buildroot}/%{_libdir}/%{name}/*.*a
 rm -f %{buildroot}/%{_libdir}/fence-virt/*.*a
 
 %post
 ccs_update_schema > /dev/null 2>&1 ||:
 # https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
 if [ $1 -eq 1 ] ; then
     # Initial installation
     /bin/systemctl daemon-reload >/dev/null 2>&1 || :
 fi
 
 %preun
 # https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
 if [ $1 -eq 0 ] ; then
     # Package removal, not upgrade
     /bin/systemctl --no-reload disable fence_virtd.service &> /dev/null || :
     /bin/systemctl stop fence_virtd.service &> /dev/null || :
 fi
 
 %postun
 # https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
 /bin/systemctl daemon-reload &> /dev/null || :
 if [ $1 -ge 1 ] ; then
     # Package upgrade, not uninstall
     /bin/systemctl try-restart fence_virtd.service &> /dev/null || :
 fi
 
 %triggerun -- fence_virtd < 0.3.0-1
 # https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Packages_migrating_to_a_systemd_unit_file_from_a_SysV_initscript
 /usr/bin/systemd-sysv-convert --save fence_virtd &> /dev/null || :
 /sbin/chkconfig --del fence_virtd &> /dev/null || :
 /bin/systemctl daemon-reload >/dev/null 2>&1 || :
 /bin/systemctl try-restart fence_virtd.service &> /dev/null || :
 
 %description
 A collection of executables to handle isolation ("fencing") of possibly
 misbehaving hosts by the means of remote power management, blocking
 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+
 Summary: Common base for Fence Agents
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-pexpect python3-pycurl
 %else
 Requires: pexpect python-pycurl
 %endif
 BuildArch: noarch
 %description common
 A collection of executables to handle isolation ("fencing") of possibly
 misbehaving hosts by the means of remote power management, blocking
 network, storage, or similar.
 
 This package contains support files including the Python fencing library.
 %files common
 %doc doc/COPYING.* doc/COPYRIGHT doc/README.licence
 %{_datadir}/fence
 %exclude %{_datadir}/fence/azure_fence.*
 %exclude %{_datadir}/fence/__pycache__/azure_fence.*
 %exclude %{_datadir}/fence/XenAPI.*
 %exclude %{_datadir}/fence/__pycache__/XenAPI.*
 %{_datadir}/cluster
 %exclude %{_datadir}/cluster/fence_mpath_check*
 %exclude %{_datadir}/cluster/fence_scsi_check*
 %{_datadir}/pkgconfig/%{name}.pc
 %exclude %{_sbindir}/*
 %exclude %{_mandir}/man8/*
 %if %{defined _tmpfilesdir}
 %{_tmpfilesdir}/%{name}.conf
 %endif
 %if %{defined _tmpfilesdir}
 %dir %attr (1755, root, root)	/run/%{name}
 %else
 %dir %attr (1755, root, root)	%{_var}/run/%{name}
 %endif
 
 %package all
 License: GPLv2+ and LGPLv2+ and ASL 2.0
 Summary: Set of unified programs capable of host isolation ("fencing")
 Requires: %{allfenceagents}
 Provides: fence-agents = %{version}-%{release}
 Obsoletes: fence-agents < 3.1.13
 %description all
 A collection of executables to handle isolation ("fencing") of possibly
 misbehaving hosts by the means of remote power management, blocking
 network, storage, or similar.
 
 This package serves as a catch-all for all supported fence agents.
 %files all
 
 %ifarch x86_64
 %package aliyun
 License: GPLv2+ and LGPLv2+ and ASL 2.0 and BSD and MIT
 Group: System Environment/Base
 Summary: Fence agent for Alibaba Cloud (Aliyun)
 Requires: fence-agents-common >= %{version}-%{release}
 Requires: python3-jmespath >= 0.9.0
 Obsoletes: %{name} < %{version}-%{release}
 %description aliyun
 The fence-agents-aliyun package contains a fence agent for Alibaba Cloud (Aliyun) instances.
 %files aliyun
 %defattr(-,root,root,-)
 %{_sbindir}/fence_aliyun
 %{_mandir}/man8/fence_aliyun.8*
 %endif
 
 %package alom
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description alom
 Fence agent for SUN ALOM.
 %files alom
 %{_sbindir}/fence_alom
 %{_mandir}/man8/fence_alom.8*
 
 %package amt
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Intel AMT devices
 Requires: amtterm
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description amt
 Fence agent for AMT compatibile devices that are accessed via
 3rd party software.
 %files amt
 %{_sbindir}/fence_amt
 %{_mandir}/man8/fence_amt.8*
 
 %package amt-ws
 License: ASL 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}
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7
 Requires: openwsman-python3
 %endif
 %if 0%{?suse_version}
 Requires: python3-openwsman
 %endif
 %else
 Requires: openwsman-python
 %endif
 BuildArch: noarch
 %description amt-ws
 Fence agent for AMT (WS-Man) devices.
 %files amt-ws
 %{_sbindir}/fence_amt_ws
 %{_mandir}/man8/fence_amt_ws.8*
 
 %package apc
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description apc
 Fence agent for APC devices that are accessed via telnet or SSH.
 %files apc
 %{_sbindir}/fence_apc
 %{_mandir}/man8/fence_apc.8*
 
 %package apc-snmp
 License: GPLv2+ and LGPLv2+
 Summary: Fence agents for APC devices (SNMP)
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description apc-snmp
 Fence agents for APC devices that are accessed via the SNMP protocol.
 %files apc-snmp
 %{_sbindir}/fence_apc_snmp
 %{_mandir}/man8/fence_apc_snmp.8*
 %{_sbindir}/fence_tripplite_snmp
 %{_mandir}/man8/fence_tripplite_snmp.8*
 
 %if ! %{defined rhel7_s390x}
 %package aws
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Amazon AWS
 Requires: fence-agents-common = %{version}-%{release}
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-boto3
 %else
 Requires: python-boto3
 %endif
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
 %description aws
 Fence agent for Amazon AWS instances.
 %files aws
 %{_sbindir}/fence_aws
 %{_mandir}/man8/fence_aws.8*
 %endif
 
 %package azure-arm
 License: GPLv2+ and LGPLv2+
 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}
 %if 0%{?fedora} > 34
 Requires: python3-azure-common
 Requires: python3-azure-identity
 Requires: python3-azure-mgmt-compute
 Requires: python3-azure-mgmt-network
 Requires: python3-msrestazure
 %else
 Requires: python3-azure-sdk
 %endif
 %else
 Requires: python-azure-sdk
 %endif
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
 %description azure-arm
 Fence agent for Azure Resource Manager instances.
 %files azure-arm
 %{_sbindir}/fence_azure_arm
 %{_datadir}/fence/azure_fence.py*
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7
 %{_datadir}/fence/__pycache__/azure_fence.*
 %endif
 %{_mandir}/man8/fence_azure_arm.8*
 
 %package bladecenter
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description bladecenter
 Fence agent for IBM BladeCenter devices that are accessed
 via telnet or SSH.
 %files bladecenter
 %{_sbindir}/fence_bladecenter
 %{_mandir}/man8/fence_bladecenter.8*
 
 %package brocade
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description brocade
 Fence agent for Brocade devices that are accessed via telnet or SSH.
 %files brocade
 %{_sbindir}/fence_brocade
 %{_mandir}/man8/fence_brocade.8*
 
 %package cdu
 License: GPLv3-only
 Summary: Fence agent for a Sentry Switch CDU
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description cdu
 Fence agent for Sentry Switch CDU power switch.
 %files cdu
 %{_sbindir}/fence_cdu
 %{_mandir}/man8/fence_cdu.8*
 
 %package cisco-mds
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Cisco MDS 9000 series
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description cisco-mds
 Fence agent for Cisco MDS 9000 series devices that are accessed
 via the SNMP protocol.
 %files cisco-mds
 %{_sbindir}/fence_cisco_mds
 %{_mandir}/man8/fence_cisco_mds.8*
 
 %package cisco-ucs
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Cisco UCS series
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-pycurl
 %else
 Requires: python-pycurl
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description cisco-ucs
 Fence agent for Cisco UCS series devices that are accessed
 via the SNMP protocol.
 %files cisco-ucs
 %{_sbindir}/fence_cisco_ucs
 %{_mandir}/man8/fence_cisco_ucs.8*
 
 %ifarch x86_64 ppc64le
 %package compute
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Nova compute nodes
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-requests
 Requires: python3-novaclient
 %else
 Requires: python-requests
 Requires: python2-novaclient
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description compute
 Fence agent for Nova compute nodes.
 %files compute
 %{_sbindir}/fence_compute
 %{_sbindir}/fence_evacuate
 %{_mandir}/man8/fence_compute.8*
 %{_mandir}/man8/fence_evacuate.8*
 %endif
 
 %package cyberpower-ssh
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for CyberPower network PDUs
 Requires: openssh-clients
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description cyberpower-ssh
 %files cyberpower-ssh
 %{_sbindir}/fence_cyberpower_ssh
 %{_mandir}/man8/fence_cyberpower_ssh.8*
 
 %package docker
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Docker
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-pycurl
 %else
 Requires: python-pycurl
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description docker
 Fence agent for Docker images that are accessed over HTTP.
 %files docker
 %{_sbindir}/fence_docker
 %{_mandir}/man8/fence_docker.8*
 
 %package drac
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Dell DRAC
 Requires: telnet
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description drac
 Fence agent for Dell DRAC IV series devices that are accessed
 via telnet.
 %files drac
 %{_sbindir}/fence_drac
 %{_mandir}/man8/fence_drac.8*
 
 %package drac5
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description drac5
 Fence agent for Dell DRAC 5 series devices that are accessed
 via telnet or SSH.
 %files drac5
 %{_sbindir}/fence_drac5
 %{_mandir}/man8/fence_drac5.8*
 
 %package eaton-snmp
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Eaton network power switches
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description eaton-snmp
 Fence agent for Eaton network power switches that are accessed
 via the SNMP protocol.
 %files eaton-snmp
 %{_sbindir}/fence_eaton_snmp
 %{_mandir}/man8/fence_eaton_snmp.8*
 
+%package ecloud
+License: GPLv2+ and LGPLv2+
+Summary: Fence agent for eCloud and eCloud VPC
+Requires: python3-requests
+%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
+Requires: python3-requests
+%else
+Requires: python-requests
+%endif
+Requires: fence-agents-common = %{version}-%{release}
+BuildArch: noarch
+%description ecloud
+Fence agent for eCloud and eCloud VPC from ANS Group Limited
+%files ecloud
+%{_sbindir}/fence_ecloud
+%{_mandir}/man8/fence_ecloud.8*
+
 %package emerson
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Emerson devices (SNMP)
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description emerson
 Fence agent for Emerson devices that are accessed via
 the SNMP protocol.
 %files emerson
 %{_sbindir}/fence_emerson
 %{_mandir}/man8/fence_emerson.8*
 
 %package eps
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for ePowerSwitch 8M+ power switches
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description eps
 Fence agent for ePowerSwitch 8M+ power switches that are accessed
 via the HTTP(s) protocol.
 %files eps
 %{_sbindir}/fence_eps
 %{_mandir}/man8/fence_eps.8*
 
 %if ! %{defined rhel7_s390x}
 %package gce
 License: GPLv2+ and LGPLv2+
 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}
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7
 Requires: python3-google-api-client
 %endif
 %if 0%{?suse_version}
 Requires: python3-google-api-python-client
 %endif
 %else
 Requires: python-google-api-client
 %endif
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
 %description gce
 Fence agent for GCE (Google Cloud Engine) instances.
 %files gce
 %{_sbindir}/fence_gce
 %{_mandir}/man8/fence_gce.8*
 %endif
 
 %package hds-cb
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Hitachi Compute Blade systems
 Requires: telnet
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description hds-cb
 Fence agent for Hitachi Compute Blades that are accessed via telnet.
 %files hds-cb
 %{_sbindir}/fence_hds_cb
 %{_mandir}/man8/fence_hds_cb.8*
 
 %package heuristics-ping
 License: GPLv2+ and LGPLv2+
 Summary: Pseudo fence agent to affect other agents based on ping-heuristics
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
 %description heuristics-ping
 Fence pseudo agent used to affect other agents based on
 ping-heuristics.
 %files heuristics-ping
 %{_sbindir}/fence_heuristics_ping
 %{_mandir}/man8/fence_heuristics_ping.8*
 
 %package hpblade
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description hpblade
 Fence agent for HP BladeSystem devices that are accessed via telnet
 or SSH.
 %files hpblade
 %{_sbindir}/fence_hpblade
 %{_mandir}/man8/fence_hpblade.8*
 
 %package ibmblade
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for IBM BladeCenter
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ibmblade
 Fence agent for IBM BladeCenter devices that are accessed
 via the SNMP protocol.
 %files ibmblade
 %{_sbindir}/fence_ibmblade
 %{_mandir}/man8/fence_ibmblade.8*
 
 %package ibmz
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for IBM z LPARs
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-requests
 %else
 Requires: python-requests
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ibmz
 Fence agent for IBM z LPARs that are accessed via the HMC
 Web Services REST API.
 %files ibmz
 %{_sbindir}/fence_ibmz
 %{_mandir}/man8/fence_ibmz.8*
 
 %package ibm-powervs
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for IBM PowerVS
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ibm-powervs
 Fence agent for IBM PowerVS that are accessed via REST API.
 %files ibm-powervs
 %{_sbindir}/fence_ibm_powervs
 %{_mandir}/man8/fence_ibm_powervs.8*
 
 %package ibm-vpc
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for IBM Cloud VPC
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ibm-vpc
 Fence agent for IBM Cloud VPC that are accessed via REST API.
 %files ibm-vpc
 %{_sbindir}/fence_ibm_vpc
 %{_mandir}/man8/fence_ibm_vpc.8*
 
 %package ifmib
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for devices with IF-MIB interfaces
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ifmib
 Fence agent for IF-MIB interfaces that are accessed via
 the SNMP protocol.
 %files ifmib
 %{_sbindir}/fence_ifmib
 %{_mandir}/man8/fence_ifmib.8*
 
 %package ilo2
 License: GPLv2+ and LGPLv2+
 Summary: Fence agents for HP iLO2 devices
 Requires: gnutls-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ilo2
 Fence agents for HP iLO2 devices that are accessed via
 the HTTP(s) protocol.
 %files ilo2
 %{_sbindir}/fence_ilo
 %{_sbindir}/fence_ilo2
 %{_mandir}/man8/fence_ilo.8*
 %{_mandir}/man8/fence_ilo2.8*
 
 %package ilo-moonshot
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ilo-moonshot
 Fence agent for HP iLO Moonshot devices that are accessed
 via telnet or SSH.
 %files ilo-moonshot
 %{_sbindir}/fence_ilo_moonshot
 %{_mandir}/man8/fence_ilo_moonshot.8*
 
 %package ilo-mp
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ilo-mp
 Fence agent for HP iLO MP devices that are accessed via telnet or SSH.
 %files ilo-mp
 %{_sbindir}/fence_ilo_mp
 %{_mandir}/man8/fence_ilo_mp.8*
 
 %package ilo-ssh
 License: GPLv2+ and LGPLv2+
 Summary: Fence agents for HP iLO devices over SSH
 Requires: openssh-clients
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ilo-ssh
 Fence agents for HP iLO devices that are accessed via telnet or SSH.
 %files ilo-ssh
 %{_sbindir}/fence_ilo_ssh
 %{_mandir}/man8/fence_ilo_ssh.8*
 %{_sbindir}/fence_ilo3_ssh
 %{_mandir}/man8/fence_ilo3_ssh.8*
 %{_sbindir}/fence_ilo4_ssh
 %{_mandir}/man8/fence_ilo4_ssh.8*
 %{_sbindir}/fence_ilo5_ssh
 %{_mandir}/man8/fence_ilo5_ssh.8*
 
 %package intelmodular
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for devices with Intel Modular interfaces
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description intelmodular
 Fence agent for Intel Modular interfaces that are accessed
 via the SNMP protocol.
 %files intelmodular
 %{_sbindir}/fence_intelmodular
 %{_mandir}/man8/fence_intelmodular.8*
 
 %package ipdu
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for IBM iPDU network power switches
 Requires: net-snmp-utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ipdu
 Fence agent for IBM iPDU network power switches that are accessed
 via the SNMP protocol.
 %files ipdu
 %{_sbindir}/fence_ipdu
 %{_mandir}/man8/fence_ipdu.8*
 
 %package ipmilan
 License: GPLv2+ and LGPLv2+
 Summary: Fence agents for devices with IPMI interface
 Requires: /usr/bin/ipmitool
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ipmilan
 Fence agents for devices with IPMI interface.
 %files ipmilan
 %{_sbindir}/fence_ipmilan
 %{_mandir}/man8/fence_ipmilan.8*
 %{_sbindir}/fence_idrac
 %{_mandir}/man8/fence_idrac.8*
 %{_sbindir}/fence_ilo3
 %{_mandir}/man8/fence_ilo3.8*
 %{_sbindir}/fence_ilo4
 %{_mandir}/man8/fence_ilo4.8*
 %{_sbindir}/fence_ilo5
 %{_mandir}/man8/fence_ilo5.8*
 %{_sbindir}/fence_ipmilanplus
 %{_mandir}/man8/fence_ipmilanplus.8*
 %{_sbindir}/fence_imm
 %{_mandir}/man8/fence_imm.8*
 
 %ifarch x86_64 ppc64le
 %package ironic
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for OpenStack's Ironic (Bare Metal as a service)
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ironic
 Fence agent for OpenStack's Ironic (Bare Metal as a service) service.
 %files ironic
 %{_sbindir}/fence_ironic
 %{_mandir}/man8/fence_ironic.8*
 %endif
 
 %package kdump
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for use with kdump crash recovery service
 Requires: fence-agents-common = %{version}-%{release}
 # this cannot be noarch since it's compiled
 %description kdump
 Fence agent for use with kdump crash recovery service.
 %files kdump
 %{_sbindir}/fence_kdump
 %{_libexecdir}/fence_kdump_send
 %{_mandir}/man8/fence_kdump.8*
 %{_mandir}/man8/fence_kdump_send.8*
 
 %package kubevirt
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for KubeVirt platform
 Requires: python3-openshift >= 0.12.1
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description kubevirt
 Fence agent for KubeVirt platform.
 %files kubevirt
 %{_sbindir}/fence_kubevirt
 %{_mandir}/man8/fence_kubevirt.8*
 
 %package ldom
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ldom
 Fence agent for APC devices that are accessed via telnet or SSH.
 %files ldom
 %{_sbindir}/fence_ldom
 %{_mandir}/man8/fence_ldom.8*
 
 %package lpar
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description lpar
 Fence agent for IBM LPAR devices that are accessed via telnet or SSH.
 %files lpar
 %{_sbindir}/fence_lpar
 %{_mandir}/man8/fence_lpar.8*
 
 %package mpath
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for reservations over Device Mapper Multipath
 Requires: device-mapper-multipath
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description mpath
 Fence agent for SCSI persistent reservation over
 Device Mapper Multipath.
 %files mpath
 %{_sbindir}/fence_mpath
 %{_datadir}/cluster/fence_mpath_check*
 %{_mandir}/man8/fence_mpath.8*
 
 %package netio
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description netio
 Fence agent for Koukaam NETIO devices that are accessed
 via telnet or SSH.
 %files netio
 %{_sbindir}/fence_netio
 %{_mandir}/man8/fence_netio.8*
 
 %ifarch x86_64 ppc64le
 %package openstack
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for OpenStack's Nova service
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-requests
 %else
 Requires: python-requests
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description openstack
 Fence agent for OpenStack's Nova service.
 %files openstack
 %{_sbindir}/fence_openstack
 %{_mandir}/man8/fence_openstack.8*
 %endif
 
 %package ovh
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for OVH provider
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 %if 0%{?suse_version} > 1500
 Requires: python3-suds-community
 %else
 Requires: python3-suds
 %endif
 %else
 Requires: python-suds
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description ovh
 Fence agent for OVH hosting provider.
 %files ovh
 %{_sbindir}/fence_ovh
 %{_mandir}/man8/fence_ovh.8*
 
 # skipped from allfenceagents
 %package pve
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for PVE
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-pycurl
 %else
 Requires: python-pycurl
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description pve
 Fence agent for PVE.
 %files pve
 %{_sbindir}/fence_pve
 %{_mandir}/man8/fence_pve.8*
 
 # skipped from allfenceagents
 %package raritan
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Raritan Dominion PX
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description raritan
 Fence agent for Raritan Dominion PX.
 %files raritan
 %{_sbindir}/fence_raritan
 %{_mandir}/man8/fence_raritan.8*
 
 # skipped from allfenceagents
 %package rcd-serial
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for RCD serial
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description rcd-serial
 Fence agent for RCD serial.
 %files rcd-serial
 %{_sbindir}/fence_rcd_serial
 %{_mandir}/man8/fence_rcd_serial.8*
 
 %package redfish
 License: GPLv2+ and LGPLv2+
 Group: System Environment/Base
 Summary: Fence agent for Redfish
 Requires: fence-agents-common >= %{version}-%{release}
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-requests
 %else
 Requires: python-requests
 %endif
 Obsoletes: fence-agents < 3.1.13
 %description redfish
 The fence-agents-redfish package contains a fence agent for Redfish
 %files redfish
 %defattr(-,root,root,-)
 %{_sbindir}/fence_redfish
 %{_mandir}/man8/fence_redfish.8*
 
 %package rhevm
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for RHEV-M
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description rhevm
 Fence agent for RHEV-M via REST API.
 %files rhevm
 %{_sbindir}/fence_rhevm
 %{_mandir}/man8/fence_rhevm.8*
 
 %package rsa
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description rsa
 Fence agent for IBM RSA II devices that are accessed
 via telnet or SSH.
 %files rsa
 %{_sbindir}/fence_rsa
 %{_mandir}/man8/fence_rsa.8*
 
 %package rsb
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description rsb
 Fence agent for Fujitsu RSB devices that are accessed
 via telnet or SSH.
 %files rsb
 %{_sbindir}/fence_rsb
 %{_mandir}/man8/fence_rsb.8*
 
 %package sanbox2
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for QLogic SANBox2 FC switches
 Requires: telnet
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description sanbox2
 Fence agent for QLogic SANBox2 switches that are accessed via telnet.
 %files sanbox2
 %{_sbindir}/fence_sanbox2
 %{_mandir}/man8/fence_sanbox2.8*
 
 %package sbd
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for SBD (storage-based death)
 Requires: sbd
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description sbd
 Fence agent for SBD (storage-based death).
 %files sbd
 %{_sbindir}/fence_sbd
 %{_mandir}/man8/fence_sbd.8*
 
 %package scsi
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for SCSI persistent reservations
 Requires: sg3_utils
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description scsi
 Fence agent for SCSI persistent reservations.
 %files scsi
 %{_sbindir}/fence_scsi
 %{_datadir}/cluster/fence_scsi_check
 %{_datadir}/cluster/fence_scsi_check_hardreboot
 %{_mandir}/man8/fence_scsi.8*
 
 %package vbox
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for VirtualBox
 Requires: openssh-clients
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description vbox
 Fence agent for VirtualBox dom0 accessed via SSH.
 %files vbox
 %{_sbindir}/fence_vbox
 %{_mandir}/man8/fence_vbox.8*
 
 # skipped from allfenceagents
 %package virsh
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for virtual machines based on libvirt
 Requires: openssh-clients /usr/bin/virsh
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description virsh
 Fence agent for virtual machines that are accessed via SSH.
 %files virsh
 %{_sbindir}/fence_virsh
 %{_mandir}/man8/fence_virsh.8*
 
 %package vmware
 License: GPLv2+ and LGPLv2+
 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
 %else
 Requires: pexpect
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description vmware
 Fence agent for VMWare accessed with VI Perl Toolkit or vmrun.
 %files vmware
 %{_sbindir}/fence_vmware
 %{_mandir}/man8/fence_vmware.8*
 
 %package vmware-rest
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for VMWare with REST API
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
 %description vmware-rest
 Fence agent for VMWare with REST API.
 %files vmware-rest
 %{_sbindir}/fence_vmware_rest
 %{_mandir}/man8/fence_vmware_rest.8*
 
 %package vmware-soap
 License: GPLv2+ and LGPLv2+
 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
 Requires: python3-suds-community
 %else
 Requires: python3-suds
 %endif
 %else
 Requires: python-suds
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description vmware-soap
 Fence agent for VMWare with SOAP API v4.1+.
 %files vmware-soap
 %{_sbindir}/fence_vmware_soap
 %{_mandir}/man8/fence_vmware_soap.8*
 
 %package vmware-vcloud
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for VMWare vCloud Director
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
 %description vmware-vcloud
 Fence agent for VMWare vCloud Director.
 %files vmware-vcloud
 %{_sbindir}/fence_vmware_vcloud
 %{_mandir}/man8/fence_vmware_vcloud.8*
 
 %package wti
 License: GPLv2+ and LGPLv2+
 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}
 %if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8)
 Requires: telnet
 %else
 Recommends: telnet
 %endif
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description wti
 Fence agent for WTI network power switches that are accessed
 via telnet or SSH.
 %files wti
 %{_sbindir}/fence_wti
 %{_mandir}/man8/fence_wti.8*
 
 %package xenapi
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for Citrix XenServer over XenAPI
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version}
 Requires: python3-pexpect
 %else
 Requires: pexpect
 %endif
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description xenapi
 Fence agent for Citrix XenServer accessed over XenAPI.
 %files xenapi
 %{_sbindir}/fence_xenapi
 %{_datadir}/fence/XenAPI.py*
 %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7
 %{_datadir}/fence/__pycache__/XenAPI.*
 %endif
 %{_mandir}/man8/fence_xenapi.8*
 
 %package zvm
 License: GPLv2+ and LGPLv2+
 Summary: Fence agent for IBM z/VM over IP
 Requires: fence-agents-common = %{version}-%{release}
 BuildArch: noarch
 %description zvm
 Fence agent for IBM z/VM over IP.
 %files zvm
 %{_sbindir}/fence_zvmip
 %{_mandir}/man8/fence_zvmip.8*
 
 # fence-virt
 
 %package -n fence-virt
 Summary: A pluggable fencing framework for virtual machines
 Requires(post):	systemd-sysv %{systemd_units}
 Requires(preun):	%{systemd_units}
 Requires(postun):	%{systemd_units}
 %description -n fence-virt
 Fencing agent for virtual machines.
 %files -n fence-virt
 %doc agents/virt/docs/*
 %{_sbindir}/fence_virt
 %{_sbindir}/fence_xvm
 %{_mandir}/man8/fence_virt.*
 %{_mandir}/man8/fence_xvm.*
 
 %package -n fence-virtd
 Summary: Daemon which handles requests from fence-virt
 %description -n fence-virtd
 This package provides the host server framework, fence_virtd,
 for fence_virt.  The fence_virtd host daemon is resposible for
 processing fencing requests from virtual machines and routing
 the requests to the appropriate physical machine for action.
 %files -n fence-virtd
 %{_sbindir}/fence_virtd
 %{_unitdir}/fence_virtd.service
 %config(noreplace) %{_sysconfdir}/fence_virt.conf
 %dir %{_libdir}/fence-virt
 %{_libdir}/fence-virt/vsock.so
 %{_mandir}/man5/fence_virt.conf.*
 %{_mandir}/man8/fence_virtd.*
 
 %package -n fence-virtd-multicast
 Summary:  Multicast listener for fence-virtd
 Requires: fence-virtd
 %description -n fence-virtd-multicast
 Provides multicast listener capability for fence-virtd.
 %files -n fence-virtd-multicast
 %{_libdir}/fence-virt/multicast.so
 
 %package -n fence-virtd-serial
 Summary:  Serial VMChannel listener for fence-virtd
 Requires: libvirt >= 0.6.2
 Requires: fence-virtd
 %description -n fence-virtd-serial
 Provides serial VMChannel listener capability for fence-virtd.
 %files -n fence-virtd-serial
 %{_libdir}/fence-virt/serial.so
 
 %package -n fence-virtd-tcp
 Summary:  TCP listener for fence-virtd
 Requires: fence-virtd
 %description -n fence-virtd-tcp
 Provides TCP listener capability for fence-virtd.
 %files -n fence-virtd-tcp
 %{_libdir}/fence-virt/tcp.so
 
 %package -n fence-virtd-libvirt
 Summary:  Libvirt backend for fence-virtd
 Requires: libvirt >= 0.6.0
 Requires: fence-virtd
 %description -n fence-virtd-libvirt
 Provides fence_virtd with a connection to libvirt to fence
 virtual machines.  Useful for running a cluster of virtual
 machines on a desktop.
 %files -n fence-virtd-libvirt
 %{_libdir}/fence-virt/virt.so
 
 %package -n fence-virtd-cpg
 Summary:  CPG/libvirt backend for fence-virtd
 Requires: corosynclib
 Requires: fence-virtd
 %description -n fence-virtd-cpg
 Provides fence_virtd with a connection to libvirt to fence
 virtual machines. Uses corosync CPG to keep track of VM
 locations to allow for non-local VMs to be fenced when VMs
 are located on corosync cluster nodes.
 %files -n fence-virtd-cpg
 %{_libdir}/fence-virt/cpg.so
 
 %changelog
 * @date@ Autotools generated version <nobody@nowhere.org> - @version@-@specver@-@numcomm@.@alphatag@.@dirty@
 - Autotools generated version
diff --git a/tests/data/metadata/fence_ecloud.xml b/tests/data/metadata/fence_ecloud.xml
new file mode 100644
index 00000000..4d3e1548
--- /dev/null
+++ b/tests/data/metadata/fence_ecloud.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" ?>
+<resource-agent name="fence_ecloud" shortdesc="Fence Agent for ANS eCloud" >
+<longdesc>fence_ecloud is a fence agent for use with the ANS eCloud platform which is compatible with eCloud VPC and eCloud v1.</longdesc>
+<vendor-url>https://www.ans.co.uk</vendor-url>
+<parameters>
+	<parameter name="apikey" unique="0" required="1">
+		<getopt mixed="--apikey=[key]" />
+		<content type="string"  />
+		<shortdesc lang="en">API Key</shortdesc>
+	</parameter>
+	<parameter name="action" unique="0" required="1">
+		<getopt mixed="-o, --action=[action]" />
+		<content type="string" default="reboot"  />
+		<shortdesc lang="en">Fencing action</shortdesc>
+	</parameter>
+	<parameter name="plug" unique="0" required="1" obsoletes="port">
+		<getopt mixed="-n, --plug=[instance]" />
+		<content type="string"  />
+		<shortdesc lang="en">Instance ID (VPC) or server ID (v1)</shortdesc>
+	</parameter>
+	<parameter name="port" unique="0" required="1" deprecated="1">
+		<getopt mixed="-n, --plug=[instance]" />
+		<content type="string"  />
+		<shortdesc lang="en">Instance ID (VPC) or server ID (v1)</shortdesc>
+	</parameter>
+	<parameter name="quiet" unique="0" required="0">
+		<getopt mixed="-q, --quiet" />
+		<content type="boolean"  />
+		<shortdesc lang="en">Disable logging to stderr. Does not affect --verbose or --debug-file or logging to syslog.</shortdesc>
+	</parameter>
+	<parameter name="verbose" unique="0" required="0">
+		<getopt mixed="-v, --verbose" />
+		<content type="boolean"  />
+		<shortdesc lang="en">Verbose mode. Multiple -v flags can be stacked on the command line (e.g., -vvv) to increase verbosity.</shortdesc>
+	</parameter>
+	<parameter name="verbose_level" unique="0" required="0">
+		<getopt mixed="--verbose-level" />
+		<content type="integer"  />
+		<shortdesc lang="en">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).</shortdesc>
+	</parameter>
+	<parameter name="debug" unique="0" required="0" deprecated="1">
+		<getopt mixed="-D, --debug-file=[debugfile]" />
+		<content type="string"  />
+		<shortdesc lang="en">Write debug information to given file</shortdesc>
+	</parameter>
+	<parameter name="debug_file" unique="0" required="0" obsoletes="debug">
+		<getopt mixed="-D, --debug-file=[debugfile]" />
+		<shortdesc lang="en">Write debug information to given file</shortdesc>
+	</parameter>
+	<parameter name="version" unique="0" required="0">
+		<getopt mixed="-V, --version" />
+		<content type="boolean"  />
+		<shortdesc lang="en">Display version information and exit</shortdesc>
+	</parameter>
+	<parameter name="help" unique="0" required="0">
+		<getopt mixed="-h, --help" />
+		<content type="boolean"  />
+		<shortdesc lang="en">Display help and exit</shortdesc>
+	</parameter>
+	<parameter name="separator" unique="0" required="0">
+		<getopt mixed="-C, --separator=[char]" />
+		<content type="string" default=","  />
+		<shortdesc lang="en">Separator for CSV created by 'list' operation</shortdesc>
+	</parameter>
+	<parameter name="delay" unique="0" required="0">
+		<getopt mixed="--delay=[seconds]" />
+		<content type="second" default="0"  />
+		<shortdesc lang="en">Wait X seconds before fencing is started</shortdesc>
+	</parameter>
+	<parameter name="disable_timeout" unique="0" required="0">
+		<getopt mixed="--disable-timeout=[true/false]" />
+		<content type="string"  />
+		<shortdesc lang="en">Disable timeout (true/false) (default: true when run from Pacemaker 2.0+)</shortdesc>
+	</parameter>
+	<parameter name="login_timeout" unique="0" required="0">
+		<getopt mixed="--login-timeout=[seconds]" />
+		<content type="second" default="5"  />
+		<shortdesc lang="en">Wait X seconds for cmd prompt after login</shortdesc>
+	</parameter>
+	<parameter name="power_timeout" unique="0" required="0">
+		<getopt mixed="--power-timeout=[seconds]" />
+		<content type="second" default="20"  />
+		<shortdesc lang="en">Test X seconds for status change after ON/OFF</shortdesc>
+	</parameter>
+	<parameter name="power_wait" unique="0" required="0">
+		<getopt mixed="--power-wait=[seconds]" />
+		<content type="second" default="0"  />
+		<shortdesc lang="en">Wait X seconds after issuing ON/OFF</shortdesc>
+	</parameter>
+	<parameter name="shell_timeout" unique="0" required="0">
+		<getopt mixed="--shell-timeout=[seconds]" />
+		<content type="second" default="3"  />
+		<shortdesc lang="en">Wait X seconds for cmd prompt after issuing command</shortdesc>
+	</parameter>
+	<parameter name="stonith_status_sleep" unique="0" required="0">
+		<getopt mixed="--stonith-status-sleep=[seconds]" />
+		<content type="second" default="1"  />
+		<shortdesc lang="en">Sleep X seconds between status calls during a STONITH action</shortdesc>
+	</parameter>
+	<parameter name="retry_on" unique="0" required="0">
+		<getopt mixed="--retry-on=[attempts]" />
+		<content type="integer" default="1"  />
+		<shortdesc lang="en">Count of attempts to retry power on</shortdesc>
+	</parameter>
+</parameters>
+<actions>
+	<action name="on" automatic="0"/>
+	<action name="off" />
+	<action name="reboot" />
+	<action name="status" />
+	<action name="list" />
+	<action name="list-status" />
+	<action name="monitor" />
+	<action name="metadata" />
+	<action name="manpage" />
+	<action name="validate-all" />
+</actions>
+</resource-agent>