Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fence-agents for openSUSE:Factory 
checked in at 2024-07-04 16:25:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fence-agents (Old)
 and      /work/SRC/openSUSE:Factory/.fence-agents.new.2080 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fence-agents"

Thu Jul  4 16:25:12 2024 rev:74 rq:1185211 
version:4.15.0+git.1719822011.7a2c0a7f

Changes:
--------
--- /work/SRC/openSUSE:Factory/fence-agents/fence-agents.changes        
2024-02-29 21:52:19.798315735 +0100
+++ /work/SRC/openSUSE:Factory/.fence-agents.new.2080/fence-agents.changes      
2024-07-04 16:26:38.146875943 +0200
@@ -1,0 +2,24 @@
+Wed Jul 03 18:27:35 UTC 2024 - vark...@suse.com
+
+- Update to version 4.15.0+git.1719822011.7a2c0a7f:
+  * all agents: dont use Deprecated logging.warn()
+  * symlinked agents: set agent_name to use when generating manpages
+  * fence2man.xsl: improve text for symlinked agents
+  * fence_sbd: --sbd-path defaults to /usr/sbin/sbd
+  * configure: check additional paths for programs
+  * fence_aws: log error if unknown state returned
+  * fence_aws: improve list, list-status and status actions
+  * fencing: use formatted strings to avoid failing when plug is int
+  * fence_azure: fix pinning client api versions for compatibility across 
different azure sdk versions
+  * fence_docker: Connect to Docker via a UNIX socket
+  * fence_hpblade/fence_mpath/fence_scsi: use r"" for all regular expressions 
to avoid SyntaxWarning errors
+  * fence_aws: fixes to not fail CI, and dont use boto3 buildreq on CI nodes 
where it's not installed
+  * fence_eps: add fence_epsr2 for ePowerSwitch R2 and newer
+  * fencing: add support for docs["agent_name"] to use the main agent name 
when generating manpages
+  * spec: only require python3-azure-sdk for RHEL < 9
+  * spec: remove old python3-azure-sdk dependency
+  * fence_aliyun: update order for new parameters
+  * fence_aliyun: add credentials file support
+  * lib/all agents: use r"" for all regular expressions to avoid SyntaxWarning 
errors
+
+-------------------------------------------------------------------

Old:
----
  fence-agents-4.13.1+git.1707822268.4229d52f.tar.xz

New:
----
  fence-agents-4.15.0+git.1719822011.7a2c0a7f.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fence-agents.spec ++++++
--- /var/tmp/diff_new_pack.8mezEh/_old  2024-07-04 16:26:38.854901789 +0200
+++ /var/tmp/diff_new_pack.8mezEh/_new  2024-07-04 16:26:38.854901789 +0200
@@ -25,7 +25,7 @@
 Summary:        Fence Agents for High Availability
 License:        GPL-2.0-only AND LGPL-2.1-only
 Group:          Productivity/Clustering/HA
-Version:        4.13.1+git.1707822268.4229d52f
+Version:        4.15.0+git.1719822011.7a2c0a7f
 Release:        0
 URL:            https://github.com/ClusterLabs/fence-agents
 Source0:        %{name}-%{version}.tar.xz

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.8mezEh/_old  2024-07-04 16:26:38.894903249 +0200
+++ /var/tmp/diff_new_pack.8mezEh/_new  2024-07-04 16:26:38.898903395 +0200
@@ -3,6 +3,6 @@
             <param 
name="url">git://github.com/ClusterLabs/fence-agents.git</param>
           <param 
name="changesrevision">8d746be92f191aa289f13a3703031c122a5e6cf3</param></service><service
 name="tar_scm">
                 <param 
name="url">https://github.com/ClusterLabs/fence-agents</param>
-              <param 
name="changesrevision">fc7d7c4baef64f510bd3332c9f008d3e1128dc7b</param></service></servicedata>
+              <param 
name="changesrevision">74e56b9ea5465ee0b703eb145a286b6a2458ba1d</param></service></servicedata>
 (No newline at EOF)
 

++++++ fence-agents-4.13.1+git.1707822268.4229d52f.tar.xz -> 
fence-agents-4.15.0+git.1719822011.7a2c0a7f.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/Makefile.am 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/Makefile.am
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/Makefile.am 2024-02-13 
12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/Makefile.am 2024-07-01 
10:20:11.000000000 +0200
@@ -25,6 +25,12 @@
 
 SUBDIRS                        = lib agents doc systemd
 
+if HAVE_BOTO3
+HAVE_BOTO3 = 1
+else
+HAVE_BOTO3 = 0
+endif
+
 .PHONY: $(SUBDIRS)
 
 agents: lib
@@ -77,6 +83,7 @@
        alphatag="" && \
        numcomm="" && \
        ver="$(VERSION)" && \
+       boto3_br="$(HAVE_BOTO3)" && \
        if echo $$ver | grep -q -- "-dirty$$"; then \
                dirty="dirty" && \
                echo VERSION IS DIRTY && \
@@ -113,6 +120,7 @@
                -e "s#@rgmanager@#$(RGMANAGER)#g" \
                -e "s#@linux-ha@#$(LINUX_HA)#g" \
                -e "s#@compat-habindir@#$(COMPAT_HABINDIR)#g" \
+               -e "s#@boto3_br@#$$boto3_br#g" \
        $< > $@-t; \
        if [ -z "$$dirty" ]; then sed -i -e "s#%glo.*dirty.*##g" $@-t; fi; \
        if [ -z "$$alphatag" ]; then sed -i -e "s#%glo.*alphatag.*##g" $@-t; 
fi; \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/aliyun/fence_aliyun.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/aliyun/fence_aliyun.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/aliyun/fence_aliyun.py   
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/aliyun/fence_aliyun.py   
    2024-07-01 10:20:11.000000000 +0200
@@ -15,7 +15,7 @@
        from aliyunsdkcore.auth.credentials import EcsRamRoleCredential
        from aliyunsdkcore.profile import region_provider
 except ImportError as e:
