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-06-22 17:42:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fence-agents (Old) and /work/SRC/openSUSE:Factory/.fence-agents.new.1956 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fence-agents" Mon Jun 22 17:42:51 2026 rev:93 rq:1361074 version:4.17.0+git.1781703439.0804740 Changes: -------- --- /work/SRC/openSUSE:Factory/fence-agents/fence-agents.changes 2026-02-25 21:21:54.786179795 +0100 +++ /work/SRC/openSUSE:Factory/.fence-agents.new.1956/fence-agents.changes 2026-06-22 17:43:25.927184699 +0200 @@ -1,0 +2,9 @@ +Mon Jun 22 10:28:33 UTC 2026 - [email protected] + +- Update to version 4.17.0+git.1781703439.0804740: + * fence_openstack: fix list-action to avoid timeout when there are 100+ VMs on the hypervisor + * fence_ibm_vpc: set proxy when token has expired as well + * fence_openstack: add auth-plugin support for clouds.yaml (#651) + * fencing.py: change from Bash "source" to POSIX-compliant "." + +------------------------------------------------------------------- Old: ---- fence-agents-4.17.0+git.1769693386.608dd62.tar.xz New: ---- fence-agents-4.17.0+git.1781703439.0804740.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fence-agents.spec ++++++ --- /var/tmp/diff_new_pack.119kbN/_old 2026-06-22 17:43:28.419272000 +0200 +++ /var/tmp/diff_new_pack.119kbN/_new 2026-06-22 17:43:28.431272421 +0200 @@ -1,8 +1,7 @@ # # spec file for package fence-agents # -# Copyright (c) 2026 SUSE LLC -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -20,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.1769693386.608dd62 +Version: 4.17.0+git.1781703439.0804740 Release: 0 License: GPL-2.0-or-later AND LGPL-2.0-or-later Group: Productivity/Clustering/HA ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.119kbN/_old 2026-06-22 17:43:28.795285172 +0200 +++ /var/tmp/diff_new_pack.119kbN/_new 2026-06-22 17:43:28.835286574 +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">608dd62f4d213f8583e96fc5b2e2bd65b0d25108</param></service></servicedata> + <param name="changesrevision">080474034850df23538f97e74e8114283670cb72</param></service></servicedata> (No newline at EOF) ++++++ fence-agents-4.17.0+git.1769693386.608dd62.tar.xz -> fence-agents-4.17.0+git.1781703439.0804740.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fence-agents-4.17.0+git.1769693386.608dd62/agents/ibm_vpc/fence_ibm_vpc.py new/fence-agents-4.17.0+git.1781703439.0804740/agents/ibm_vpc/fence_ibm_vpc.py --- old/fence-agents-4.17.0+git.1769693386.608dd62/agents/ibm_vpc/fence_ibm_vpc.py 2026-01-29 14:29:46.000000000 +0100 +++ new/fence-agents-4.17.0+git.1781703439.0804740/agents/ibm_vpc/fence_ibm_vpc.py 2026-06-17 15:37:19.000000000 +0200 @@ -198,6 +198,7 @@ # auth if token has expired if rc in [400, 401, 415]: tokenconn = pycurl.Curl() + tokenconn.setopt(pycurl.PROXY, "{}".format(opt["--proxy"])) token = get_bearer_token(tokenconn, options) tokenconn.close() conn = set_bearer_token(conn, token) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fence-agents-4.17.0+git.1769693386.608dd62/agents/openstack/fence_openstack.py new/fence-agents-4.17.0+git.1781703439.0804740/agents/openstack/fence_openstack.py --- old/fence-agents-4.17.0+git.1769693386.608dd62/agents/openstack/fence_openstack.py 2026-01-29 14:29:46.000000000 +0100 +++ new/fence-agents-4.17.0+git.1781703439.0804740/agents/openstack/fence_openstack.py 2026-06-17 15:37:19.000000000 +0200 @@ -52,15 +52,24 @@ def get_nodes_list(conn, options): - logging.info("Running %s action", options["--action"]) + logging.info("Running %s action", options.get("--original-action", options.get("--action"))) result = {} - response = conn.servers.list(detailed=True) - if response is not None: - for item in response: - instance_id = item.id - instance_name = item.name - instance_status = item.status - result[instance_id] = (instance_name, translate_status(instance_status)) + search_opts = {} + max_results = 1 if options.get("--original-action") == "monitor" else None + + if "--plug" in options: + search_opts["uuid"] = options["--plug"] + + try: + response = conn.servers.list(detailed=True, search_opts=search_opts, limit=max_results) + if response is not None: + for item in response: + instance_id = item.id + instance_name = item.name + instance_status = item.status + result[instance_id] = (instance_name, translate_status(instance_status)) + except Exception as e: + logging.error("Failed to retrieve node list: %s", e) return result @@ -113,7 +122,8 @@ def nova_login(username, password, projectname, auth_url, user_domain_name, - project_domain_name, ssl_insecure, cacert, apitimeout): + project_domain_name, ssl_insecure, cacert, apitimeout, + auth_plugin="password", auth_options=None): legacy_import = False try: @@ -131,16 +141,20 @@ fail_usage("Failed: Keystone client not found or not accessible") if not legacy_import: - loader = loading.get_plugin_loader("password") - auth = loader.load_from_options( - auth_url=auth_url, - username=username, - password=password, - project_name=projectname, - user_domain_name=user_domain_name, - project_domain_name=project_domain_name, - ) + loader = loading.get_plugin_loader(auth_plugin) + if auth_options is None: + auth_options = dict( + auth_url=auth_url, + username=username, + password=password, + project_name=projectname, + user_domain_name=user_domain_name, + project_domain_name=project_domain_name, + ) + auth = loader.load_from_options(**auth_options) else: + if auth_plugin != "password": + fail_usage("Failed: Keystone auth plugins require keystoneauth1") auth = v3.Password( auth_url=auth_url, username=username, @@ -251,6 +265,15 @@ "default": 60, "order": 10, } + all_opt["auth-plugin"] = { + "getopt": ":", + "longopt": "auth-plugin", + "help": "--auth-plugin=[plugin] Keystone auth plugin", + "required": "0", + "shortdesc": "Keystone auth plugin", + "default": "password", + "order": 11, + } def main(): @@ -265,6 +288,7 @@ "project-name", "user-domain-name", "project-domain-name", + "auth-plugin", "cloud", "openrc", "port", @@ -309,8 +333,13 @@ run_delay(options) + auth_options = None if options.get("--cloud"): cloud = get_cloud(options) + if options["--auth-plugin"] == "password": + options["--auth-plugin"] = cloud.get("auth_type") or options["--auth-plugin"] + if options["--auth-plugin"] != "password": + auth_options = cloud.get("auth") username = cloud.get("auth").get("username") password = cloud.get("auth").get("password") projectname = cloud.get("auth").get("project_name") @@ -368,6 +397,8 @@ ssl_insecure, cacert, apitimeout, + options["--auth-plugin"], + auth_options, ) except Exception as e: fail_usage("Failed: Unable to connect to Nova: " + str(e)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fence-agents-4.17.0+git.1769693386.608dd62/lib/fencing.py.py new/fence-agents-4.17.0+git.1781703439.0804740/lib/fencing.py.py --- old/fence-agents-4.17.0+git.1769693386.608dd62/lib/fencing.py.py 2026-01-29 14:29:46.000000000 +0100 +++ new/fence-agents-4.17.0+git.1781703439.0804740/lib/fencing.py.py 2026-06-17 15:37:19.000000000 +0200 @@ -1274,7 +1274,7 @@ def source_env(env_file): # POSIX: name shall not contain '=', value doesn't contain '\0' - output = subprocess.check_output("source {} && env -0".format(env_file), shell=True, + output = subprocess.check_output(". {} && env -0".format(env_file), shell=True, executable="/bin/sh") # replace env os.environ.clear() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fence-agents-4.17.0+git.1769693386.608dd62/tests/data/metadata/fence_openstack.xml new/fence-agents-4.17.0+git.1781703439.0804740/tests/data/metadata/fence_openstack.xml --- old/fence-agents-4.17.0+git.1769693386.608dd62/tests/data/metadata/fence_openstack.xml 2026-01-29 14:29:46.000000000 +0100 +++ new/fence-agents-4.17.0+git.1781703439.0804740/tests/data/metadata/fence_openstack.xml 2026-06-17 15:37:19.000000000 +0200 @@ -118,6 +118,16 @@ <content type="second" default="60" /> <shortdesc lang="en">Timeout in seconds to use for API calls, default is 60.</shortdesc> </parameter> + <parameter name="auth-plugin" unique="0" required="0" deprecated="1"> + <getopt mixed="--auth-plugin=[plugin]" /> + <content type="string" default="password" /> + <shortdesc lang="en">Keystone auth plugin</shortdesc> + </parameter> + <parameter name="auth_plugin" unique="0" required="0" obsoletes="auth-plugin"> + <getopt mixed="--auth-plugin=[plugin]" /> + <content type="string" default="password" /> + <shortdesc lang="en">Keystone auth plugin</shortdesc> + </parameter> <parameter name="quiet" unique="0" required="0"> <getopt mixed="-q, --quiet" /> <content type="boolean" />
