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 2026-08-19 17:59:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fence-agents (Old)
 and      /work/SRC/openSUSE:Factory/.fence-agents.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fence-agents"

Wed Aug 19 17:59:26 2026 rev:95 rq:1371936 
version:4.17.0+git.1786356985.d90bec5f

Changes:
--------
--- /work/SRC/openSUSE:Factory/fence-agents/fence-agents.changes        
2026-07-28 18:22:36.240369794 +0200
+++ /work/SRC/openSUSE:Factory/.fence-agents.new.1258/fence-agents.changes      
2026-08-19 18:01:24.110629857 +0200
@@ -1,0 +2,8 @@
+Wed Aug 12 07:09:12 UTC 2026 - Peter Varkoly <[email protected]>
+
+- Update to version 4.17.0+git.1786356985.d90bec5f:
+  * fence_vmware_rest: remove static --token option
+  * fence_gce: fail immediately on import errors
+  * fence_openstack: implement reboot_cycle_fn for hard reboot support (#657)
+
+-------------------------------------------------------------------

Old:
----
  fence-agents-4.17.0+git.1784121740.9871084.tar.xz

New:
----
  fence-agents-4.17.0+git.1786356985.d90bec5f.tar.xz

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

Other differences:
------------------
++++++ fence-agents.spec ++++++
--- /var/tmp/diff_new_pack.386q0z/_old  2026-08-19 18:01:25.571682345 +0200
+++ /var/tmp/diff_new_pack.386q0z/_new  2026-08-19 18:01:25.574682452 +0200
@@ -19,7 +19,7 @@
 %define agent_list aliyun alom apc apc_snmp aws azure_arm bladecenter brocade 
cisco_mds cisco_ucs drac5 dummy eaton_snmp eaton_ssh emerson eps evacuate gce 
hds_cb hpblade ibmblade ibmz ibm_powervs ibm_vpc ifmib ilo ilo_moonshot ilo_mp 
ilo_ssh intelmodular ipdu ipmilan ironic kdump lpar mpath netio nutanix_ahv 
powerman pve raritan rcd_serial redfish rsa rsb sanbox2 sbd scsi vbox virsh 
vmware vmware_rest wti zvm
 Name:           fence-agents
 Summary:        Set of unified programs capable of host isolation ("fencing")
-Version:        4.17.0+git.1784121740.9871084
+Version:        4.17.0+git.1786356985.d90bec5f
 Release:        0
 License:        GPL-2.0-or-later AND LGPL-2.0-or-later
 Group:          Productivity/Clustering/HA

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.386q0z/_old  2026-08-19 18:01:25.698686907 +0200
+++ /var/tmp/diff_new_pack.386q0z/_new  2026-08-19 18:01:25.704687123 +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">9871084e6652815b0e07ac38baa13614f8f7eb37</param></service></servicedata>
+              <param 
name="changesrevision">d90bec5f9d67b27e6086a50fdf1ee289defcac5f</param></service></servicedata>
 (No newline at EOF)
 

++++++ fence-agents-4.17.0+git.1784121740.9871084.tar.xz -> 
fence-agents-4.17.0+git.1786356985.d90bec5f.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/.gitignore 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/.gitignore
--- old/fence-agents-4.17.0+git.1784121740.9871084/.gitignore   2026-07-15 
15:22:20.000000000 +0200
+++ new/fence-agents-4.17.0+git.1786356985.d90bec5f/.gitignore  1970-01-01 
01:00:00.000000000 +0100
@@ -1,75 +0,0 @@
-*.orig
-*.rej
-*.swp
-Makefile.in
-aclocal.m4
-autoconf
-autoheader
-autom4te.cache
-automake
-autoscan.log
-compile
-configure
-configure.scan
-config.guess
-config.log
-config.sub
-config.status
-Makefile
-depcomp
-install-sh
-libtoolize
-ltmain.sh
-libtool
-make/stamp-h1
-
-# ignore "libtoolized" m4 files, but keep our (enumerated) ones
-/m4/*
-!/m4/ac_python_module.m4
-!/m4/ax*.m4
-
-# make/release.mk related litter
-/.tarball-version
-/tag-*
-
-make/config.h*
-missing
-*.pc
-.deps
-.libs
-*.o
-*.la
-*.lo
-lib/*.py*
-lib/__pycache__
-!lib/*.py.py
-!lib/check_used_options.py
-agents/*/fence_*
-agents/*/.dirstamp
-!agents/*/fence_*.py
-!agents/*/fence_*.c
-!agents/*/fence_*.h
-!agents/kdump/fence_kdump_send.8
-!agents/manual/fence_ack_manual.8
-!agents/zvm/fence_zvm_man_page
-.fence*.tmp
-fence-agents*
-.version
-tests/devices.d/*
-
-y.tab.*
-*.o
-*.lo
-*.la
-.deps
-.libs
-.*version
-*.swp
-agents/virt/client/fence_virt
-agents/virt/client/fence_xvm
-agents/virt/common/libfence_virt.a
-agents/virt/config/config.c
-agents/virt/config/libsimpleconfig.a
-agents/virt/fence_virtd.service
-agents/virt/server/fence_virtd
-fence-virt-*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/agents/gce/fence_gce.py 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/agents/gce/fence_gce.py
--- old/fence-agents-4.17.0+git.1784121740.9871084/agents/gce/fence_gce.py      
2026-07-15 15:22:20.000000000 +0200
+++ new/fence-agents-4.17.0+git.1786356985.d90bec5f/agents/gce/fence_gce.py     
2026-08-10 12:16:25.000000000 +0200
@@ -36,10 +36,11 @@
   import socks
   try:
     from google.oauth2.credentials import Credentials as GoogleCredentials
-  except:
+  except ImportError:
     from oauth2client.client import GoogleCredentials
-except:
-  pass
+except Exception as e:
+    from fencing import fail_import_if_not_metadata_or_help_action
+    fail_import_if_not_metadata_or_help_action("Failed to import Google Cloud 
dependencies", e)
 
 VERSION = '1.0.5'
 ACTION_IDS = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/agents/openstack/fence_openstack.py
 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/agents/openstack/fence_openstack.py
--- 
old/fence-agents-4.17.0+git.1784121740.9871084/agents/openstack/fence_openstack.py
  2026-07-15 15:22:20.000000000 +0200
+++ 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/agents/openstack/fence_openstack.py
 2026-08-10 12:16:25.000000000 +0200
@@ -112,13 +112,17 @@
         except Conflict as e:
             fail_usage(e)
         logging.info("Called stop API call for " + server.id)
-    if action == "reboot":
-        logging.info("Rebooting instance " + server.name)
-        try:
-            server.reboot("HARD")
-        except Conflict as e:
-            fail_usage(e)
-        logging.info("Called reboot hard API call for " + server.id)
+
+
+def reboot_cycle(conn, options):
+    server = conn.servers.get(options["--plug"])
+    logging.info("Hard rebooting instance " + server.name)
+    try:
+        server.reboot("HARD")
+    except Conflict as e:
+        fail_usage(e)
+    logging.info("Called reboot HARD API call for " + server.id)
+    return True
 
 
 def nova_login(username, password, projectname, auth_url, user_domain_name,
@@ -297,6 +301,7 @@
         "ssl_insecure",
         "cacert",
         "apitimeout",
+        "method",
     ]
 
     atexit.register(atexit_handler)
@@ -404,7 +409,7 @@
         fail_usage("Failed: Unable to connect to Nova: " + str(e))
 
     # Operate the fencing device
-    result = fence_action(conn, options, set_power_status, get_power_status, 
get_nodes_list)
+    result = fence_action(conn, options, set_power_status, get_power_status, 
get_nodes_list, reboot_cycle_fn=reboot_cycle)
     sys.exit(result)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/agents/vmware_rest/fence_vmware_rest.py
 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/agents/vmware_rest/fence_vmware_rest.py
--- 
old/fence-agents-4.17.0+git.1784121740.9871084/agents/vmware_rest/fence_vmware_rest.py
      2026-07-15 15:22:20.000000000 +0200
+++ 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/agents/vmware_rest/fence_vmware_rest.py
     2026-08-10 12:16:25.000000000 +0200
@@ -68,9 +68,9 @@
 
        return outlets
 
-def connect(opt):
-       if "--token" not in opt and ("--username" not in opt or "--password" 
not in opt):
-               fail_usage("Failed: You must provide either a token, a 
token-script, or a username/password.")
+def connect(opt, token=None):
+       if token is None and ("--username" not in opt or "--password" not in 
opt):
+               fail_usage("Failed: You must provide either a token-script or a 
username/password.")
        conn = pycurl.Curl()
 
        ## setup correct URL
@@ -99,7 +99,7 @@
                conn.setopt(pycurl.SSL_VERIFYPEER, 0)
                conn.setopt(pycurl.SSL_VERIFYHOST, 0)
 
-       if "--token" not in opt:
+       if token is None:
                conn.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
                conn.setopt(pycurl.USERPWD, opt["--username"] + ":" + 
opt["--password"])
 
@@ -114,7 +114,7 @@
        # set session id for later requests
        conn.setopt(pycurl.HTTPHEADER, [
                "Accept: application/json",
-               "vmware-api-session-id: {}".format(opt["--token"] if "--token" 
in opt else result["value"]),
+               "vmware-api-session-id: {}".format(token if token is not None 
else result["value"]),
        ])
 
        return conn
@@ -187,13 +187,6 @@
                "shortdesc" : "Filter to only return relevant VMs. It can be 
used to avoid "
                              "the agent failing when more than 1000 VMs should 
be returned.",
                "order" : 2}
-       all_opt["token"] = {
-               "getopt" : ":",
-               "longopt" : "token",
-               "help" : "--token=[token]                API Token",
-               "required" : "0",
-               "shortdesc" : "API Token",
-               "order" : 2}
        all_opt["token_script"] = {
                "getopt" : ":",
                "longopt" : "token-script",
@@ -216,7 +209,6 @@
                "web",
                "port",
                "filter",
-               "token",
                "token_script",
        ]
 
@@ -227,9 +219,10 @@
        all_opt["power_wait"]["default"] = "1"
 
        options = check_input(device_opt, process_input(device_opt))
+       token = None
        if "--token-script" in options:
                try:
-                       options["--token"] = run_command(options, 
options["--token-script"])[1].strip()
+                       token = run_command(options, 
options["--token-script"])[1].strip()
                except Exception as e:
                        logging.error("Failed to execute token script: 
{}".format(e))
                        sys.exit(EC_LOGIN_DENIED)
@@ -250,7 +243,7 @@
        ####
        run_delay(options)
 
-       conn = connect(options)
+       conn = connect(options, token)
        atexit.register(disconnect, conn)
 
        result = fence_action(conn, options, set_power_status, 
get_power_status, get_list)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/lib/fencing.py.py 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/lib/fencing.py.py
--- old/fence-agents-4.17.0+git.1784121740.9871084/lib/fencing.py.py    
2026-07-15 15:22:20.000000000 +0200
+++ new/fence-agents-4.17.0+git.1786356985.d90bec5f/lib/fencing.py.py   
2026-08-10 12:16:25.000000000 +0200
@@ -1280,6 +1280,19 @@
     os.environ.clear()
     os.environ.update(line.partition('=')[::2] for line in 
output.decode("utf-8").split('\0') if not re.match(r"^\s*$", line))
 
+def fail_import_if_not_metadata_or_help_action(message, e):
+    args = sys.argv[1:]
+    opts = list(zip(args, args[1:] + [None]))
+    if any(opt in ("-h", "--help", "--action=metadata", "--action=manpage") or 
(opt in ("-o", "--action") and arg in ("metadata", "manpage")) for opt, arg in 
opts):
+        return
+    # When no command-line args, input might be from stdin - defer error to 
let argument validation happen
+    if len(args) == 0:
+        return
+    # Otherwise fail immediately
+    logging.getLogger().name = os.path.basename(sys.argv[0])
+    logging.error("%s: %s", message, str(e))
+    sys.exit(EC_GENERIC_ERROR)
+
 # 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
 def array_to_dict(array):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/tests/data/metadata/fence_openstack.xml
 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/tests/data/metadata/fence_openstack.xml
--- 
old/fence-agents-4.17.0+git.1784121740.9871084/tests/data/metadata/fence_openstack.xml
      2026-07-15 15:22:20.000000000 +0200
+++ 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/tests/data/metadata/fence_openstack.xml
     2026-08-10 12:16:25.000000000 +0200
@@ -13,6 +13,14 @@
                <content type="string"  />
                <shortdesc lang="en">Login name</shortdesc>
        </parameter>
+       <parameter name="method" unique="0" required="0">
+               <getopt mixed="-m, --method=[method]" />
+               <content type="select" default="onoff"  >
+                       <option value="onoff" />
+                       <option value="cycle" />
+               </content>
+               <shortdesc lang="en">Method to fence</shortdesc>
+       </parameter>
        <parameter name="passwd" unique="0" required="0" deprecated="1">
                <getopt mixed="-p, --password=[password]" />
                <content type="string"  />
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fence-agents-4.17.0+git.1784121740.9871084/tests/data/metadata/fence_vmware_rest.xml
 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/tests/data/metadata/fence_vmware_rest.xml
--- 
old/fence-agents-4.17.0+git.1784121740.9871084/tests/data/metadata/fence_vmware_rest.xml
    2026-07-15 15:22:20.000000000 +0200
+++ 
new/fence-agents-4.17.0+git.1786356985.d90bec5f/tests/data/metadata/fence_vmware_rest.xml
   2026-08-10 12:16:25.000000000 +0200
@@ -94,11 +94,6 @@
                <content type="string"  />
                <shortdesc lang="en">Filter to only return relevant VMs. It can 
be used to avoid the agent failing when more than 1000 VMs should be 
returned.</shortdesc>
        </parameter>
-       <parameter name="token" unique="0" required="0">
-               <getopt mixed="--token=[token]" />
-               <content type="string"  />
-               <shortdesc lang="en">API Token</shortdesc>
-       </parameter>
        <parameter name="token_script" unique="0" required="0">
                <getopt mixed="--token-script=[script]" />
                <content type="string"  />

Reply via email to