Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package crmsh for openSUSE:Factory checked 
in at 2026-08-14 22:09:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/crmsh (Old)
 and      /work/SRC/openSUSE:Factory/.crmsh.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "crmsh"

Fri Aug 14 22:09:15 2026 rev:418 rq:1371163 version:5.1.0+20260814.d9688661

Changes:
--------
--- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes      2026-07-31 
16:06:34.702906968 +0200
+++ /work/SRC/openSUSE:Factory/.crmsh.new.1258/crmsh.changes    2026-08-14 
22:09:19.241055265 +0200
@@ -1,0 +2,29 @@
+Fri Aug 14 07:15:51 UTC 2026 - [email protected]
+
+- Update to version 5.1.0+20260814.d9688661:
+  * Dev: migration: Add check and online auto-fix for deprecated cluster 
properties (bsc#1271223)
+  * Fix: migration: typo in the signature of method `handle_problem`
+
+-------------------------------------------------------------------
+Mon Aug 10 09:11:20 UTC 2026 - [email protected]
+
+- Update to version 5.1.0+20260810.421dd6c0:
+  * Dev: unittests: Remove noisy unit test output
+  * Dev: doc: Fix typos in crm.8.adoc
+  * Dev: doc: Remove parallax-related expressions from crm.8.adoc
+  * Dev: Remove unused functions
+  * Dev: doc: Remove csync2 from crm.8.adoc
+
+-------------------------------------------------------------------
+Thu Aug 06 07:32:15 UTC 2026 - [email protected]
+
+- Update to version 5.1.0+20260806.25794c81:
+  * Dev: Avoid hash for content checks
+
+-------------------------------------------------------------------
+Fri Jul 31 09:46:30 UTC 2026 - [email protected]
+
+- Update to version 5.1.0+20260731.8b5d2b6d:
+  * Dev: qdevice: Move utils.get_qdevice_sync_timeout into QDevice class
+
+-------------------------------------------------------------------

Old:
----
  crmsh-5.1.0+20260730.157564b0.tar.bz2

New:
----
  crmsh-5.1.0+20260814.d9688661.tar.bz2

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

Other differences:
------------------
++++++ crmsh.spec ++++++
--- /var/tmp/diff_new_pack.Oovka8/_old  2026-08-14 22:09:20.420098507 +0200
+++ /var/tmp/diff_new_pack.Oovka8/_new  2026-08-14 22:09:20.422098581 +0200
@@ -41,7 +41,7 @@
 Summary:        High Availability cluster command-line interface
 License:        GPL-2.0-or-later
 Group:          %{pkg_group}
-Version:        5.1.0+20260730.157564b0
+Version:        5.1.0+20260814.d9688661
 Release:        0
 URL:            http://crmsh.github.io
 Source0:        %{name}-%{version}.tar.bz2

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Oovka8/_old  2026-08-14 22:09:20.487100964 +0200
+++ /var/tmp/diff_new_pack.Oovka8/_new  2026-08-14 22:09:20.490101074 +0200
@@ -9,7 +9,7 @@
 </service>
 <service name="tar_scm">
   <param name="url">https://github.com/ClusterLabs/crmsh.git</param>
-  <param 
name="changesrevision">157564b06aa670969dba174cdccc37023be1b010</param>
+  <param 
name="changesrevision">436d1a557e54a00fee045ad677e9aa0b8d601b5d</param>
 </service>
 </servicedata>
 (No newline at EOF)

++++++ crmsh-5.1.0+20260730.157564b0.tar.bz2 -> 
crmsh-5.1.0+20260814.d9688661.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/cibconfig.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/cibconfig.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/cibconfig.py        2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/cibconfig.py        2026-08-14 
08:44:20.000000000 +0200
@@ -271,17 +271,18 @@
         '''
         rc = False
         try:
-            s = self._pre_edit(s)
-            filehash = hash(s)
-            tmp = utils.str2tmp(s)
+            config_text = self._pre_edit(s)
+            original_config_text = config_text
+            tmp = utils.str2tmp(config_text)
             if not tmp:
                 return False
             while not rc:
                 if utils.edit_file(tmp) != 0:
                     break
-                s = open(tmp).read()
-                if hash(s) != filehash:
-                    ok = self.save(self._post_edit(s))
+                with open(tmp) as tmp_file:
+                    edited_config_text = tmp_file.read()
+                if edited_config_text != original_config_text:
+                    ok = self.save(self._post_edit(edited_config_text))
                     if not ok and options.force:
                         logger.error("Save failed and --force is set, aborting 
edit to avoid infinite loop")
                     elif not ok and utils.ask("Edit or discard changes (yes to 
edit, no to discard)?"):
@@ -311,12 +312,12 @@
         Pipe string s through a filter. Parse/save the output.
         If no changes are done, return silently.
         '''
-        rc, outp = utils.filter_string(fltr, s)
+        rc, filtered_config_text = utils.filter_string(fltr, s)
         if rc != 0:
             return False
-        if hash(outp) == hash(s):
+        if filtered_config_text == s:
             return True
-        return self.save(outp)
+        return self.save(filtered_config_text)
 
     def filter(self, fltr):
         with clidisplay.nopretty():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/cibquery.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/cibquery.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/cibquery.py 2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/cibquery.py 2026-08-14 
08:44:20.000000000 +0200
@@ -72,3 +72,12 @@
     xpath = f"/cib/configuration/nodes/node[@id='{node_id}']/@uname"
     result = cib.xpath(xpath)
     return result[0] if result else None
+
+
+def get_crm_config_properties(cib: lxml.etree.Element) -> dict[str, str]:
+    """Return a dict of configured properties (name -> value) under 
crm_config"""
+    return {
+        e.get('name'): e.get('value', '')
+        for e in cib.xpath('.//crm_config//cluster_property_set/nvpair')
+        if e.get('name') is not None
+    }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/corosync.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/corosync.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/corosync.py 2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/corosync.py 2026-08-14 
08:44:20.000000000 +0200
@@ -46,11 +46,6 @@
 KNET_LINK_NUM_LIMIT = 8
 
 
-def is_knet() -> bool:
-    res = get_value("totem.transport")
-    return res and res == "knet"
-
-
 def is_using_ipv6() -> bool:
     res = get_value("totem.ip_version")
     return res and res == "ipv6"
@@ -68,10 +63,6 @@
     return get_value("quorum.device.model") == "net"
 
 
-def is_qdevice_tls_on() -> bool:
-    return get_value("quorum.device.net.tls") == "on"
-
-
 def configure_two_node(removing: bool = False, qdevice_adding: bool = False) 
-> None:
     """
     Enable or disable two_node in corosync.conf
@@ -205,18 +196,17 @@
            fname]
     rc = utils.ext_cmd_nosudo(cmd, shell=False)
     if rc == 0:
-        data = open(fname).read()
-        newhash = hash(data)
+        with open(fname) as remote_config_file:
+            remote_config_data = remote_config_file.read()
         if os.path.isfile(local_path):
-            oldata = open(local_path).read()
-            oldhash = hash(oldata)
-            if newhash == oldhash:
+            with open(local_path) as local_config_file:
+                local_config_data = local_config_file.read()
+            if remote_config_data == local_config_data:
                 print("No change.")
                 return
         print("Writing %s:%s..." % (utils.this_node(), local_path))
-        local_file = open(local_path, 'w')
-        local_file.write(data)
-        local_file.close()
+        with open(local_path, 'w') as local_config_file:
+            local_config_file.write(remote_config_data)
     else:
         raise ValueError("Failed to retrieve %s from %s" % (local_path, 
from_node))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/migration.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/migration.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/migration.py        2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/migration.py        2026-08-14 
08:44:20.000000000 +0200
@@ -24,6 +24,7 @@
 from crmsh import corosync_config_format
 from crmsh import iproute2
 from crmsh import parallax
+from crmsh import service_manager
 from crmsh import sh
 from crmsh import utils
 from crmsh import xmlutil
@@ -118,7 +119,7 @@
         self.write_in_color(sys.stdout, constants.GREEN, '[INFO] ')
         print(fmt % args)
 
-    def handle_problem(self, need_auto_fix: bool, is_blocker: bool, level:int, 
title: str, details: typing.Iterable[str]):
+    def handle_problem(self, need_auto_fix: bool, is_blocker: bool, level:int, 
title: str, detail: typing.Iterable[str]):
         self.has_problems = True
         self.block_migration = self.block_migration or is_blocker
         self.need_auto_fix = self.need_auto_fix or need_auto_fix
@@ -128,7 +129,7 @@
             case self.LEVEL_WARN:
                 self.write_in_color(sys.stdout, constants.YELLOW, '[WARN] ')
         print(title)
-        for line in details:
+        for line in detail:
             sys.stdout.write('       ')
             print(line)
 
@@ -171,6 +172,8 @@
             case CheckReturnCode.PASS_NEED_AUTO_FIX:
                 logger.info('Starting migration...')
                 migrate_corosync_conf(local=parsed_args.local)
+                if not parsed_args.local:
+                    migrate_deprecated_cib_properties()
                 logger.info('Finished migration.')
                 return 0
             case _:
@@ -299,6 +302,7 @@
     cib = xmlutil.text2elem(sh.LocalShell().get_stdout_or_raise_error(None, 
'crm configure show xml'))
     check_cib_schema_version(handler, cib)
     check_unsupported_resource_agents(handler, cib)
+    check_deprecated_cib_properties(handler, cib)
 
 
 def check_dependency_version(handler: CheckResultHandler):
@@ -726,3 +730,38 @@
         re.match(r'^pacemaker-(\d+)\.(\d+)\.rng$', filename)
         for filename in glob.iglob('pacemaker-*.rng', 
root_dir='/usr/share/pacemaker')
     ) if x is not None)
+
+
+def check_deprecated_cib_properties(handler: CheckResultHandler, cib: 
lxml.etree.Element):
+    deprecated_found = [
+        p for p in 
utils.get_all_configured_deprecated_properties(existing_xml_node=cib)
+        if not utils.DeprecatedTermTranslator(p, existing_xml_node=cib, 
quiet=True).check()
+    ]
+
+    if deprecated_found:
+        handler.handle_problem(
+            True, False, handler.LEVEL_WARN,
+            'Deprecated CIB properties found',
+            [f'The following properties are deprecated: {", 
".join(deprecated_found)}. Please run "crm cluster health sles16 --fix" when 
cluster is running to migrate them.']
+        )
+
+
+def migrate_deprecated_cib_properties():
+    if service_manager.ServiceManager().service_is_active('pacemaker'):
+        logger.info("Pacemaker is running, starting online migration for CIB 
properties.")
+        try:
+            cib = 
xmlutil.text2elem(sh.LocalShell().get_stdout_or_raise_error(None, 'crm 
configure show xml'))
+            migrated = False
+            for prop in 
utils.get_all_configured_deprecated_properties(existing_xml_node=cib):
+                if not utils.DeprecatedTermTranslator(prop, 
existing_xml_node=cib, quiet=True).check():
+                    logger.info("Migrating deprecated CIB property: %s", prop)
+                    utils.DeprecatedTermTranslator(prop, 
existing_xml_node=cib, quiet=True).fix()
+                    migrated = True
+            if migrated:
+                logger.info("Finished online migration for CIB properties.")
+            else:
+                logger.info("No deprecated CIB properties found.")
+        except Exception as e:
+            logger.error("Failed to migrate CIB properties: %s", e)
+    else:
+        logger.info("Pacemaker is not running. Online migration for CIB 
properties is skipped.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/pacemaker.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/pacemaker.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/pacemaker.py        2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/pacemaker.py        2026-08-14 
08:44:20.000000000 +0200
@@ -18,10 +18,6 @@
         return None
 
 
-def get_validate_type(cib_elem):
-    return "rng"
-
-
 def get_schema_filename(validate_name):
     if not validate_name.endswith('.rng'):
         return "%s.rng" % (validate_name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/qdevice.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/qdevice.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/qdevice.py  2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/qdevice.py  2026-08-14 
08:44:20.000000000 +0200
@@ -663,3 +663,14 @@
         logger_utils.log_only_to_file(desc)
         if cmd:
             logger_utils.log_only_to_file(f"Run: {cmd}")
+
+    @staticmethod
+    def get_qdevice_sync_timeout() -> int:
+        """
+        Get qdevice sync_timeout
+        """
+        out = corosync.query_qdevice_status()
+        res = re.search(r"Sync HB interval:\s+(\d+)ms", out)
+        if not res:
+            raise ValueError("Cannot find qdevice sync timeout")
+        return int(int(res.group(1))/1000)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/sbd.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/sbd.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/sbd.py      2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/sbd.py      2026-08-14 
08:44:20.000000000 +0200
@@ -14,6 +14,7 @@
 from . import xmlutil
 from . import watchdog
 from . import cibquery
+from . import qdevice
 from .service_manager import ServiceManager
 from .sh import ShellUtils
 
@@ -303,7 +304,7 @@
         '''
         # add sbd after qdevice started
         if corosync.is_qdevice_configured() and 
ServiceManager().service_is_active("corosync-qdevice.service"):
-            qdevice_sync_timeout = utils.get_qdevice_sync_timeout()
+            qdevice_sync_timeout = qdevice.QDevice.get_qdevice_sync_timeout()
             if self.sbd_watchdog_timeout <= qdevice_sync_timeout:
                 watchdog_timeout_with_qdevice = qdevice_sync_timeout + 
self.QDEVICE_SYNC_TIMEOUT_MARGIN
                 self.logger.warning(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/ui_node.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/ui_node.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/ui_node.py  2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/ui_node.py  2026-08-14 
08:44:20.000000000 +0200
@@ -146,10 +146,6 @@
         return False
     return True
 
-def _oneline(s):
-    'join s into a single line of space-separated tokens'
-    return ' '.join(l.strip() for l in s.splitlines())
-
 
 def unpack_node_xmldata(node, is_offline):
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/utils.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/utils.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/utils.py    2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/utils.py    2026-08-14 
08:44:20.000000000 +0200
@@ -2253,17 +2253,6 @@
     sh.cluster_shell().get_stdout_or_raise_error(cmd)
 
 
-def get_qdevice_sync_timeout():
-    """
-    Get qdevice sync_timeout
-    """
-    out = sh.cluster_shell().get_stdout_or_raise_error("crm corosync status 
qdevice")
-    res = re.search(r"Sync HB interval:\s+(\d+)ms", out)
-    if not res:
-        raise ValueError("Cannot find qdevice sync timeout")
-    return int(int(res.group(1))/1000)
-
-
 def detect_virt():
     """
     Detect if running in virt environment
@@ -3070,7 +3059,13 @@
         return not self._resolve_res.using_deprecated
 
 
-def get_all_configured_deprecated_properties() -> list[str]:
+def get_all_configured_deprecated_properties(existing_xml_node: 
typing.Optional[etree.Element] = None) -> list[str]:
+    if existing_xml_node is not None:
+        return [
+            p
+            for p in ra.get_properties_meta().get_deprecated_params()
+            if existing_xml_node.find(f".//*[@name='{p}']") is not None
+        ]
     return [
         p
         for p in ra.get_properties_meta().get_deprecated_params()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/crmsh/xmlutil.py 
new/crmsh-5.1.0+20260814.d9688661/crmsh/xmlutil.py
--- old/crmsh-5.1.0+20260730.157564b0/crmsh/xmlutil.py  2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/crmsh/xmlutil.py  2026-08-14 
08:44:20.000000000 +0200
@@ -941,14 +941,6 @@
     return sorted(nl, key=sort_elements if config.core.sort_elements else 
sort_type)
 
 
-def is_resource_cli(s):
-    return s in utils.olist(constants.resource_cli_names)
-
-
-def is_constraint_cli(s):
-    return s in utils.olist(constants.constraint_cli_names)
-
-
 def referenced_resources(node):
     if not is_constraint(node):
         return []
@@ -1128,16 +1120,6 @@
         return rsc_cnt == 2 or cnt < 2
 
 
-def is_climove_location(node):
-    'Figure out if the location was created by crm resource move.'
-    rule_l = node.findall("rule")
-    expr_l = node.xpath(".//expression")
-    return len(rule_l) == 1 and len(expr_l) == 1 and \
-        node.get("id").startswith("cli-") and \
-        expr_l[0].get("attribute") == "#uname" and \
-        expr_l[0].get("operation") == "eq"
-
-
 def is_pref_location(node):
     'Figure out if the location is a node preference.'
     rule_l = node.findall("rule")
@@ -1182,10 +1164,6 @@
     return get_child_nvset_node(node)
 
 
-def get_properties_node(node):
-    return get_child_nvset_node(node, attr_set="cluster_property_set")
-
-
 def new_cib():
     cib_elem = etree.Element("cib")
     conf_elem = etree.SubElement(cib_elem, "configuration")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260730.157564b0/doc/crm.8.adoc 
new/crmsh-5.1.0+20260814.d9688661/doc/crm.8.adoc
--- old/crmsh-5.1.0+20260730.157564b0/doc/crm.8.adoc    2026-07-30 
08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/doc/crm.8.adoc    2026-08-14 
08:44:20.000000000 +0200
@@ -1203,10 +1203,6 @@
 process is cumbersome and error-prone, and the goal is for scripts to
 make this process easier.
 
-Scripts are implemented using the python `parallax` package which
-provides a thin wrapper on top of SSH. This allows the scripts to
-function through the usual SSH channels used for system maintenance,
-requiring no additional software to be installed or maintained.
 
 [[cmdhelp.script.json,JSON API for cluster scripts]]
 ==== `json`
@@ -1413,9 +1409,6 @@
 the list of nodes provided. If no target nodes are given,
 the configuration is pushed to all other nodes in the cluster.
 
-It is recommended to use `csync2` to distribute the cluster
-configuration files rather than relying on this command.
-
 Usage:
 .........
 push [node] ...
@@ -1530,7 +1523,7 @@
 [[cmdhelp.corosync.link.update,Update a knet link]]
 ===== `update`
 
-Modify an existing knet link in the configuration file, changing node adresses
+Modify an existing knet link in the configuration file, changing node addresses
 and/or link options.
 
 Usage:
@@ -2801,7 +2794,7 @@
 
 The configuration may be logically divided into four parts:
 nodes, resources, constraints, and (cluster) properties and
-attributes.  Each of these commands support one or more basic CIB
+attributes.  Each of these commands supports one or more basic CIB
 objects.
 
 Nodes and attributes describing nodes are managed using the
@@ -2834,7 +2827,7 @@
 - `fencing_topology`
 
 Finally, there are the cluster properties, resource meta-attributes
-defaults, and operations defaults. All are just a set of attributes. 
+defaults, and operations defaults. All are just a set of attributes.
 These attributes are managed by the following commands:
 
 - `property`
@@ -3725,7 +3718,7 @@
 If no property name is passed to the command, the list of known
 cluster properties is printed.
 
-To print one property's help, use the +--help+ option; Or use <Tab>
+To print one property's help, use the +--help+ option; or use <Tab>
 to complete the help text for the property on interactive mode.
 
 For more information on rule expressions, see
@@ -4031,7 +4024,7 @@
 [[cmdhelp.configure.set,set an attribute value]]
 ==== `set`
 
-Set the value of a configured attribute. The attribute must
+Set the value of a configured attribute. The attribute must be
 configured previously, and can be an agent parameter, meta attribute,
 utilization value or operation value.
 
@@ -4073,7 +4066,7 @@
 
 To show all objects in a tag, use the +tag:+ prefix.
 
-To show all constraints related to a primitive, or 
+To show all constraints related to a primitive, or
 to show all objects of a certain RA type, use the +related:+ prefix.
 
 To show all modified objects, pass the argument +changed+.
@@ -4260,7 +4253,7 @@
 [[cmdhelp.configure.xml,raw xml]]
 ==== `xml`
 
-Even though we promissed no xml, it may happen, but hopefully
+Even though we promised no xml, it may happen, but hopefully
 very very seldom, that an element from the CIB cannot be rendered
 in the configuration language. In that case, the element will be
 shown as raw xml, prefixed by this command. That element can then
@@ -4401,7 +4394,7 @@
 
 It may sometimes be of interest to see how status changes would
 affect the Policy Engine. The set of `cibstatus` level commands
-allow the user to load status sections from various sources and
+allows the user to load status sections from various sources and
 then insert or modify resource operations or change nodes' state.
 
 The effect of those changes may then be observed by running the
@@ -4678,7 +4671,7 @@
 
 Invokes the given action for the resource. This is
 done directly via the resource agent, so the command must
-be issued while the cluster or the resource is in 
+be issued while the cluster or the resource is in
 maintenance mode.
 
 Unless the action is `start` or `monitor`, the action must be invoked
@@ -4687,7 +4680,7 @@
 
 To use SSH for executing resource actions on multiple nodes, append
 `ssh` after the action name. This requires SSH access to be configured
-between the nodes and the parallax python package to be installed.
+between the nodes.
 
 Usage:
 ...............
@@ -4703,7 +4696,7 @@
 [[cmdhelp.maintenance.off,Disable maintenance mode]]
 ==== `off`
 
-Disables maintenances mode, either for the whole cluster
+Disables maintenance mode, either for the whole cluster
 or for the given resource.
 
 Usage:
@@ -4719,7 +4712,7 @@
 [[cmdhelp.maintenance.on,Enable maintenance mode]]
 ==== `on`
 
-Enables maintenances mode, either for the whole cluster
+Enables maintenance mode, either for the whole cluster
 or for the given resource.
 
 Usage:
@@ -4748,11 +4741,7 @@
 of how good the tools at hand are. Therefore, one should first say
 which period he or she wants to analyze. If not otherwise specified,
 the last hour is considered. Logs and other relevant information is
-collected using `crm report`. Since this process takes some time and
-we always need fresh logs, information is refreshed in a much faster
-way using the python parallax module. If +python-parallax+ is not
-found on the system, examining a live cluster is still possible --
-though not as comfortable.
+collected using `crm report`.
 
 Apart from examining a live cluster, events may be retrieved from a
 report generated by `crm report` (see also the +-H+ option). In that
@@ -4965,7 +4954,7 @@
 
 Show messages logged on one or more nodes. Leaving out a node
 name produces combined logs of all nodes. Messages are sorted by
-time and, if the terminal emulations supports it, displayed in
+time and, if the terminal emulator supports it, displayed in
 different colours depending on the node to allow for easier
 reading.
 
@@ -5179,7 +5168,7 @@
 After the `ptest` output, logs about events that happened during
 the transition are printed.
 
-The `tags` subcommand scans the logs for the transition and return a
+The `tags` subcommand scans the logs for the transition and returns a
 list of key events during that transition. For example, the tag
 +error+ will be returned if there are any errors logged during the
 transition.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/features/migration.feature 
new/crmsh-5.1.0+20260814.d9688661/test/features/migration.feature
--- old/crmsh-5.1.0+20260730.157564b0/test/features/migration.feature   
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/features/migration.feature   
2026-08-14 08:44:20.000000000 +0200
@@ -159,6 +159,29 @@
     Then    Expected return code is "0"
     And     Run "grep -F 'ring0_addr: @hanode2.ip.0' 
/etc/corosync/corosync.conf" OK
 
+  Scenario: Run pre-migration checks and fixes against deprecated CIB 
properties
+    When    Run "crm cluster start" on "hanode1"
+    And     Run "crm cluster start" on "hanode2"
+    Then    Cluster service is "started" on "hanode1"
+    And     Cluster service is "started" on "hanode2"
+    When    Run "crm_attribute -t crm_config -n stonith-timeout -v 120s" on 
"hanode1"
+    And     Try "crm cluster health sles16" on "hanode1"
+    Then    Expected return code is "1"
+    And     Expect stdout contains snippets ["[PASS] This cluster is good to 
migrate to SLES 16.", "[WARN] Deprecated CIB properties found", 
"stonith-timeout"].
+    When    Try "crm cluster health sles16 --fix" on "hanode1"
+    Then    Expected return code is "0"
+    And     Cluster property "fencing-timeout" is "120"
+    And     Cluster property "stonith-timeout" is not configured
+    When    Run "crm_attribute -t crm_config -n cluster-ipc-limit -v 800" on 
"hanode1"
+    And     Try "crm cluster health sles16" on "hanode1"
+    Then    Expected return code is "0"
+    When    Try "crm cluster health sles16 --fix" on "hanode1"
+    Then    Expected return code is "0"
+    And     Expected "Migrating deprecated CIB property: cluster-ipc-limit" 
not in stdout
+    And     Cluster property "cluster-ipc-limit" is "800"
+    When    Run "crm cluster stop" on "hanode1"
+    And     Run "crm cluster stop" on "hanode2"
+
   Scenario: Run pre-migration checks when some of the nodes are offline.
     When    Run "systemctl stop sshd" on "hanode2"
     And     Try "crm cluster health sles16" on "hanode1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_bugs.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_bugs.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_bugs.py       
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_bugs.py       
2026-08-14 08:44:20.000000000 +0200
@@ -34,9 +34,7 @@
 """
     data = etree.fromstring(xml)
     obj = factory.create_from_node(data)
-    print(etree.tostring(obj.node))
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'primitive bug41660 ocf:pacemaker:Dummy meta target-role=Stopped'
     assert data == exp
     assert obj.cli_use_validate()
@@ -78,15 +76,12 @@
     #assert data == exp
     #assert obj.cli_use_validate()
 
-    print(etree.tostring(obj.node))
 
     commit_holder = factory.commit
     try:
         factory.commit = lambda *args: True
         from crmsh.ui_resource import set_deep_meta_attr
-        print("PRE", etree.tostring(obj.node))
         set_deep_meta_attr("libvirtd-clone", "target-role", "Started")
-        print("POST", etree.tostring(obj.node))
         assert ['Started'] == 
obj.node.xpath('.//nvpair[@name="target-role"]/@value')
     finally:
         factory.commit = commit_holder
@@ -112,7 +107,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'clone libvirtd-clone libvirtd meta target-role=Stopped'
     assert data == exp
     assert obj.cli_use_validate()
@@ -219,11 +213,9 @@
 
     assert len(elem.xpath(".//meta_attributes/nvpair[@name='target-role']")) 
== 1
 
-    print("BEFORE:", etree.tostring(elem))
 
     set_deep_meta_attr_node(elem, 'target-role', 'Stopped')
 
-    print("AFTER:", etree.tostring(elem))
 
     assert len(elem.xpath(".//meta_attributes/nvpair[@name='target-role']")) 
== 1
 
@@ -245,7 +237,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print("OUTPUT:", data)
     exp = 'location cli-prefer-dummy-resource dummy-resource role=Started rule 
#uname eq x64-4 and date lt "2014-05-17 17:56:11Z"'
     assert data == exp
     assert obj.cli_use_validate()
@@ -260,7 +251,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print("OUTPUT:", data)
     exp = 'order order-a-b a:promote b:start'
     assert data == exp
     assert obj.cli_use_validate()
@@ -276,7 +266,6 @@
     obj2 = factory.create_object('group', 'g1', 'p1')
     assert obj2 is True
     obj3 = factory.create_object('group', 'g2', 'p1')
-    print(obj3)
     assert obj3 is False
 
 
@@ -329,7 +318,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print("OUTPUT:", data)
     exp = 'primitive rsc1 ocf:pacemaker:Dummy params rule 0: #cluster-name eq 
clusterA state="/var/run/Dummy-rsc1-clusterA" params rule 0: #cluster-name eq 
clusterB state="/var/run/Dummy-rsc1-clusterB" op monitor interval=10s'
     assert data == exp
     assert obj.cli_use_validate()
@@ -356,7 +344,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print("OUTPUT:", data)
     exp = 'primitive rsc2 ocf:pacemaker:Dummy op monitor interval=10s 
role=Stopped'
     assert data == exp
     assert obj.cli_use_validate()
@@ -374,7 +361,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print("OUTPUT:", data)
     exp = 'primitive rsc3 Dummy params verbose verbase="" verbese=" "'
     assert data == exp
     assert obj.cli_use_validate()
@@ -414,7 +400,6 @@
     obj = factory.create_from_node(data)
     assert obj is not None
     data = obj.repr_cli(format_mode=-1)
-    print("OUTPUT:", data)
     exp = 'primitive q1 ocf:pacemaker:Dummy params state="foo\\"foo\\""'
     assert data == exp
     assert obj.cli_use_validate()
@@ -564,7 +549,6 @@
     assert obj is not None
     with clidisplay.nopretty():
         original_cib = obj.repr()
-    print(original_cib)
 
     obj = cibconfig.mkset_obj()
     assert obj is not None
@@ -615,7 +599,6 @@
 
     obj = cibconfig.mkset_obj("g1")
     with clidisplay.nopretty():
-        print(obj.repr().strip())
         assert obj.repr().strip() == "group g1 p1 p3"
 
     obj = cibconfig.mkset_obj()
@@ -624,10 +607,6 @@
     assert ok
     obj = cibconfig.mkset_obj()
     with clidisplay.nopretty():
-        print("*** ORIGINAL")
-        print(original_cib)
-        print("*** NOW")
-        print(obj.repr())
         assert original_cib == obj.repr()
 
 
@@ -640,7 +619,6 @@
     assert obj is not None
     with clidisplay.nopretty():
         original_cib = obj.repr()
-    print(original_cib)
 
     obj = cibconfig.mkset_obj()
     assert obj is not None
@@ -649,11 +627,8 @@
     """)
     assert ok
 
-    print("** baseline")
     obj = cibconfig.mkset_obj()
     assert obj is not None
-    with clidisplay.nopretty():
-        print(obj.repr())
 
     obj = cibconfig.mkset_obj()
     assert obj is not None
@@ -661,7 +636,6 @@
     """, remove=False, method='update')
     assert ok
 
-    print("** end")
 
     obj = cibconfig.mkset_obj()
     assert obj is not None
@@ -669,10 +643,6 @@
     assert ok
     obj = cibconfig.mkset_obj()
     with clidisplay.nopretty():
-        print("*** ORIGINAL")
-        print(original_cib)
-        print("*** NOW")
-        print(obj.repr())
         assert original_cib == obj.repr()
 
 
@@ -685,7 +655,6 @@
     assert obj is not None
     with clidisplay.nopretty():
         original_cib = obj.repr()
-    print(original_cib)
 
     obj = cibconfig.mkset_obj()
     assert obj is not None
@@ -762,10 +731,6 @@
     assert ok
     obj = cibconfig.mkset_obj()
     with clidisplay.nopretty():
-        print("*** ORIGINAL")
-        print(original_cib)
-        print("*** NOW")
-        print(obj.repr())
         assert original_cib == obj.repr()
 
 
@@ -827,9 +792,7 @@
 """
     data = etree.fromstring(xml)
     obj = factory.create_from_node(data)
-    print(etree.tostring(obj.node))
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'clone c-bug959895 g-bug959895'
     assert data == exp
     assert obj.cli_use_validate()
@@ -860,9 +823,7 @@
 
     data = etree.fromstring(xml)
     obj = factory.create_from_node(data)
-    print(etree.tostring(obj.node))
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'node aberfeldy utilization cpu=2 memory=500 attributes standby=on'
     assert data == exp
     assert obj.cli_use_validate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_cib.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_cib.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_cib.py        
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_cib.py        
2026-08-14 08:44:20.000000000 +0200
@@ -22,7 +22,6 @@
 def test_cib_schema_change():
     "Changing the validate-with CIB attribute"
     copy_of_cib = copy.copy(factory.cib_orig)
-    print(etree.tostring(copy_of_cib, pretty_print=True))
     tmp_cib_objects = factory.cib_objects
     factory.cib_objects = []
     factory.change_schema("pacemaker-1.1")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_cibquery.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_cibquery.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_cibquery.py   
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_cibquery.py   
2026-08-14 08:44:20.000000000 +0200
@@ -112,3 +112,16 @@
     def test_get_node_name_by_id(self):
         self.assertEqual(cibquery.get_node_name_by_id(self.cib, 1), "ha-1-1")
         self.assertIsNone(cibquery.get_node_name_by_id(self.cib, 2))
+
+    def test_get_crm_config_properties(self):
+        self.assertDictEqual(
+            {
+                'have-watchdog': 'false',
+                'dc-version': 
'2.1.5+20221208.a3f44794f-150500.4.9-2.1.5+20221208.a3f44794f',
+                'cluster-infrastructure': 'corosync',
+                'cluster-name': 'hacluster',
+                'fencing-enabled': 'true',
+                'fencing-timeout': '71',
+            },
+            cibquery.get_crm_config_properties(self.cib),
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_cliformat.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_cliformat.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_cliformat.py  
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_cliformat.py  
2026-08-14 08:44:20.000000000 +0200
@@ -28,20 +28,16 @@
     assert_is_not_none(obj)
     obj.nocli = True
     xml = obj.repr_cli(format_mode=format_mode)
-    print(xml)
     obj.nocli = False
     s = obj.repr_cli(format_mode=format_mode)
     if strip_color:
         import re
         s = re.sub(r"\$\{[^}]+\}", "", s)
-    if (s != cli) or debug:
-        print("GOT:", s)
-        print("EXP:", cli)
     assert obj.cli_use_validate()
     if expected is not None:
-        assert expected == s
+        assert expected == s, "GOT: {}\nEXP: {}".format(s, expected)
     else:
-        assert cli == s
+        assert cli == s, "GOT: {}\nEXP: {}".format(s, cli)
     assert not debug
 
 
@@ -138,7 +134,6 @@
     obj = factory.create_from_node(data)
     assert_is_not_none(obj)
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'primitive dummy ocf:pacemaker:Dummy op start timeout=60s 
interval=0s op stop timeout=60s interval=0s op monitor interval=60s timeout=30s 
meta target-role=Stopped'
     assert exp == data
     assert obj.cli_use_validate()
@@ -160,7 +155,6 @@
     obj = factory.create_from_node(data)
     assert_is_not_none(obj)
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'primitive dummy2 ocf:pacemaker:Dummy meta target-role=Stopped ' \
           'op start timeout=60s interval=0s op stop timeout=60s interval=0s ' \
           'op monitor interval=60s timeout=30s'
@@ -181,7 +175,6 @@
     obj = factory.create_from_node(data)
     assert_is_not_none(obj)
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'fencing_topology st1'
     assert exp == data
     assert obj.cli_use_validate()
@@ -202,7 +195,6 @@
     obj = factory.create_from_node(data)
     assert_is_not_none(obj)
     data = obj.repr_cli(format_mode=-1)
-    print(data)
     exp = 'fencing_topology pattern:green.* apple pear pattern:red.* pear 
apple'
     assert exp == data
     assert obj.cli_use_validate()
@@ -216,7 +208,6 @@
     data = etree.fromstring(xml)
     factory.create_from_cli("primitive dummy3 ocf:pacemaker:Dummy")
     data, _, _ = cibconfig.postprocess_cli(data)
-    print("after postprocess:", etree.tostring(data))
     obj = factory.create_from_node(data)
     assert_is_not_none(obj)
     assert obj.cli_use_validate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_migration.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_migration.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_migration.py  
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_migration.py  
2026-08-14 08:44:20.000000000 +0200
@@ -114,3 +114,105 @@
                 'Please run "crm configure upgrade force" to upgrade to the 
latest version.',
             ]
         )
