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" />