-       logging.warn("The 'aliyunsdkcore' module has been not installed or is 
unavailable, try to execute the command 'pip install aliyun-python-sdk-core 
--upgrade' to solve. error: %s" % e)
+       logging.warning("The 'aliyunsdkcore' module has been not installed or 
is unavailable, try to execute the command 'pip install aliyun-python-sdk-core 
--upgrade' to solve. error: %s" % e)
 
 
 try:
@@ -24,7 +24,7 @@
        from aliyunsdkecs.request.v20140526.StopInstanceRequest import 
StopInstanceRequest
        from aliyunsdkecs.request.v20140526.RebootInstanceRequest import 
RebootInstanceRequest
 except ImportError as e:
-       logging.warn("The 'aliyunsdkecs' module has been not installed or is 
unavailable, try to execute the command 'pip install aliyun-python-sdk-ecs 
--upgrade' to solve. error: %s" % e)
+       logging.warning("The 'aliyunsdkecs' module has been not installed or is 
unavailable, try to execute the command 'pip install aliyun-python-sdk-ecs 
--upgrade' to solve. error: %s" % e)
 
 
 def _send_request(conn, request):
@@ -150,20 +150,37 @@
                "required": "0",
                "order": 5
        }
+       all_opt["credentials_file"] = {
+               "getopt": ":",
+               "longopt": "credentials-file",
+               "help": "--credentials-file=[path]            Path to 
aliyun-cli credentials file",
+               "shortdesc": "Path to credentials file",
+               "required": "0",
+               "order": 6
+       }
+       all_opt["credentials_file_profile"] = {
+               "getopt": ":",
+               "longopt": "credentials-file-profile",
+               "help": "--credentials-file-profile=[profile] Credentials file 
profile",
+               "shortdesc": "Credentials file profile",
+               "required": "0",
+               "default": "default",
+               "order": 7
+       }
        all_opt["filter"] = {
                "getopt": ":",
                "longopt": "filter",
                "help": "--filter=[key=value]           Filter (e.g. 
InstanceIds=[\"i-XXYYZZAA1\",\"i-XXYYZZAA2\"]",
                "shortdesc": "Filter for list-action.",
                "required": "0",
-               "order": 6
+               "order": 8
        }
 
 # Main agent method
 def main():
        conn = None
 
-       device_opt = ["port", "no_password", "region", "access_key", 
"secret_key", "ram_role", "filter"]
+       device_opt = ["port", "no_password", "region", "access_key", 
"secret_key", "ram_role", "credentials_file", "credentials_file_profile", 
"filter"]
 
        atexit.register(atexit_handler)
 
@@ -191,6 +208,16 @@
                        ram_role = options["--ram-role"]
                        role = EcsRamRoleCredential(ram_role)
                        conn = client.AcsClient(region_id=region, 
credential=role)
+               elif "--credentials-file" in options and 
"--credentials-file-profile" in options:
+                       import os, configparser
+                       try:
+                               config = configparser.ConfigParser()
+                               
config.read(os.path.expanduser(options["--credentials-file"]))
+                               access_key = 
config.get(options["--credentials-file-profile"], "aliyun_access_key_id")
+                               secret_key = 
config.get(options["--credentials-file-profile"], "aliyun_access_key_secret")
+                               conn = client.AcsClient(access_key, secret_key, 
region)
+                       except Exception as e:
+                               fail_usage("Failed: failed to read credentials 
file: %s" % e)
                else:
                        fail_usage("Failed: User credentials are not set. 
Please set the Access Key and the Secret Key, or configure the RAM role.")
 
@@ -198,7 +225,7 @@
                try:
                        region_provider.modify_point('Ecs', region, 
'ecs.%s.aliyuncs.com' % region)
                except Exception as e:
-                       logging.warn("Failed: failed to modify endpoint to 
'ecs.%s.aliyuncs.com': %s" % (region, e))
+                       logging.warning("Failed: failed to modify endpoint to 
'ecs.%s.aliyuncs.com': %s" % (region, e))
 
        # Operate the fencing device
        result = fence_action(conn, options, set_power_status, 
get_power_status, get_nodes_list)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/alom/fence_alom.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/alom/fence_alom.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/alom/fence_alom.py   
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/alom/fence_alom.py   
2024-07-01 10:20:11.000000000 +0200
@@ -13,7 +13,7 @@
 def get_power_status(conn, options):
        conn.send_eol("showplatform")
        conn.log_expect(options["--command-prompt"], 
int(options["--shell-timeout"]))
-       status = re.search("standby", conn.before.lower())
+       status = re.search(r"standby", conn.before.lower())
        result = (status != None and "off" or "on")
 
        return result
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/amt/fence_amt.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/amt/fence_amt.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/amt/fence_amt.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/amt/fence_amt.py     
2024-07-01 10:20:11.000000000 +0200
@@ -13,7 +13,7 @@
 
 def get_power_status(_, options):
        output = amt_run_command(options, create_command(options, "status"))
-       match = re.search('Powerstate:[\\s]*(..)', str(output))
+       match = re.search(r'Powerstate:[\s]*(..)', str(output))
        status = match.group(1) if match else None
 
        if status == None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/apc/fence_apc.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/apc/fence_apc.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/apc/fence_apc.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/apc/fence_apc.py     
2024-07-01 10:20:11.000000000 +0200
@@ -36,21 +36,21 @@
        admin = 0
        switch = 0
 
-       if None != re.compile('.* MasterSwitch plus.*', re.IGNORECASE | 
re.S).match(conn.before):
+       if None != re.compile(r'.* MasterSwitch plus.*', re.IGNORECASE | 
re.S).match(conn.before):
                switch = 1
-               if None != re.compile('.* MasterSwitch plus 2', re.IGNORECASE | 
re.S).match(conn.before):
+               if None != re.compile(r'.* MasterSwitch plus 2', re.IGNORECASE 
| re.S).match(conn.before):
                        if "--switch" not in options:
                                fail_usage("Failed: You have to enter physical 
switch number")
                else:
                        if "--switch" not in options:
                                options["--switch"] = "1"
 
-       if None == re.compile('.*Outlet Management.*', re.IGNORECASE | 
re.S).match(conn.before):
+       if None == re.compile(r'.*Outlet Management.*', re.IGNORECASE | 
re.S).match(conn.before):
                version = 2
        else:
                version = 3
 
-       if None == re.compile('.*Outlet Control/Configuration.*', re.IGNORECASE 
| re.S).match(conn.before):
+       if None == re.compile(r'.*Outlet Control/Configuration.*', 
re.IGNORECASE | re.S).match(conn.before):
                admin = 0
        else:
                admin = 1
@@ -109,26 +109,26 @@
        admin3 = 0
        switch = 0
 
-       if None != re.compile('.* MasterSwitch plus.*', re.IGNORECASE | 
re.S).match(conn.before):
+       if None != re.compile(r'.* MasterSwitch plus.*', re.IGNORECASE | 
re.S).match(conn.before):
                switch = 1
                ## MasterSwitch has different schema for on/off actions
                action = {
                        'on' : "1",
                        'off': "3"
                }[options["--action"]]
-               if None != re.compile('.* MasterSwitch plus 2', re.IGNORECASE | 
re.S).match(conn.before):
+               if None != re.compile(r'.* MasterSwitch plus 2', re.IGNORECASE 
| re.S).match(conn.before):
                        if "--switch" not in options:
                                fail_usage("Failed: You have to enter physical 
switch number")
                else:
                        if "--switch" not in options:
                                options["--switch"] = 1
 
-       if None == re.compile('.*Outlet Management.*', re.IGNORECASE | 
re.S).match(conn.before):
+       if None == re.compile(r'.*Outlet Management.*', re.IGNORECASE | 
re.S).match(conn.before):
                version = 2
        else:
                version = 3
 
-       if None == re.compile('.*Outlet Control/Configuration.*', re.IGNORECASE 
| re.S).match(conn.before):
+       if None == re.compile(r'.*Outlet Control/Configuration.*', 
re.IGNORECASE | re.S).match(conn.before):
                admin2 = 0
        else:
                admin2 = 1
@@ -142,7 +142,7 @@
                else:
                        conn.send_eol("2")
                        conn.log_expect(options["--command-prompt"], 
int(options["--shell-timeout"]))
-                       if None == re.compile('.*2- Outlet Restriction.*', 
re.IGNORECASE | re.S).match(conn.before):
+                       if None == re.compile(r'.*2- Outlet Restriction.*', 
re.IGNORECASE | re.S).match(conn.before):
                                admin3 = 0
                        else:
                                admin3 = 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/apc_snmp/fence_apc_snmp.py
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/apc_snmp/fence_apc_snmp.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/apc_snmp/fence_apc_snmp.py
   2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/apc_snmp/fence_apc_snmp.py
   2024-07-01 10:20:11.000000000 +0200
@@ -215,6 +215,7 @@
                options["--switch"] = "1"
 
        docs = {}
+       docs["agent_name"] = "fence_apc_snmp"
        docs["shortdesc"] = "Fence agent for APC, Tripplite PDU over SNMP"
        docs["longdesc"] = "{} is a Power Fencing agent \
 which can be used with the APC network power switch or Tripplite PDU devices.\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/aws/fence_aws.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/aws/fence_aws.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/aws/fence_aws.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/aws/fence_aws.py     
2024-07-01 10:20:11.000000000 +0200
@@ -22,6 +22,15 @@
 logger.addHandler(SyslogLibHandler())
 logging.getLogger('botocore.vendored').propagate = False
 
+status = {
+               "running": "on",
+               "stopped": "off",
+               "pending": "unknown",
+               "stopping": "unknown",
+               "shutting-down": "unknown",
+               "terminated": "unknown"
+}
+
 def get_instance_id(options):
        try:
                token = requests.put('http://169.254.169.254/latest/api/token', 
headers={"X-aws-ec2-metadata-token-ttl-seconds" : 
"21600"}).content.decode("UTF-8")
@@ -45,11 +54,19 @@
                        filter_key   = options["--filter"].split("=")[0].strip()
                        filter_value = options["--filter"].split("=")[1].strip()
                        filter = [{ "Name": filter_key, "Values": 
[filter_value] }]
-                       for instance in conn.instances.filter(Filters=filter):
-                               result[instance.id] = ("", None)
-               else:
-                       for instance in conn.instances.all():
-                               result[instance.id] = ("", None)
+                       logging.debug("Filter: {}".format(filter))
+
+               for instance in conn.instances.filter(Filters=filter if 
'filter' in vars() else []):
+                       instance_name = ""
+                       for tag in instance.tags or []:
+                               if tag.get("Key") == "Name":
+                                       instance_name = tag["Value"]
+                       try:
+                               result[instance.id] = (instance_name, 
status[instance.state["Name"]])
+                       except KeyError as e:
+                               if options.get("--original-action") == 
"list-status":
+                                       logger.error("Unknown status \"{}\" 
returned for {} ({})".format(instance.state["Name"], instance.id, 
instance_name))
+                               result[instance.id] = (instance_name, "unknown")
        except ClientError:
                fail_usage("Failed: Incorrect Access Key or Secret Key.")
        except EndpointConnectionError:
@@ -67,13 +84,11 @@
                instance = conn.instances.filter(Filters=[{"Name": 
"instance-id", "Values": [options["--plug"]]}])
                state = list(instance)[0].state["Name"]
                logger.debug("Status operation for EC2 instance %s returned 
state: %s",options["--plug"],state.upper())
-               if state == "running":
-                       return "on"
-               elif state == "stopped":
-                       return "off"
-               else:
+               try:
+                       return status[state]
+               except KeyError as e:
+                       logger.error("Unknown status \"{}\" 
returned".format(state))
                        return "unknown"
-
        except ClientError:
                fail_usage("Failed: Incorrect Access Key or Secret Key.")
        except EndpointConnectionError:
@@ -146,7 +161,7 @@
        all_opt["filter"] = {
                "getopt" : ":",
                "longopt" : "filter",
-               "help" : "--filter=[key=value]           Filter (e.g. 
vpc-id=[vpc-XXYYZZAA]",
+               "help" : "--filter=[key=value]           Filter (e.g. 
vpc-id=[vpc-XXYYZZAA])",
                "shortdesc": "Filter for list-action",
                "required": "0",
                "order": 5
@@ -228,7 +243,10 @@
                                      aws_access_key_id=access_key,
                                      aws_secret_access_key=secret_key)
        except Exception as e:
-               fail_usage("Failed: Unable to connect to AWS: " + str(e))
+               if not options.get("--action", "") in ["metadata", "manpage", 
"validate-all"]:
+                       fail_usage("Failed: Unable to connect to AWS: " + 
str(e))
+               else:
+                       pass
 
        # Operate the fencing device
        result = fence_action(conn, options, set_power_status, 
get_power_status, get_nodes_list)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/azure_arm/fence_azure_arm.py
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/azure_arm/fence_azure_arm.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/azure_arm/fence_azure_arm.py
 2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/azure_arm/fence_azure_arm.py
 2024-07-01 10:20:11.000000000 +0200
@@ -251,7 +251,7 @@
     except ImportError:
         fail_usage("Azure Resource Manager Python SDK not found or not 
accessible")
     except Exception as e:
-        fail_usage("Failed: %s" % re.sub("^, ", "", str(e)))
+        fail_usage("Failed: %s" % re.sub(r"^, ", r"", str(e)))
 
     if "--network-fencing" in options:
         # use  off-action to quickly return off once network is fenced instead 
of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/cdu/fence_cdu.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/cdu/fence_cdu.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/cdu/fence_cdu.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/cdu/fence_cdu.py     
2024-07-01 10:20:11.000000000 +0200
@@ -51,11 +51,11 @@
         if options["api-version"] == "8":
             #  AA13  Arm-Console3                     Wake On        On     
Normal
             #  AA14  Master_Outlet_14                 Wake On        On     
Normal
-            show_re = re.compile('(\w+)\s+(\S+)\s+(On|Idle On|Off|Wake 
On)\s+(On|Off)')
+            show_re = re.compile(r'(\w+)\s+(\S+)\s+(On|Idle On|Off|Wake 
On)\s+(On|Off)')
         else:
             #    .A12     TowerA_Outlet12           On         Idle On
             #    .A12     test-01                   On         Idle On
-            show_re = 
re.compile('(\.\w+)\s+(\w+|\w+\W\w+)\s+(On|Off)\s+(On|Idle On|Off|Wake On)')
+            show_re = 
re.compile(r'(\.\w+)\s+(\w+|\w+\W\w+)\s+(On|Off)\s+(On|Idle On|Off|Wake On)')
         for line in lines:
             res = show_re.search(line)
             if res != None:
@@ -89,7 +89,7 @@
             # else:
             #    .A12     TowerA_Outlet12
             #    .A12     test-01
-            show_re = re.compile('(\S+)\s+(\w+|\w+\W\w+)\s+')
+            show_re = re.compile(r'(\S+)\s+(\w+|\w+\W\w+)\s+')
             for line in lines:
                 res = show_re.search(line)
                 if res != None:
@@ -112,7 +112,7 @@
     conn.send("VERSION\r\n")
     conn.log_expect(options["--command-prompt"], 
int(options["--shell-timeout"]))
     lines = conn.before.split("\n")
-    show_re = re.compile('Sentry Switched [PC]DU Version (\d)(.\d|)(\w)\r')
+    show_re = re.compile(r'Sentry Switched [PC]DU Version (\d)(.\d|)(\w)\r')
     for line in lines:
         res = show_re.search(line)
         if res != None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/cisco_ucs/fence_cisco_ucs.py
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/cisco_ucs/fence_cisco_ucs.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/cisco_ucs/fence_cisco_ucs.py
 2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/cisco_ucs/fence_cisco_ucs.py
 2024-07-01 10:20:11.000000000 +0200
@@ -8,13 +8,13 @@
 from fencing import *
 from fencing import fail, EC_STATUS, EC_LOGIN_DENIED, run_delay
 
-RE_COOKIE = re.compile("<aaaLogin .* outCookie=\"(.*?)\"", re.IGNORECASE)
-RE_STATUS = re.compile("<lsPower .*? state=\"(.*?)\"", re.IGNORECASE)
-RE_GET_DN = re.compile(" dn=\"(.*?)\"", re.IGNORECASE)
-RE_GET_PNDN = re.compile(" pndn=\"(.*?)\"", re.IGNORECASE)
-RE_GET_DESC = re.compile(" descr=\"(.*?)\"", re.IGNORECASE)
-RE_GET_OPERPOWER = re.compile(" operPower=\"(.*?)\"", re.IGNORECASE)
-RE_GET_PRESENCE = re.compile(" presence=\"(.*?)\"", re.IGNORECASE)
+RE_COOKIE = re.compile(r"<aaaLogin .* outCookie=\"(.*?)\"", re.IGNORECASE)
+RE_STATUS = re.compile(r"<lsPower .*? state=\"(.*?)\"", re.IGNORECASE)
+RE_GET_DN = re.compile(r" dn=\"(.*?)\"", re.IGNORECASE)
+RE_GET_PNDN = re.compile(r" pndn=\"(.*?)\"", re.IGNORECASE)
+RE_GET_DESC = re.compile(r" descr=\"(.*?)\"", re.IGNORECASE)
+RE_GET_OPERPOWER = re.compile(r" operPower=\"(.*?)\"", re.IGNORECASE)
+RE_GET_PRESENCE = re.compile(r" presence=\"(.*?)\"", re.IGNORECASE)
 
 options_global = None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/compute/fence_compute.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/compute/fence_compute.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/compute/fence_compute.py 
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/compute/fence_compute.py 
    2024-07-01 10:20:11.000000000 +0200
@@ -98,7 +98,7 @@
                        # Since it's about forcing back to a default value, 
there is
                        # no real worries to just consider it's still okay even 
if the
                        # command failed
-                       logging.warn("Exception from attempt to force "
+                       logging.warning("Exception from attempt to force "
                                      "host back up via nova API: "
                                      "%s: %s" % (e.__class__.__name__, e))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/docker/fence_docker.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/docker/fence_docker.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/docker/fence_docker.py   
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/docker/fence_docker.py   
    2024-07-01 10:20:11.000000000 +0200
@@ -48,6 +48,8 @@
        output_buffer = io.BytesIO()
        if logging.getLogger().getEffectiveLevel() < logging.WARNING:
                conn.setopt(pycurl.VERBOSE, True)
+       if "--unix-socket" in options:
+               conn.setopt(pycurl.UNIX_SOCKET_PATH, options["--unix-socket"])
        conn.setopt(pycurl.HTTPGET, 1)
        conn.setopt(pycurl.URL, url.encode("ascii"))
        if post:
@@ -135,12 +137,35 @@
                "default" : "1.11",
        }
 
-       device_opt = ["ipaddr", "no_password", "no_login", "port", "method", 
"web", "tlscert", "tlskey", "tlscacert", "ssl", "api_version"]
+       all_opt["unix_socket"] = {
+               "getopt" : ":",
+               "longopt" : "unix-socket",
+               "help" : "--unix-socket                  "
+                       "Path to Docker's unix socket. Use this with 
--disable-ssl.",
+               "required" : "0",
+               "order" : 2,
+       }
 
-       all_opt["ssl"]["default"] = "1"
+       all_opt["disable_ssl"] = {
+               "getopt" : "",
+               "longopt" : "disable-ssl",
+               "help" : "--disable-ssl                  Don't use SSL 
connection",
+               "required" : "0",
+               "shortdesc" : "Don't use SSL",
+               "order": 2,
+       }
 
+       device_opt = ["ipaddr", "no_password", "no_login", "port", "method", 
"web",
+               "tlscert", "tlskey", "tlscacert", "ssl", "api_version", 
"unix_socket",
+               "disable_ssl"]
+       all_opt["ssl"]["default"] = "1"
        options = check_input(device_opt, process_input(device_opt))
 
+       if "--disable-ssl" in options or options["--ssl"] == "0":
+               for k in ["--ssl", "--ssl-secure", "--ssl-insecure"]:
+                       if k in options:
+                               del options[k]
+
        docs = { }
        docs["shortdesc"] = "Fence agent for Docker"
        docs["longdesc"] = "fence_docker is a Power Fencing agent which \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/eps/fence_eps.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/eps/fence_eps.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/eps/fence_eps.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/eps/fence_eps.py     
2024-07-01 10:20:11.000000000 +0200
@@ -3,8 +3,8 @@
 # The Following Agent Has Been Tested On:
 # ePowerSwitch 8M+ version 1.0.0.4
 
-import sys, re
-import base64, string, socket
+import sys, os, re
+import base64, socket
 import logging
 import atexit
 sys.path.append("@FENCEAGENTSLIBDIR@")
@@ -37,7 +37,7 @@
                                options["--password"] = "" # Default is empty 
password
 
                        # String for Authorization header
-                       auth_str = 'Basic ' + 
string.strip(base64.encodestring(options["--username"]+':'+options["--password"]))
+                       auth_str = 'Basic ' + 
str(base64.encodebytes(bytes(options["--username"]+':'+options["--password"], 
"utf-8")).decode("utf-8").strip())
                        logging.debug("Authorization: %s\n", auth_str)
                        conn.putheader('Authorization', auth_str)
 
@@ -60,16 +60,22 @@
                logging.error("Failed: {}".format(str(e)))
                fail(EC_LOGIN_DENIED)
 
-       return result
+       return result.decode("utf-8", "ignore")
 
 def get_power_status(conn, options):
        del conn
        ret_val = eps_run_command(options, "")
 
        result = {}
-       status = re.findall(r"p(\d{2})=(0|1)\s*\<br\>", ret_val.lower())
+       if os.path.basename(sys.argv[0]) == "fence_eps":
+               status = re.findall(r"p(\d{2})=(0|1)\s*\<br\>", ret_val.lower())
+       elif os.path.basename(sys.argv[0]) == "fence_epsr2":
+               status = re.findall(r"m0:o(\d)=(on|off)\s*", ret_val.lower())
        for out_num, out_stat in status:
-               result[out_num] = ("", (out_stat == "1" and "on" or "off"))
+               if os.path.basename(sys.argv[0]) == "fence_eps":
+                       result[out_num] = ("", (out_stat == "1" and "on" or 
"off"))
+               elif os.path.basename(sys.argv[0]) == "fence_epsr2":
+                       result[out_num] = ("", out_stat)
 
        if not options["--action"] in ['monitor', 'list']:
                if not options["--plug"] in result:
@@ -81,7 +87,12 @@
 
 def set_power_status(conn, options):
        del conn
-       eps_run_command(options, "P%s=%s"%(options["--plug"], 
(options["--action"] == "on" and "1" or "0")))
+       if os.path.basename(sys.argv[0]) == "fence_eps":
+               eps_run_command(options, "P%s=%s"%(options["--plug"], 
(options["--action"] == "on" and "1" or "0")))
+       elif os.path.basename(sys.argv[0]) == "fence_epsr2":
+               if options["--action"] == "reboot":
+                       options["--action"] = "off"
+               eps_run_command(options, "M0:O%s=%s"%(options["--plug"], 
options["--action"]))
 
 # Define new option
 def eps_define_new_opts():
@@ -107,20 +118,25 @@
        options = check_input(device_opt, process_input(device_opt))
 
        docs = {}
+       docs["agent_name"] = "fence_eps"
        docs["shortdesc"] = "Fence agent for ePowerSwitch"
-       docs["longdesc"] = "fence_eps is a Power Fencing agent \
+       docs["longdesc"] = os.path.basename(sys.argv[0]) + " is a Power Fencing 
agent \
 which can be used with the ePowerSwitch 8M+ power switch to fence \
-connected machines. Fence agent works ONLY on 8M+ device, because \
-this is only one, which has support for hidden page feature. \
+connected machines. It ONLY works on 8M+ devices, as \
+they support the hidden page feature. \
 \n.TP\n\
-Agent basically works by connecting to hidden page and pass \
-appropriate arguments to GET request. This means, that hidden \
-page feature must be enabled and properly configured."
-       docs["vendorurl"] = "http://www.epowerswitch.com";
+The agent works by connecting to the hidden page and pass \
+the appropriate arguments to GET request. This means, that the hidden \
+page feature must be enabled and properly configured. \
+\n.TP\n\
+NOTE: In most cases you want to use fence_epsr2, as fence_eps \
+only works with older hardware."
+       docs["vendorurl"] = "https://www.neol.com";
+       docs["symlink"] = [("fence_epsr2", "Fence agent for ePowerSwitch R2 and 
newer")]
        show_docs(options, docs)
 
        run_delay(options)
-       #Run fence action. Conn is None, beacause we always need open new http 
connection
+       #Run fence action. Conn is None, because we always need open new http 
connection
        result = fence_action(None, options, set_power_status, 
get_power_status, get_power_status)
 
        sys.exit(result)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/gce/fence_gce.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/gce/fence_gce.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/gce/fence_gce.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/gce/fence_gce.py     
2024-07-01 10:20:11.000000000 +0200
@@ -85,8 +85,8 @@
                uri_replacements.append(
                        {
                                "matchlength": 4,
-                               "match": 
"https://compute.googleapis.com/compute/v1/projects/(.*)/zones/(.*)/instances/(.*)/reset(.*)",
-                               "replace": 
"https://baremetalsolution.googleapis.com/v1/projects/\\1/locations/\\2/instances/\\3:resetInstance\\4";
+                               "match": 
r"https://compute.googleapis.com/compute/v1/projects/(.*)/zones/(.*)/instances/(.*)/reset(.*)",
+                               "replace": 
r"https://baremetalsolution.googleapis.com/v1/projects/\1/locations/\2/instances/\3:resetInstance\4";
                        })
        for uri_replacement in uri_replacements:
                # each uri_replacement should have matchlength, match, and 
replace
@@ -97,7 +97,7 @@
                if match is None or len(match.groups()) != 
uri_replacement["matchlength"]:
                        continue
                replaced_uri = re.sub(uri_replacement["match"], 
uri_replacement["replace"], http_request.uri)
-               match = re.match("https:\/\/.*.googleapis.com", replaced_uri)
+               match = re.match(r"https:\/\/.*.googleapis.com", replaced_uri)
                if match is None or match.start() != 0:
                        logging.warning("FENCE_GCE_URI_REPLACEMENTS replace is 
not "
                                "targeting googleapis.com, ignoring it: %s" % 
replaced_uri)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/hpblade/fence_hpblade.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/hpblade/fence_hpblade.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/hpblade/fence_hpblade.py 
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/hpblade/fence_hpblade.py 
    2024-07-01 10:20:11.000000000 +0200
@@ -33,10 +33,10 @@
 def get_power_status(conn, options):
        if options["enc_type"] == "superdome":
                cmd_send = "parstatus -M -p " + options["--plug"]
-               powrestr = "^partition:\\d\\s+:\\w+\\s+/(\\w+)\\s.*$"
+               powrestr = r"^partition:\d\s+:\w+\s+/(\w+)\s.*$"
        else:
                cmd_send = "show server status " + options["--plug"]
-               powrestr = "^\\s*Power: (.*?)\\s*$"
+               powrestr = r"^\s*Power: (.*?)\s*$"
 
        conn.send_eol(cmd_send)
        conn.log_expect(options["--command-prompt"], 
int(options["--shell-timeout"]))
@@ -78,10 +78,10 @@
        outlets = {}
        if options["enc_type"] == "superdome":
                cmd_send = "parstatus -P -M"
-               listrestr = 
"^partition:(\\d+)\\s+:\\w+\\s+/(\\w+)\\s+:OK.*?:(\\w+)\\s*$"
+               listrestr = 
r"^partition:(\d+)\s+:\w+\s+/(\w+)\s+:OK.*?:(\w+)\s*$"
        else:
                cmd_send = "show server list"
-               listrestr = 
"^\\s*(\\d+)\\s+(.*?)\\s+(.*?)\\s+OK\\s+(.*?)\\s+(.*?)\\s*$"
+               listrestr = 
r"^\s*(\d+)\s+(.*?)\s+(.*?)\s+OK\s+(.*?)\s+(.*?)\s*$"
 
        conn.send_eol(cmd_send)
        conn.log_expect(options["--command-prompt"], 
int(options["--shell-timeout"]))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ilo/fence_ilo.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ilo/fence_ilo.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ilo/fence_ilo.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ilo/fence_ilo.py     
2024-07-01 10:20:11.000000000 +0200
@@ -72,6 +72,7 @@
        options = check_input(device_opt, process_input(device_opt))
 
        docs = {}
+       docs["agent_name"] = "fence_ilo"
        docs["shortdesc"] = "Fence agent for HP iLO"
        docs["longdesc"] = "{} is a Power Fencing agent \
 used for HP servers with the Integrated Light Out (iLO) PCI card.\
@@ -106,7 +107,7 @@
                        fail(EC_LOGIN_DENIED)
 
        try:
-               version = re.compile("<RIBCL VERSION=\"(.*?)\"", 
re.IGNORECASE).search(conn.before).group(1)
+               version = re.compile(r"<RIBCL VERSION=\"(.*?)\"", 
re.IGNORECASE).search(conn.before).group(1)
                if "--ribcl-version" not in options:
                        options["--ribcl-version"] = float(version)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ilo_mp/fence_ilo_mp.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ilo_mp/fence_ilo_mp.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ilo_mp/fence_ilo_mp.py   
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ilo_mp/fence_ilo_mp.py   
    2024-07-01 10:20:11.000000000 +0200
@@ -8,7 +8,7 @@
 def get_power_status(conn, options):
        conn.send_eol("show /system1")
 
-       re_state = re.compile('EnabledState=(.*)', re.IGNORECASE)
+       re_state = re.compile(r'EnabledState=(.*)', re.IGNORECASE)
        conn.log_expect(re_state, int(options["--shell-timeout"]))
 
        status = conn.match.group(1).lower()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ilo_ssh/fence_ilo_ssh.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ilo_ssh/fence_ilo_ssh.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ilo_ssh/fence_ilo_ssh.py 
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ilo_ssh/fence_ilo_ssh.py 
    2024-07-01 10:20:11.000000000 +0200
@@ -9,7 +9,7 @@
 def get_power_status(conn, options):
        conn.send_eol("show /system1")
 
-       re_state = re.compile('EnabledState=(.*)', re.IGNORECASE)
+       re_state = re.compile(r'EnabledState=(.*)', re.IGNORECASE)
        conn.log_expect(re_state, int(options["--shell-timeout"]))
 
        status = conn.match.group(1).lower()
@@ -49,6 +49,7 @@
        options = check_input(device_opt, process_input(device_opt))
 
        docs = {}
+       docs["agent_name"] = "fence_ilo_ssh"
        docs["shortdesc"] = "Fence agent for HP iLO over SSH"
        docs["longdesc"] = "{} is a Power Fencing agent that connects to iLO 
device. It logs into \
 device via ssh and reboot a specified outlet.\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ipmilan/fence_ipmilan.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ipmilan/fence_ipmilan.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ipmilan/fence_ipmilan.py 
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ipmilan/fence_ipmilan.py 
    2024-07-01 10:20:11.000000000 +0200
@@ -13,7 +13,7 @@
 
 def get_power_status(_, options):
        output = _run_command(options, "status")
-       match = re.search('[Cc]hassis [Pp]ower is [\\s]*([a-zA-Z]{2,3})', 
str(output))
+       match = re.search(r'[Cc]hassis [Pp]ower is [\s]*([a-zA-Z]{2,3})', 
str(output))
        status = match.group(1) if match else None
        return status
 
@@ -23,11 +23,11 @@
 
 def reboot_cycle(_, options):
        output = _run_command(options, "cycle")
-       return bool(re.search('chassis power control: cycle', 
str(output).lower()))
+       return bool(re.search(r'chassis power control: cycle', 
str(output).lower()))
 
 def reboot_diag(_, options):
        output = _run_command(options, "diag")
-       return bool(re.search('chassis power control: diag', 
str(output).lower()))
+       return bool(re.search(r'chassis power control: diag', 
str(output).lower()))
 
 def _run_command(options, action):
        cmd, log_cmd = create_command(options, action)
@@ -202,10 +202,12 @@
        options = check_input(device_opt, process_input(device_opt))
 
        docs = {}
+       docs["agent_name"] = "fence_ipmilan"
        docs["shortdesc"] = "Fence agent for IPMI"
        docs["longdesc"] = "{} is a Power Fencing agent \
 which can be used with machines controlled by IPMI. \
-This agent calls support software ipmitool (http://ipmitool.sf.net/). \
+This agent calls support software ipmitool (http://ipmitool.sf.net/).\
+\n.P\n\
 WARNING! This fence agent might report success before the node is powered off. 
\
 You should use -m/method onoff if your fence device works correctly with that 
option.".format(os.path.basename(__file__))
        docs["vendorurl"] = ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ironic/fence_ironic.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ironic/fence_ironic.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/ironic/fence_ironic.py   
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/ironic/fence_ironic.py   
    2024-07-01 10:20:11.000000000 +0200
@@ -20,7 +20,7 @@
 def get_power_status(_, options):
     output = ironic_run_command(options, "status")
     stdout = output[1]
-    match = re.search('power[\\s]*([a-zA-Z]{2,3})', str(stdout))
+    match = re.search(r'power[\s]*([a-zA-Z]{2,3})', str(stdout))
     status = match.group(1) if match else None
     return status
 
@@ -40,7 +40,7 @@
             pass
         if "UUID" in uuid:
             continue # skip line header
-        match = re.search('power[\\s]*([a-zA-Z]{2,3})', state)
+        match = re.search(r'power[\s]*([a-zA-Z]{2,3})', state)
         status = match.group(1) if match else None
         nodes[uuid] = (name, status)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/lpar/fence_lpar.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/lpar/fence_lpar.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/lpar/fence_lpar.py   
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/lpar/fence_lpar.py   
2024-07-01 10:20:11.000000000 +0200
@@ -44,10 +44,10 @@
 
        try:
                if options["--hmc-version"] == "3":
-                       status = re.compile("^" + options["--plug"] + 
",(.*?),.*$",
+                       status = re.compile(r"^" + options["--plug"] + 
r",(.*?),.*$",
                                            re.IGNORECASE | 
re.MULTILINE).search(conn.before).group(1)
                elif options["--hmc-version"] in ["4", "IVM"]:
-                       status = re.compile(",state=(.*?),", 
re.IGNORECASE).search(conn.before).group(1)
+                       status = re.compile(r",state=(.*?),", 
re.IGNORECASE).search(conn.before).group(1)
        except AttributeError as e:
                logging.debug("Command on HMC failed: {}\n{}".format(command, 
str(e)))
                fail(EC_STATUS_HMC)
@@ -60,7 +60,7 @@
        conn.log_expect(options["--command-prompt"], 
int(options["--power-timeout"]))
 
        try:
-               cm = re.compile(",curr_master_mtms=(.*?),", 
re.IGNORECASE).search(conn.before).group(1)
+               cm = re.compile(r",curr_master_mtms=(.*?),", 
re.IGNORECASE).search(conn.before).group(1)
        except AttributeError as e:
                cm = False
 
@@ -106,7 +106,7 @@
 
                ## We have to remove next 2 lines (header) and last line (part 
of new prompt)
                ####
-               res = re.search("^(.+?\n){2}(.*)\n.*$", conn.before, re.S)
+               res = re.search(r"^(.+?\n){2}(.*)\n.*$", conn.before, re.S)
 
                if res == None:
                        fail_usage("Unable to parse output of list command")
@@ -126,7 +126,7 @@
 
                ## We have to remove last line (part of new prompt)
                ####
-               res = re.search("^(.*)\n.*$", conn.before, re.S)
+               res = re.search(r"^(.*)\n.*$", conn.before, re.S)
 
                if res == None:
                        fail_usage("Unable to parse output of list command")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/mpath/fence_mpath.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/mpath/fence_mpath.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/mpath/fence_mpath.py 
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/mpath/fence_mpath.py 
2024-07-01 10:20:11.000000000 +0200
@@ -331,7 +331,7 @@
        if not ("--devices" in options and options["--devices"]):
                fail_usage("Failed: No devices found")
 
-       options["devices"] = [d for d in re.split("\s*,\s*|\s+", 
options["--devices"].strip()) if d]
+       options["devices"] = [d for d in re.split(r"\s*,\s*|\s+", 
options["--devices"].strip()) if d]
        # Input control END
 
        result = fence_action(None, options, set_status, get_status)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/netio/fence_netio.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/netio/fence_netio.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/netio/fence_netio.py 
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/netio/fence_netio.py 
2024-07-01 10:20:11.000000000 +0200
@@ -8,7 +8,7 @@
 
 def get_power_status(conn, options):
        conn.send_eol("port %s" % options["--plug"])
-       re_status = re.compile("250 [01imt]")
+       re_status = re.compile(r"250 [01imt]")
        conn.log_expect(re_status, int(options["--shell-timeout"]))
        status = {
                "0" : "off",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/raritan/fence_raritan.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/raritan/fence_raritan.py
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/raritan/fence_raritan.py 
    2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/raritan/fence_raritan.py 
    2024-07-01 10:20:11.000000000 +0200
@@ -8,7 +8,7 @@
 
 def get_power_status(conn, options):
        conn.send_eol("show -d properties=powerState %s" % options["--plug"])
-       re_status = re.compile(".*powerState is [12].*")
+       re_status = re.compile(r".*powerState is [12].*")
        conn.log_expect(re_status, int(options["--shell-timeout"]))
        status = {
                #"0" : "off",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/rhevm/fence_rhevm.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/rhevm/fence_rhevm.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/rhevm/fence_rhevm.py 
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/rhevm/fence_rhevm.py 
2024-07-01 10:20:11.000000000 +0200
@@ -9,10 +9,10 @@
 from fencing import *
 from fencing import fail, EC_FETCH_VM_UUID, run_delay
 
-RE_GET_ID = re.compile("<vm( .*)? id=\"(.*?)\"", re.IGNORECASE)
-RE_STATUS = re.compile("<status>(.*?)</status>", re.IGNORECASE)
-RE_STATE = re.compile("<state>(.*?)</state>", re.IGNORECASE)
-RE_GET_NAME = re.compile("<name>(.*?)</name>", re.IGNORECASE)
+RE_GET_ID = re.compile(r"<vm( .*)? id=\"(.*?)\"", re.IGNORECASE)
+RE_STATUS = re.compile(r"<status>(.*?)</status>", re.IGNORECASE)
+RE_STATE = re.compile(r"<state>(.*?)</state>", re.IGNORECASE)
+RE_GET_NAME = re.compile(r"<name>(.*?)</name>", re.IGNORECASE)
 
 def get_power_status(conn, options):
        del conn
@@ -80,7 +80,7 @@
        if opt["--api-version"] == "auto":
                opt["--api-version"] = "4"
                res = send_command(opt, "")
-               if re.search("<title>Error</title>", res):
+               if re.search(r"<title>Error</title>", res):
                        opt["--api-version"] = "3"
                logging.debug("auto-detected API version: " + 
opt["--api-version"])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/rsa/fence_rsa.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/rsa/fence_rsa.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/rsa/fence_rsa.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/rsa/fence_rsa.py     
2024-07-01 10:20:11.000000000 +0200
@@ -16,7 +16,7 @@
        conn.send_eol("power state")
        conn.log_expect(options["--command-prompt"], 
int(options["--shell-timeout"]))
 
-       match = re.compile("Power: (.*)", re.IGNORECASE).search(conn.before)
+       match = re.compile(r"Power: (.*)", re.IGNORECASE).search(conn.before)
        if match != None:
                status = match.group(1)
        else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/sbd/fence_sbd.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/sbd/fence_sbd.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/sbd/fence_sbd.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/sbd/fence_sbd.py     
2024-07-01 10:20:11.000000000 +0200
@@ -170,7 +170,7 @@
         if "msgwait" in line:
             tmp_msg_timeout = int(line.split(':')[1])
             if -1 != msg_timeout and tmp_msg_timeout != msg_timeout:
-                logging.warn(\
+                logging.warning(\
                         "sbd message timeouts differ in different devices")
             # we only save the highest timeout
             if tmp_msg_timeout > msg_timeout:
@@ -418,7 +418,7 @@
     power_timeout = int(options["--power-timeout"])
     sbd_msg_timeout = get_msg_timeout(options)
     if 0 < power_timeout <= sbd_msg_timeout:
-        logging.warn("power timeout needs to be \
+        logging.warning("power timeout needs to be \
                 greater then sbd message timeout")
 
     result = fence_action(\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/scsi/fence_scsi.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/scsi/fence_scsi.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/scsi/fence_scsi.py   
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/scsi/fence_scsi.py   
2024-07-01 10:20:11.000000000 +0200
@@ -236,11 +236,11 @@
        cmd = options["--corosync-cmap-path"] + " nodelist"
        out = run_cmd(options, cmd)["out"]
 
-       match = re.search(r".(\d+).name \(str\) = " + options["--plug"] + "\n", 
out)
+       match = re.search(r".(\d+).name \(str\) = " + options["--plug"] + 
r"\n", out)
 
        # try old format before failing
        if not match:
-               match = re.search(r".(\d+).ring._addr \(str\) = " + 
options["--plug"] + "\n", out)
+               match = re.search(r".(\d+).ring._addr \(str\) = " + 
options["--plug"] + r"\n", out)
 
        return match.group(1) if match else fail_usage("Failed: unable to parse 
output of corosync-cmapctl or node does not exist")
 
@@ -295,7 +295,7 @@
                fail_usage("Failed: Cannot open file \""+ file_path + "\"")
        f.seek(0)
        out = f.read()
-       if not re.search(r"^" + dev + "\s+", out, flags=re.MULTILINE):
+       if not re.search(r"^" + dev + r"\s+", out, flags=re.MULTILINE):
                f.write(dev + "\n")
        f.close()
 
@@ -613,10 +613,10 @@
 
        options["--key"] = options["--key"].lstrip('0')
 
-       if not ("--devices" in options and [d for d in re.split("\s*,\s*|\s+", 
options["--devices"].strip()) if d]):
+       if not ("--devices" in options and [d for d in re.split(r"\s*,\s*|\s+", 
options["--devices"].strip()) if d]):
                options["devices"] = get_shared_devices(options)
        else:
-               options["devices"] = [d for d in re.split("\s*,\s*|\s+", 
options["--devices"].strip()) if d]
+               options["devices"] = [d for d in re.split(r"\s*,\s*|\s+", 
options["--devices"].strip()) if d]
 
        if not options["devices"]:
                fail_usage("Failed: No devices found")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/wti/fence_wti.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/wti/fence_wti.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/agents/wti/fence_wti.py     
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/agents/wti/fence_wti.py     
2024-07-01 10:20:11.000000000 +0200
@@ -27,7 +27,7 @@
                re_all = list(options["--command-prompt"])
        else:
                re_all = [options["--command-prompt"]]
-       re_next = re.compile("Enter: ", re.IGNORECASE)
+       re_next = re.compile(r"Enter: ", re.IGNORECASE)
        re_all.append(re_next)
 
        result = conn.log_expect(re_all, int(options["--shell-timeout"]))
@@ -208,8 +208,8 @@
                        conn.send("set binary\n")
                        conn.send("open %s -%s\n"%(options["--ip"], 
options["--ipport"]))
 
-                       re_login = re.compile("(login: )|(Login Name:  
)|(username: )|(User Name :)", re.IGNORECASE)
-                       re_prompt = re.compile("|".join(["(" + x + ")" for x in 
options["--command-prompt"]]), re.IGNORECASE)
+                       re_login = re.compile(r"(login: )|(Login Name:  
)|(username: )|(User Name :)", re.IGNORECASE)
+                       re_prompt = re.compile(r"|".join(["(" + x + ")" for x 
in options["--command-prompt"]]), re.IGNORECASE)
 
                        result = conn.log_expect([re_login, "Password: ", 
re_prompt], int(options["--shell-timeout"]))
                        if result == 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/configure.ac 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/configure.ac
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/configure.ac        
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/configure.ac        
2024-07-01 10:20:11.000000000 +0200
@@ -262,6 +262,10 @@
 CLUSTERVARRUN=${localstatedir}/run/cluster
 CLUSTERDATA=${datadir}/cluster
 
+## Program Paths
+PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin"
+export PATH
+
 AC_PATH_PROGS(XMLLINT, xmllint)
 AM_CONDITIONAL(BUILD_DOC, test "x$XMLLINT" != "x" )
 if test "x$XMLLINT" = "x"; then
@@ -291,6 +295,9 @@
 AC_PYTHON_MODULE(pycurl, 1)
 AC_PYTHON_MODULE(requests, 1)
 
+AC_PYTHON_MODULE(boto3)
+AM_CONDITIONAL(HAVE_BOTO3, [test "x$HAVE_PYMOD_BOTO3" == xyes ])
+
 if echo "$AGENTS_LIST" | grep -q amt_ws; then
        AC_PYTHON_MODULE(pywsman)
        if test "x${HAVE_PYMOD_PYWSMAN}" != xyes; then
@@ -322,7 +329,7 @@
 AC_PATH_PROG([SSH_PATH], [ssh], [/usr/bin/ssh])
 AC_PATH_PROG([TELNET_PATH], [telnet], [/usr/bin/telnet])
 AC_PATH_PROG([MPATH_PATH], [mpathpersist], [/usr/sbin/mpathpersist])
-AC_PATH_PROG([SBD_PATH], [sbd], [/sbin/sbd])
+AC_PATH_PROG([SBD_PATH], [sbd], [/usr/sbin/sbd])
 AC_PATH_PROG([SUDO_PATH], [sudo], [/usr/bin/sudo])
 AC_PATH_PROG([SNMPWALK_PATH], [snmpwalk], [/usr/bin/snmpwalk])
 AC_PATH_PROG([SNMPSET_PATH], [snmpset], [/usr/bin/snmpset])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/fence-agents.spec.in 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/fence-agents.spec.in
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/fence-agents.spec.in        
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/fence-agents.spec.in        
2024-07-01 10:20:11.000000000 +0200
@@ -24,11 +24,7 @@
 URL: https://github.com/ClusterLabs/fence-agents
 Source0: 
%{name}-%{version}%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.bz2
 
-%if 0%{?rhel} == 9
-%ifarch ppc64le s390x
-%define rhel9_ppc64le_s390x 1
-%endif
-%endif
+%define boto3_br @boto3_br@
 
 # skipped: pve, raritan, rcd-serial, virsh
 %global allfenceagents %(cat <<EOF
@@ -124,11 +120,14 @@
 %endif
 %if 0%{?fedora} || 0%{?centos} || 0%{?rhel}
 BuildRequires: openwsman-python3
-%if ! %{defined rhel9_ppc64le_s390x}
+%if %{boto3_br}
 BuildRequires: python3-boto3
 %endif
 %else
-BuildRequires: python3-openwsman python3-boto3
+BuildRequires: python3-openwsman
+%if %{boto3_br}
+BuildRequires: python3-boto3
+%endif
 %endif
 
 # fence-virt
@@ -381,14 +380,14 @@
 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} > 34
+%if 0%{?rhel} && 0%{?rhel} < 9
+Requires: python3-azure-sdk
+%else
 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
 BuildArch: noarch
 Obsoletes: fence-agents < 3.1.13
@@ -597,8 +596,8 @@
 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*
+%{_sbindir}/fence_eps*
+%{_mandir}/man8/fence_eps*.8*
 
 %package gce
 License: GPL-2.0-or-later AND LGPL-2.0-or-later
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/azure_fence.py.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/azure_fence.py.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/azure_fence.py.py       
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/azure_fence.py.py       
2024-07-01 10:20:11.000000000 +0200
@@ -14,6 +14,8 @@
 IP_TYPE_DYNAMIC = "Dynamic"
 MAX_RETRY = 10
 RETRY_WAIT = 5
+COMPUTE_CLIENT_API_VERSION = "2021-11-01"
+NETWORK_MGMT_CLIENT_API_VERSION = "2021-05-01"
 
 class AzureSubResource:
     Type = None
@@ -49,7 +51,7 @@
     return None
 
 def get_azure_resource(id):
-    match = 
re.match('(/subscriptions/([^/]*)/resourceGroups/([^/]*))(/providers/([^/]*/[^/]*)/([^/]*))?((/([^/]*)/([^/]*))*)',
 id)
+    match = 
re.match(r'(/subscriptions/([^/]*)/resourceGroups/([^/]*))(/providers/([^/]*/[^/]*)/([^/]*))?((/([^/]*)/([^/]*))*)',
 id)
     if not match:
         fail_usage("{get_azure_resource} cannot parse resource id %s" % id)
 
@@ -366,17 +368,20 @@
                 base_url=cloud_environment.endpoints.resource_manager,
                 profile=client_profile,
                 credential_scopes=[credential_scope],
+                api_version=COMPUTE_CLIENT_API_VERSION
             )
         except TypeError:
             compute_client = ComputeManagementClient(
                 credentials,
                 config.SubscriptionId,
-                base_url=cloud_environment.endpoints.resource_manager
+                base_url=cloud_environment.endpoints.resource_manager,
+                api_version=COMPUTE_CLIENT_API_VERSION
             )
     else:
         compute_client = ComputeManagementClient(
             credentials,
-            config.SubscriptionId
+            config.SubscriptionId,
+            api_version=COMPUTE_CLIENT_API_VERSION
         )
     return compute_client
 
@@ -404,16 +409,19 @@
                 base_url=cloud_environment.endpoints.resource_manager,
                 profile=client_profile,
                 credential_scopes=[credential_scope],
+                api_version=NETWORK_MGMT_CLIENT_API_VERSION
             )
         except TypeError:
             network_client = NetworkManagementClient(
                 credentials,
                 config.SubscriptionId,
-                base_url=cloud_environment.endpoints.resource_manager
+                base_url=cloud_environment.endpoints.resource_manager,
+                api_version=NETWORK_MGMT_CLIENT_API_VERSION
             )
     else:
         network_client = NetworkManagementClient(
             credentials,
-            config.SubscriptionId
+            config.SubscriptionId,
+            api_version=NETWORK_MGMT_CLIENT_API_VERSION
         )
     return network_client
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/fence2man.xsl 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/fence2man.xsl
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/fence2man.xsl   
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/fence2man.xsl   
2024-07-01 10:20:11.000000000 +0200
@@ -60,9 +60,9 @@
 .P
 <xsl:value-of select="longdesc"/>
 .P
-<xsl:value-of select="@name" /> accepts options on the command line as well
+The fence agent accepts options on the command line as well
 as from stdin. Fenced sends parameters through stdin when it execs the
-agent. <xsl:value-of select="@name" /> can be run by itself with command
+agent. The agent can be run by itself with command
 line options.  This is useful for testing and for turning outlets on or off
 from scripts.
 <xsl:if test="vendor-url">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/fencing.py.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/fencing.py.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/fencing.py.py   
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/fencing.py.py   
2024-07-01 10:20:11.000000000 +0200
@@ -603,7 +603,7 @@
                if len(value["help"]) != 0:
                        print("   " + _join_wrap([value["help"]], 
first_indent=3))
 
-def metadata(options, avail_opt, docs):
+def metadata(options, avail_opt, docs, 
agent_name=os.path.basename(sys.argv[0])):
        # avail_opt has to be unique, if there are duplicities then they should 
be removed
        sorted_list = [(key, all_opt[key]) for key in list(set(avail_opt)) if 
"longopt" in all_opt[key]]
        # Find keys that are going to replace inconsistent names
@@ -614,10 +614,10 @@
        sorted_list.sort(key=lambda x: (x[1]["order"], x[0]))
 
        if options["--action"] == "metadata":
-               docs["longdesc"] = re.sub("\\\\f[BPIR]|\.P|\.TP|\.br\n", "", 
docs["longdesc"])
+               docs["longdesc"] = re.sub(r"\\f[BPIR]|\.P|\.TP|\.br\n", r"", 
docs["longdesc"])
 
        print("<?xml version=\"1.0\" ?>")
-       print("<resource-agent name=\"" + os.path.basename(sys.argv[0]) + \
+       print("<resource-agent name=\"" + agent_name + \
                        "\" shortdesc=\"" + docs["shortdesc"] + "\" >")
        for (symlink, desc) in docs.get("symlink", []):
                print("<symlink name=\"" + symlink + "\" shortdesc=\"" + desc + 
"\"/>")
@@ -649,7 +649,7 @@
                        mixed = _encode_html_entities(mixed)
 
                        if not "shortdesc" in opt:
-                               shortdesc = re.sub(".*\s\s+", "", 
opt["help"][31:])
+                               shortdesc = re.sub(r".*\s\s+", r"", 
opt["help"][31:])
                        else:
                                shortdesc = opt["shortdesc"]
 
@@ -928,9 +928,15 @@
                sys.exit(0)
 
        if options.get("--action", "") in ["metadata", "manpage"]:
+               if options["--action"] == "metadata" or "agent_name" not in 
docs:
+                       agent_name=os.path.basename(sys.argv[0])
+               else:
+                       agent_name=docs["agent_name"]
+
+
                if "port_as_ip" in device_opt:
                        device_opt.remove("separator")
-               metadata(options, device_opt, docs)
+               metadata(options, device_opt, docs, agent_name)
                sys.exit(0)
 
        if "--version" in options:
@@ -973,14 +979,14 @@
 
                                        if options["--action"] == "list":
                                                try:
-                                                       print(outlet_id + 
options["--separator"] + alias)
+                                                       
print("{}{}{}".format(outlet_id, options["--separator"], alias))
                                                except UnicodeEncodeError as e:
-                                                       print((outlet_id + 
options["--separator"] + alias).encode("utf-8"))
+                                                       
print("{}{}{}".format(outlet_id, options["--separator"], alias).encode("utf-8"))
                                        elif options["--action"] == 
"list-status":
                                                try:
-                                                       print(outlet_id + 
options["--separator"] + alias + options["--separator"] + status)
+                                                       
print("{}{}{}{}{}".format(outlet_id, options["--separator"], alias, 
options["--separator"], status))
                                                except UnicodeEncodeError as e:
-                                                       print((outlet_id + 
options["--separator"] + alias).encode("utf-8") + options["--separator"] + 
status)
+                                                       
print("{}{}{}{}{}".format(outlet_id, options["--separator"], alias, 
options["--separator"], status).encode("utf-8"))
 
                        return result
 
@@ -1272,7 +1278,7 @@
                           executable="/bin/sh")
     # replace env
     os.environ.clear()
-    os.environ.update(line.partition('=')[::2] for line in 
output.decode("utf-8").split('\0') if not re.match("^\s*$", line))
+    os.environ.update(line.partition('=')[::2] for line in 
output.decode("utf-8").split('\0') if not re.match(r"^\s*$", line))
 
 # Convert array of format [[key1, value1], [key2, value2], ... [keyN, valueN]] 
to dict, where key is
 # in format a.b.c.d...z and returned dict has key only z
@@ -1359,7 +1365,7 @@
 
 def _login_telnet(options, re_login_string):
        re_login = re.compile(re_login_string, re.IGNORECASE)
-       re_pass = re.compile("(password)|(pass phrase)", re.IGNORECASE)
+       re_pass = re.compile(r"(password)|(pass phrase)", re.IGNORECASE)
 
        conn = fspawn(options, options["--telnet-path"])
        conn.send("set binary\n")
@@ -1400,7 +1406,7 @@
 
 def _login_ssh_with_password(options, re_login_string):
        re_login = re.compile(re_login_string, re.IGNORECASE)
-       re_pass = re.compile("(password)|(pass phrase)", re.IGNORECASE)
+       re_pass = re.compile(r"(password)|(pass phrase)", re.IGNORECASE)
 
        if "--inet6-only" in options:
                force_ipvx = "-6 "
@@ -1608,7 +1614,7 @@
 
                (name, value) = (line + "=").split("=", 1)
                value = value[:-1]
-               value = re.sub("^\"(.*)\"$", "\\1", value)
+               value = re.sub(r"^\"(.*)\"$", r"\1", value)
 
                if name.replace("-", "_") in mapping_longopt_names:
                        name = mapping_longopt_names[name.replace("-", "_")]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/fencing_snmp.py.py 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/fencing_snmp.py.py
--- old/fence-agents-4.13.1+git.1707822268.4229d52f/lib/fencing_snmp.py.py      
2024-02-13 12:04:28.000000000 +0100
+++ new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/lib/fencing_snmp.py.py      
2024-07-01 10:20:11.000000000 +0200
@@ -91,7 +91,7 @@
 
                        logging.debug("%s\n", res_output)
 
-                       if (res_code != 0) or (re.search("^Error ", res_output, 
re.MULTILINE) != None):
+                       if (res_code != 0) or (re.search(r"^Error ", 
res_output, re.MULTILINE) != None):
                                fail_usage("Returned %d: %s"% (res_code, 
res_output))
                except pexpect.ExceptionPexpect:
                        fail_usage("Cannot run command %s"%(command))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_aliyun.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_aliyun.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_aliyun.xml
        2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_aliyun.xml
        2024-07-01 10:20:11.000000000 +0200
@@ -38,6 +38,15 @@
                <content type="string"  />
                <shortdesc lang="en">Ram Role.</shortdesc>
        </parameter>
+       <parameter name="credentials_file" unique="0" required="0">
+               <getopt mixed="--credentials-file=[path]" />
+               <shortdesc lang="en">Path to credentials file</shortdesc>
+       </parameter>
+       <parameter name="credentials_file_profile" unique="0" required="0">
+               <getopt mixed="--credentials-file-profile=[profile]" />
+               <content type="string" default="default"  />
+               <shortdesc lang="en">Credentials file profile</shortdesc>
+       </parameter>
        <parameter name="filter" unique="0" required="0">
                <getopt mixed="--filter=[key=value]" />
                <content type="string"  />
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_docker.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_docker.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_docker.xml
        2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_docker.xml
        2024-07-01 10:20:11.000000000 +0200
@@ -61,6 +61,11 @@
                <content type="string" default="1.11"  />
                <shortdesc lang="en">Version of Docker Remote API (default: 
1.11)</shortdesc>
        </parameter>
+       <parameter name="disable_ssl" unique="0" required="0">
+               <getopt mixed="--disable-ssl" />
+               <content type="boolean"  />
+               <shortdesc lang="en">Don't use SSL</shortdesc>
+       </parameter>
        <parameter name="tlscacert" unique="0" required="0">
                <getopt mixed="--tlscacert" />
                <content type="string"  />
@@ -76,6 +81,11 @@
                <content type="string"  />
                <shortdesc lang="en">Path to client key (PEM format) for TLS 
authentication.  Required if --ssl option is used.</shortdesc>
        </parameter>
+       <parameter name="unix_socket" unique="0" required="0">
+               <getopt mixed="--unix-socket" />
+               <content type="string"  />
+               <shortdesc lang="en">Path to Docker's unix socket. Use this 
with --disable-ssl.</shortdesc>
+       </parameter>
        <parameter name="quiet" unique="0" required="0">
                <getopt mixed="-q, --quiet" />
                <content type="boolean"  />
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_eps.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_eps.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_eps.xml
   2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_eps.xml
   2024-07-01 10:20:11.000000000 +0200
@@ -1,9 +1,12 @@
 <?xml version="1.0" ?>
 <resource-agent name="fence_eps" shortdesc="Fence agent for ePowerSwitch" >
-<longdesc>fence_eps is a Power Fencing agent which can be used with the 
ePowerSwitch 8M+ power switch to fence connected machines. Fence agent works 
ONLY on 8M+ device, because this is only one, which has support for hidden page 
feature. 
+<symlink name="fence_epsr2" shortdesc="Fence agent for ePowerSwitch R2 and 
newer"/>
+<longdesc>fence_eps is a Power Fencing agent which can be used with the 
ePowerSwitch 8M+ power switch to fence connected machines. It ONLY works on 8M+ 
devices, as they support the hidden page feature. 
 
-Agent basically works by connecting to hidden page and pass appropriate 
arguments to GET request. This means, that hidden page feature must be enabled 
and properly configured.</longdesc>
-<vendor-url>http://www.epowerswitch.com</vendor-url>
+The agent works by connecting to the hidden page and pass the appropriate 
arguments to GET request. This means, that the hidden page feature must be 
enabled and properly configured. 
+
+NOTE: In most cases you want to use fence_epsr2, as fence_eps only works with 
older hardware.</longdesc>
+<vendor-url>https://www.neol.com</vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
                <getopt mixed="-o, --action=[action]" />
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_epsr2.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_epsr2.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_epsr2.xml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_epsr2.xml
 2024-07-01 10:20:11.000000000 +0200
@@ -0,0 +1,178 @@
+<?xml version="1.0" ?>
+<resource-agent name="fence_epsr2" shortdesc="Fence agent for ePowerSwitch" >
+<symlink name="fence_epsr2" shortdesc="Fence agent for ePowerSwitch R2 and 
newer"/>
+<longdesc>fence_epsr2 is a Power Fencing agent which can be used with the 
ePowerSwitch 8M+ power switch to fence connected machines. It ONLY works on 8M+ 
devices, as they support the hidden page feature. 
+
+The agent works by connecting to the hidden page and pass the appropriate 
arguments to GET request. This means, that the hidden page feature must be 
enabled and properly configured. 
+
+NOTE: In most cases you want to use fence_epsr2, as fence_eps only works with 
older hardware.</longdesc>
+<vendor-url>https://www.neol.com</vendor-url>
+<parameters>
+       <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="hidden_page" unique="0" required="0" deprecated="1">
+               <getopt mixed="-c, --page=[page]" />
+               <content type="string" default="hidden.htm"  />
+               <shortdesc lang="en">Name of hidden page</shortdesc>
+       </parameter>
+       <parameter name="ip" unique="0" required="1" obsoletes="ipaddr">
+               <getopt mixed="-a, --ip=[ip]" />
+               <content type="string"  />
+               <shortdesc lang="en">IP address or hostname of fencing 
device</shortdesc>
+       </parameter>
+       <parameter name="ipaddr" unique="0" required="1" deprecated="1">
+               <getopt mixed="-a, --ip=[ip]" />
+               <content type="string"  />
+               <shortdesc lang="en">IP address or hostname of fencing 
device</shortdesc>
+       </parameter>
+       <parameter name="ipport" unique="0" required="0">
+               <getopt mixed="-u, --ipport=[port]" />
+               <content type="integer" default="80"  />
+               <shortdesc lang="en">TCP/UDP port to use for connection with 
device</shortdesc>
+       </parameter>
+       <parameter name="login" unique="0" required="0" deprecated="1">
+               <getopt mixed="-l, --username=[name]" />
+               <content type="string"  />
+               <shortdesc lang="en">Login name</shortdesc>
+       </parameter>
+       <parameter name="page" unique="0" required="0" obsoletes="hidden_page">
+               <getopt mixed="-c, --page=[page]" />
+               <content type="string" default="hidden.htm"  />
+               <shortdesc lang="en">Name of hidden page</shortdesc>
+       </parameter>
+       <parameter name="passwd" unique="0" required="0" deprecated="1">
+               <getopt mixed="-p, --password=[password]" />
+               <content type="string"  />
+               <shortdesc lang="en">Login password or passphrase</shortdesc>
+       </parameter>
+       <parameter name="passwd_script" unique="0" required="0" deprecated="1">
+               <getopt mixed="-S, --password-script=[script]" />
+               <content type="string"  />
+               <shortdesc lang="en">Script to run to retrieve 
password</shortdesc>
+       </parameter>
+       <parameter name="password" unique="0" required="0" obsoletes="passwd">
+               <getopt mixed="-p, --password=[password]" />
+               <content type="string"  />
+               <shortdesc lang="en">Login password or passphrase</shortdesc>
+       </parameter>
+       <parameter name="password_script" unique="0" required="0" 
obsoletes="passwd_script">
+               <getopt mixed="-S, --password-script=[script]" />
+               <content type="string"  />
+               <shortdesc lang="en">Script to run to retrieve 
password</shortdesc>
+       </parameter>
+       <parameter name="plug" unique="0" required="1" obsoletes="port">
+               <getopt mixed="-n, --plug=[id]" />
+               <content type="string"  />
+               <shortdesc lang="en">Physical plug number on device, UUID or 
identification of machine</shortdesc>
+       </parameter>
+       <parameter name="port" unique="0" required="1" deprecated="1">
+               <getopt mixed="-n, --plug=[id]" />
+               <content type="string"  />
+               <shortdesc lang="en">Physical plug number on device, UUID or 
identification of machine</shortdesc>
+       </parameter>
+       <parameter name="username" unique="0" required="0" obsoletes="login">
+               <getopt mixed="-l, --username=[name]" />
+               <content type="string"  />
+               <shortdesc lang="en">Login name</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="plug_separator" unique="0" required="0">
+               <getopt mixed="--plug-separator=[char]" />
+               <content type="string" default=","  />
+               <shortdesc lang="en">Separator for plug parameter when 
specifying more than 1 plug</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>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_idrac.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_idrac.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_idrac.xml
 2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_idrac.xml
 2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_idrac is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_idrac is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ilo3.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ilo3.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ilo3.xml
  2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ilo3.xml
  2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_ilo3 is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_ilo3 is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ilo4.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ilo4.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ilo4.xml
  2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ilo4.xml
  2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_ilo4 is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_ilo4 is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ilo5.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ilo5.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ilo5.xml
  2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ilo5.xml
  2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_ilo5 is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_ilo5 is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_imm.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_imm.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_imm.xml
   2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_imm.xml
   2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_imm is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_imm is a Power Fencing agent which can be used with machines 
controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ipmilan.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ipmilan.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ipmilan.xml
       2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ipmilan.xml
       2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_ipmilan is a Power Fencing agent which can be used with 
machines controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_ipmilan is a Power Fencing agent which can be used with 
machines controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ipmilanplus.xml
 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ipmilanplus.xml
--- 
old/fence-agents-4.13.1+git.1707822268.4229d52f/tests/data/metadata/fence_ipmilanplus.xml
   2024-02-13 12:04:28.000000000 +0100
+++ 
new/fence-agents-4.15.0+git.1719822011.7a2c0a7f/tests/data/metadata/fence_ipmilanplus.xml
   2024-07-01 10:20:11.000000000 +0200
@@ -6,7 +6,9 @@
 <symlink name="fence_ipmilanplus" shortdesc="Fence agent for IPMIv2 lanplus"/>
 <symlink name="fence_imm" shortdesc="Fence agent for IBM Integrated Management 
Module"/>
 <symlink name="fence_idrac" shortdesc="Fence agent for Dell iDRAC"/>
-<longdesc>fence_ipmilanplus is a Power Fencing agent which can be used with 
machines controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/). WARNING! This fence agent might report success 
before the node is powered off. You should use -m/method onoff if your fence 
device works correctly with that option.</longdesc>
+<longdesc>fence_ipmilanplus is a Power Fencing agent which can be used with 
machines controlled by IPMI. This agent calls support software ipmitool 
(http://ipmitool.sf.net/).
+
+WARNING! This fence agent might report success before the node is powered off. 
You should use -m/method onoff if your fence device works correctly with that 
option.</longdesc>
 <vendor-url></vendor-url>
 <parameters>
        <parameter name="action" unique="0" required="1">

Reply via email to