+
+
+class TestDeprecatedCibProperties(unittest.TestCase):
+    @mock.patch('crmsh.utils.get_all_configured_deprecated_properties')
+    @mock.patch('crmsh.utils.DeprecatedTermTranslator._get_maps')
+    def test_check_deprecated_cib_properties_found(self, mock_get_maps, 
mock_get_dep_properties):
+        mock_get_dep_properties.return_value = ['stonith-timeout']
+        mock_get_maps.return_value = ({'stonith-timeout': 'fencing-timeout'}, 
{})
+        cib = lxml.etree.fromstring('''
+            <cib>
+              <configuration>
+                <crm_config>
+                  <cluster_property_set id="cib-bootstrap-options">
+                    <nvpair name="stonith-timeout" value="120s"/>
+                  </cluster_property_set>
+                </crm_config>
+              </configuration>
+            </cib>
+        ''')
+        handler = mock.Mock(migration.CheckResultHandler)
+        migration.check_deprecated_cib_properties(handler, cib)
+        handler.handle_problem.assert_called_with(
+            True, False, handler.LEVEL_WARN,
+            'Deprecated CIB properties found',
+            ['The following properties are deprecated: stonith-timeout. Please 
run "crm cluster health sles16 --fix" when cluster is running to migrate them.']
+        )
+
+    @mock.patch('crmsh.utils.get_all_configured_deprecated_properties')
+    @mock.patch('crmsh.utils.DeprecatedTermTranslator._get_maps')
+    def test_check_deprecated_cib_properties_not_found(self, mock_get_maps, 
mock_get_dep_properties):
+        mock_get_dep_properties.return_value = []
+        mock_get_maps.return_value = ({'stonith-timeout': 'fencing-timeout'}, 
{})
+        cib = lxml.etree.fromstring('''
+            <cib>
+              <configuration>
+                <crm_config>
+                  <cluster_property_set id="cib-bootstrap-options">
+                    <nvpair name="fencing-timeout" value="120s"/>
+                  </cluster_property_set>
+                </crm_config>
+              </configuration>
+            </cib>
+        ''')
+        handler = mock.Mock(migration.CheckResultHandler)
+        migration.check_deprecated_cib_properties(handler, cib)
+        handler.handle_problem.assert_not_called()
+
+    @mock.patch('crmsh.utils.get_all_configured_deprecated_properties')
+    @mock.patch('crmsh.utils.DeprecatedTermTranslator._get_maps')
+    @mock.patch('crmsh.utils.ra.get_properties_meta')
+    def 
test_check_deprecated_cib_properties_without_replacement_not_found(self, 
mock_get_properties_meta, mock_get_maps, mock_get_dep_properties):
+        mock_get_dep_properties.return_value = ['stonith-timeout']
+        mock_get_maps.return_value = ({'stonith-timeout': None}, {})
+        mock_get_properties_meta.return_value.param_default.return_value = 
'true'
+        cib = lxml.etree.fromstring('''
+            <cib>
+              <configuration>
+                <crm_config>
+                  <cluster_property_set id="cib-bootstrap-options">
+                    <nvpair name="stonith-timeout" value="false"/>
+                  </cluster_property_set>
+                </crm_config>
+              </configuration>
+            </cib>
+        ''')
+        handler = mock.Mock(migration.CheckResultHandler)
+        migration.check_deprecated_cib_properties(handler, cib)
+        handler.handle_problem.assert_not_called()
+
+    @mock.patch('crmsh.utils.get_all_configured_deprecated_properties')
+    @mock.patch('crmsh.utils.DeprecatedTermTranslator')
+    @mock.patch('crmsh.sh.LocalShell.get_stdout_or_raise_error')
+    @mock.patch('crmsh.service_manager.ServiceManager.service_is_active')
+    def test_migrate_deprecated_cib_properties_active(self, 
mock_service_is_active, mock_get_stdout, mock_translator, 
mock_get_dep_properties):
+        mock_service_is_active.return_value = True
+        mock_get_dep_properties.return_value = ['stonith-timeout']
+        mock_get_stdout.return_value = '''
+            <cib>
+              <configuration>
+                <crm_config>
+                  <cluster_property_set id="cib-bootstrap-options">
+                    <nvpair name="stonith-timeout" value="120s"/>
+                  </cluster_property_set>
+                </crm_config>
+              </configuration>
+            </cib>
+        '''
+        mock_trans_inst = mock.Mock()
+        mock_trans_inst.check.return_value = False
+        mock_translator.return_value = mock_trans_inst
+
+        migration.migrate_deprecated_cib_properties()
+
+        mock_translator.assert_called_with('stonith-timeout', 
existing_xml_node=mock.ANY, quiet=True)
+        mock_trans_inst.fix.assert_called_once()
+
+    @mock.patch('crmsh.service_manager.ServiceManager.service_is_active')
+    @mock.patch('crmsh.utils.DeprecatedTermTranslator')
+    def test_migrate_deprecated_cib_properties_inactive(self, mock_translator, 
mock_service_is_active):
+        mock_service_is_active.return_value = False
+        migration.migrate_deprecated_cib_properties()
+        mock_translator.assert_not_called()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_parse.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_parse.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_parse.py      
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_parse.py      
2026-08-14 08:44:20.000000000 +0200
@@ -173,7 +173,6 @@
 
         out = self._parse('ms m0 resource params a=b')
         self.assertEqual(out.get('id'), 'm0')
-        print(xml_tostring(out))
         self.assertEqual(['resource'], out.xpath('./crmsh-ref/@id'))
         self.assertEqual(['b'], 
out.xpath('instance_attributes/nvpair[@name="a"]/@value'))
 
@@ -285,7 +284,6 @@
 
     def test_order(self):
         out = self._parse('order o1 Mandatory: [ A B sequential=true ] C')
-        print(xml_tostring(out))
         self.assertEqual(['Mandatory'], out.xpath('/rsc_order/@kind'))
         self.assertEqual(2, len(out.xpath('/rsc_order/resource_set')))
         self.assertEqual(['false'], 
out.xpath('/rsc_order/resource_set/@require-all'))
@@ -480,7 +478,6 @@
         devs = ['fencing-vbox3-1-off', 'fencing-vbox3-2-off',
                 'fencing-vbox3-1-on', 'fencing-vbox3-2-on']
         out = self._parse('fencing_topology vbox4: %s' % ','.join(devs))
-        print(xml_tostring(out))
         self.assertEqual(1, len(out))
 
     def test_fencing_1114(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_scripts.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_scripts.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_scripts.py    
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_scripts.py    
2026-08-14 08:44:20.000000000 +0200
@@ -5,7 +5,6 @@
 from builtins import str
 from builtins import object
 from os import path
-from pprint import pprint
 import pytest
 from lxml import etree
 from crmsh import scripts
@@ -463,9 +462,7 @@
     assert script is not None
     assert 'legacy' == script['name']
     assert len(script['shortdesc']) > 0
-    pprint(script)
     actions = scripts.verify(script, {}, external_check=False)
-    pprint(actions)
     assert [{'longdesc': '',
           'name': 'apply_local',
           'shortdesc': 'Configure SSH',
@@ -522,7 +519,6 @@
          'apache': {'id': 'apache'},
          'virtual-ip': {'id': 'www-vip', 'ip': '192.168.1.100'},
          'install': False}, external_check=False)
-    pprint(actions)
     assert len(actions) == 1
     assert str(actions[0]['text']).find('group www') >= 0
 
@@ -532,7 +528,6 @@
          'apache': {'id': 'apache'},
          'virtual-ip': {'id': 'www-vip', 'ip': '192.168.1.100'},
          'install': True}, external_check=False)
-    pprint(actions)
     assert len(actions) == 3
 
 
@@ -543,7 +538,6 @@
         {'wiz': 'abc',
          'foo': 'cde',
          'included-script': {'foo': True, 'bar': 'bah bah'}}, 
external_check=False)
-    pprint(actions)
     assert len(actions) == 6
     assert '33\n\nabc' == actions[-1]['text'].strip()
 
@@ -555,7 +549,6 @@
         script,
         {'vip': {'id': 'vop', 'ip': '10.0.0.4'}}, external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'].find('primitive vop 
test:virtual-ip\n\tip="10.0.0.4"') >= 0
     assert actions[0]['text'].find("clone c-vop vop") >= 0
 
@@ -590,7 +583,6 @@
     actions = scripts.verify(script_b,
                              {'wiz': "SARUMAN"}, external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'] == "SARUMAN+SARUMAN"
 
 
@@ -629,7 +621,6 @@
     actions = scripts.verify(script_a,
                              {"id": "apacho"}, external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'] == "primitive apacho test:apache"
 
     #import ipdb
@@ -637,7 +628,6 @@
     actions = scripts.verify(script_b,
                              {'wiz': "SARUMAN", "apache": {"id": "apacho"}}, 
external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'] == "primitive SARUMAN apacho"
 
 
@@ -663,13 +653,11 @@
     actions = scripts.verify(script_a,
                              {"foo": "one"}, external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'] == "one"
 
     actions = scripts.verify(script_a,
                              {"foo": "three"}, external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'] == "three"
 
 
@@ -758,7 +746,6 @@
     actions = scripts.verify(script_b,
                              {'wiz': "head", "apache-a": {"id": "one"}, 
"apache-b": {"id": "two"}}, external_check=False)
     assert len(actions) == 1
-    pprint(actions)
     assert actions[0]['text'] == "primitive one test:apache\n\nprimitive two 
test:apache\n\nprimitive head one two"
 
 
@@ -802,7 +789,6 @@
     def ver():
         actions = scripts.verify(script_b,
                                  {"foofoo": {"foo": "one"}}, 
external_check=False)
-        pprint(actions)
     with pytest.raises(ValueError):
         ver()
 
@@ -813,7 +799,6 @@
         unified,
         {'id': 'foo',
          'vip': {'id': 'bar', 'ip': '192.168.0.15'}}, external_check=False)
-    pprint(actions)
     assert len(actions) == 1
     assert 'primitive bar IPaddr2 ip=192.168.0.15\ngroup g-foo foo bar' == 
actions[-1]['text'].strip()
 
@@ -854,7 +839,6 @@
 
     actions = scripts.verify(script_a,
                              {"foo": "hello world"}, external_check=False)
-    pprint(actions)
     assert len(actions) == 1
     assert actions[0]['name'] == 'call'
     assert actions[0]['value'] == '#!/bin/sh\necho "hello world"'
@@ -863,7 +847,6 @@
                 {"foo": "hello world"}, tp)
 
     for action, args in tp.actions:
-        print(action, args)
         if action == 'finish':
             assert args[0]['value'] == '#!/bin/sh\necho "hello world"'
 
@@ -890,7 +873,6 @@
         a1 = scripts.verify(scrpt,
                             {"stringtest": val},
                             external_check=False)
-        pprint(a1)
         return a1
 
     a1 = runtest('stringtest == "balloon"', "balloon")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_ui_cluster.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_ui_cluster.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_ui_cluster.py 
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_ui_cluster.py 
2026-08-14 08:44:20.000000000 +0200
@@ -7,7 +7,6 @@
 
 from crmsh import ui_cluster
 
-logging.basicConfig(level=logging.INFO)
 
 class TestCluster(unittest.TestCase):
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_utils.py 
new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_utils.py
--- old/crmsh-5.1.0+20260730.157564b0/test/unittests/test_utils.py      
2026-07-30 08:49:30.000000000 +0200
+++ new/crmsh-5.1.0+20260814.d9688661/test/unittests/test_utils.py      
2026-08-14 08:44:20.000000000 +0200
@@ -14,7 +14,6 @@
 import crmsh.utils
 from crmsh import utils, config, tmpfiles, constants, options
 
-logging.basicConfig(level=logging.DEBUG)
 
 
 @mock.patch("crmsh.sh.ShellUtils.get_stdout")

Reply via email to