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-06-15 19:50:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/crmsh (Old)
 and      /work/SRC/openSUSE:Factory/.crmsh.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "crmsh"

Mon Jun 15 19:50:13 2026 rev:412 rq:1359524 version:5.1.0+20260615.8409ea5a

Changes:
--------
--- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes      2026-06-10 
16:19:08.661342715 +0200
+++ /work/SRC/openSUSE:Factory/.crmsh.new.1981/crmsh.changes    2026-06-15 
19:53:51.513621227 +0200
@@ -1,0 +2,16 @@
+Mon Jun 15 10:14:21 UTC 2026 - [email protected]
+
+- Update to version 5.1.0+20260615.8409ea5a:
+  * Dev: bootstrap: add a warning about deprecating 
unencrypted/unauthenticated knet transport (jsc#PED-16433)
+  * Dev: bootstrap: update warning about deprecating legacy transports 
(jsc#PED-16433)
+
+-------------------------------------------------------------------
+Thu Jun 11 07:56:57 UTC 2026 - [email protected]
+
+- Update to version 5.1.0+20260611.7998ffe4:
+  * Dev: help: Refactor to encapsulate alias help logic in subclass
+  * Dev: help: Give the correct level index to fuzzy search for topic help
+  * Dev: help: Show alias command info
+  * Dev: crm.8.adoc: Improve crm.8.adoc
+
+-------------------------------------------------------------------

Old:
----
  crmsh-5.1.0+20260610.968f62d8.tar.bz2

New:
----
  crmsh-5.1.0+20260615.8409ea5a.tar.bz2

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

Other differences:
------------------
++++++ crmsh.spec ++++++
--- /var/tmp/diff_new_pack.tsYeQz/_old  2026-06-15 19:53:54.113730293 +0200
+++ /var/tmp/diff_new_pack.tsYeQz/_new  2026-06-15 19:53:54.129730963 +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+20260610.968f62d8
+Version:        5.1.0+20260615.8409ea5a
 Release:        0
 URL:            http://crmsh.github.io
 Source0:        %{name}-%{version}.tar.bz2

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.tsYeQz/_old  2026-06-15 19:53:54.353740360 +0200
+++ /var/tmp/diff_new_pack.tsYeQz/_new  2026-06-15 19:53:54.409742709 +0200
@@ -9,7 +9,7 @@
 </service>
 <service name="tar_scm">
   <param name="url">https://github.com/ClusterLabs/crmsh.git</param>
-  <param 
name="changesrevision">b3a04e59685c33f4cb2f70929483e9157a39d557</param>
+  <param 
name="changesrevision">69bca8d37b097414990f2291b69f39f6bdb1d8a2</param>
 </service>
 </servicedata>
 (No newline at EOF)

++++++ crmsh-5.1.0+20260610.968f62d8.tar.bz2 -> 
crmsh-5.1.0+20260615.8409ea5a.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260610.968f62d8/crmsh/bootstrap.py 
new/crmsh-5.1.0+20260615.8409ea5a/crmsh/bootstrap.py
--- old/crmsh-5.1.0+20260610.968f62d8/crmsh/bootstrap.py        2026-06-10 
12:28:20.000000000 +0200
+++ new/crmsh-5.1.0+20260615.8409ea5a/crmsh/bootstrap.py        2026-06-15 
11:35:01.000000000 +0200
@@ -1464,9 +1464,28 @@
 
     if _context.transport != 'knet':
         logger.warning(
-            'Transport %s does not support encryption and message 
authentication. Corosync traffic will be in cleartext.',
+            'Transport %s is deprecated and does not support encryption and 
message authentication. '
+            'Corosync traffic will be in cleartext. Encryption will be 
enforced in future versions.',
             _context.transport,
         )
+    else:
+        cipher = _context.profiles_dict.get('corosync.totem.crypto_cipher')
+        hash_algo = _context.profiles_dict.get('corosync.totem.crypto_hash')
+        secauth = _context.profiles_dict.get('corosync.totem.secauth')
+
+        is_encrypted = True
+        if secauth == 'on':
+            if cipher == 'none' or hash_algo == 'none':
+                is_encrypted = False
+        else:
+            if not cipher or cipher == 'none' or not hash_algo or hash_algo == 
'none':
+                is_encrypted = False
+
+        if not is_encrypted:
+            logger.warning(
+                'It is deprecated to disable knet encryption/authentication. '
+                'Corosync traffic will be in cleartext. Encryption will be 
enforced in future versions.'
+            )
     config_corosync_conf()
     adjust_corosync_parameters_according_to_profiles()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260610.968f62d8/crmsh/help.py 
new/crmsh-5.1.0+20260615.8409ea5a/crmsh/help.py
--- old/crmsh-5.1.0+20260610.968f62d8/crmsh/help.py     2026-06-10 
12:28:20.000000000 +0200
+++ new/crmsh-5.1.0+20260615.8409ea5a/crmsh/help.py     2026-06-15 
11:35:01.000000000 +0200
@@ -77,13 +77,12 @@
 
 
 class HelpEntry(object):
-    def __init__(self, short_help, long_help='', alias_for=None, 
generated=False):
+    def __init__(self, short_help, long_help='', generated=False):
         if short_help:
             self.short = short_help[0].upper() + short_help[1:]
         else:
             self.short = 'Help'
         self._long_help = long_help
-        self.alias_for = alias_for
         self.generated = generated
 
     @property
@@ -94,8 +93,8 @@
     def long_help(self, value):
         self._long_help = value
 
-    def is_alias(self):
-        return self.alias_for is not None
+    def get_prefix(self):
+        return ''
 
     def paginate(self):
         '''
@@ -111,10 +110,7 @@
             if not long_help.startswith('\n'):
                 long_help = '\n' + long_help
 
-        prefix = ''
-        if self.is_alias():
-            prefix = helpfilter("(Redirected from `%s` to `%s`)\n" % 
self.alias_for)
-
+        prefix = self.get_prefix()
         utils.page_string(short_help + '\n' + prefix + long_help)
 
     def __str__(self):
@@ -126,15 +122,37 @@
         return str(self)
 
 
+class AliasHelpEntry(HelpEntry):
+    """
+    Represents an alias help entry.
+    Delegates long_help to the target HelpEntry to preserve lazy loading.
+    """
+    def __init__(self, target: HelpEntry, alias_for: str, alias_name: str):
+        super().__init__(target.short, generated=target.generated)
+        self.target = target
+        self.alias_for = alias_for
+        self.alias_name = alias_name
+
+    @property
+    def long_help(self):
+        return self.target.long_help
+
+    def get_prefix(self):
+        helpfilter = HelpFilter()
+        msg_alias = f"Command `{self.alias_name}` is an alias for 
`{self.alias_for}`"
+        msg_deprecated = f"`{self.alias_name}` is deprecated and will be 
removed in a future release"
+        return helpfilter(f"({msg_alias}. {msg_deprecated})\n")
+
+
 class LazyHelpEntryFromCli(HelpEntry):
     """lazy load from cli --help"""
     def __init__(
             self,
             short_help: str,
             cmd_args: typing.Sequence[str],
-            alias_for=None, generated=False,
+            generated=False,
     ):
-        super().__init__(short_help, '', alias_for, generated)
+        super().__init__(short_help, '', generated)
         self._cmd_args = cmd_args
 
     @functools.cached_property
@@ -169,7 +187,7 @@
 
 HELP_FILE = os.path.join(config.path.sharedir, 'crm.8.adoc')
 
-_DEFAULT = HelpEntry('No help available', long_help='', alias_for=None, 
generated=True)
+_DEFAULT = HelpEntry('No help available', long_help='', generated=True)
 _REFERENCE_RE = re.compile(r'<<[^,]+,(.+)>>')
 
 # loaded on demand
@@ -339,8 +357,8 @@
             else:
                 raise ValueError(f"Unknown property '{property_name}'")
         return None
-    else:
-        topic = levels[0].lower()
+    elif len(levels) <= 2:
+        topic = levels[-1].lower()
         t = utils.fuzzy_get(_TOPICS, topic)
         if t:
             return t
@@ -441,9 +459,20 @@
         "add help for aliases"
         for name, childinfo in childinfo.children.items():
             if name in help_node.children:
+                if name != childinfo.name:  # Skip alias entries during 
canonical traversal
+                    continue
                 fixup_help_aliases(help_node.children[name], childinfo)
                 for alias in childinfo.aliases:
-                    help_node.children[alias] = help_node.children[name]
+                    target = help_node.children[name]
+                    help_node.children[alias] = SubcommandTreeNode(
+                        alias,
+                        AliasHelpEntry(
+                            target.help,
+                            alias_for=target.name,
+                            alias_name=alias
+                        ),
+                        target.children
+                    )
         return
 
     def fixup_topics():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.1.0+20260610.968f62d8/doc/crm.8.adoc 
new/crmsh-5.1.0+20260615.8409ea5a/doc/crm.8.adoc
--- old/crmsh-5.1.0+20260610.968f62d8/doc/crm.8.adoc    2026-06-10 
12:28:20.000000000 +0200
+++ new/crmsh-5.1.0+20260615.8409ea5a/doc/crm.8.adoc    2026-06-15 
11:35:01.000000000 +0200
@@ -1837,6 +1837,8 @@
 unban <rsc>
 ...............
 
+Note: `migrate` is an alias for `move` command, `unmigrate`, `unban` are 
aliases for `clear` command.
+
 [[cmdhelp.resource.constraints,Show constraints affecting a resource]]
 ==== `constraints`
 
@@ -3263,7 +3265,7 @@
 **************************
 
 [[cmdhelp.configure.get_property,Get property value]]
-==== `get-property`
+==== `get_property`
 
 Show the value of the given property. If the value is not set, the
 command will print the default value for the property, if known.
@@ -3275,19 +3277,19 @@
 property sets with different rule expressions, the output of this
 command is undefined.
 
-Pass the argument +-t+ or +--true+ to `get-property` to translate
+Pass the argument +-t+ or +--true+ to `get_property` to translate
 the argument value into +true+ or +false+. If the value is not
 set, the command will print +false+.
 
 Usage:
 ...............
-get-property [-t|--true] [<name>]
+get_property [-t|--true] [<name>]
 ...............
 
 Example:
 ...............
-get-property fencing-enabled
-get-property -t maintenance-mode
+get_property fencing-enabled
+get_property -t maintenance-mode
 ...............
 
 [[cmdhelp.configure.graph,generate a directed graph]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260610.968f62d8/test/features/bootstrap_options.feature 
new/crmsh-5.1.0+20260615.8409ea5a/test/features/bootstrap_options.feature
--- old/crmsh-5.1.0+20260610.968f62d8/test/features/bootstrap_options.feature   
2026-06-10 12:28:20.000000000 +0200
+++ new/crmsh-5.1.0+20260615.8409ea5a/test/features/bootstrap_options.feature   
2026-06-15 11:35:01.000000000 +0200
@@ -172,7 +172,8 @@
     Given   Cluster service is "stopped" on "hanode1"
     Given   Cluster service is "stopped" on "hanode2"
     When    Run "crm cluster init -y -t udpu" on "hanode1"
-    Then    Cluster service is "started" on "hanode1"
+    Then    Except "Transport udpu is deprecated and does not support 
encryption and message authentication. Corosync traffic will be in cleartext. 
Encryption will be enforced in future versions." in stderr
+    And     Cluster service is "started" on "hanode1"
     When    Run "crm cluster join -c hanode1 -y" on "hanode2"
     Then    Cluster service is "started" on "hanode2"
     Then    Cluster is using "udpu" transport mode
@@ -182,7 +183,8 @@
     Given   Cluster service is "stopped" on "hanode1"
     Given   Cluster service is "stopped" on "hanode2"
     When    Run "crm cluster init -y -t udp" on "hanode1"
-    Then    Cluster service is "started" on "hanode1"
+    Then    Except "Transport udp is deprecated and does not support 
encryption and message authentication. Corosync traffic will be in cleartext. 
Encryption will be enforced in future versions." in stderr
+    And     Cluster service is "started" on "hanode1"
     When    Run "crm cluster join -c hanode1 -y" on "hanode2"
     Then    Cluster service is "started" on "hanode2"
     Then    Cluster is using "udp" transport mode
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.1.0+20260610.968f62d8/test/unittests/test_bootstrap.py 
new/crmsh-5.1.0+20260615.8409ea5a/test/unittests/test_bootstrap.py
--- old/crmsh-5.1.0+20260610.968f62d8/test/unittests/test_bootstrap.py  
2026-06-10 12:28:20.000000000 +0200
+++ new/crmsh-5.1.0+20260615.8409ea5a/test/unittests/test_bootstrap.py  
2026-06-15 11:35:01.000000000 +0200
@@ -1579,6 +1579,75 @@
             mock.call(None, f"systemctl is-failed {constants.PCMK_SERVICE}")
         ])
 
+    @mock.patch('crmsh.bootstrap.logger.warning')
+    
@mock.patch('crmsh.bootstrap.adjust_corosync_parameters_according_to_profiles')
+    @mock.patch('crmsh.bootstrap.config_corosync_conf')
+    @mock.patch('crmsh.bootstrap.init_corosync_auth')
+    @mock.patch('os.path.exists')
+    def test_init_corosync_warning_non_knet(self, mock_exists, mock_auth, 
mock_conf, mock_adjust, mock_warning):
+        mock_exists.return_value = False
+        bootstrap._context = mock.Mock(transport='udpu')
+        bootstrap.init_corosync()
+        mock_warning.assert_called_once_with(
+            'Transport %s is deprecated and does not support encryption and 
message authentication. '
+            'Corosync traffic will be in cleartext. Encryption will be 
enforced in future versions.',
+            'udpu',
+        )
+
+    @mock.patch('crmsh.bootstrap.logger.warning')
+    
@mock.patch('crmsh.bootstrap.adjust_corosync_parameters_according_to_profiles')
+    @mock.patch('crmsh.bootstrap.config_corosync_conf')
+    @mock.patch('crmsh.bootstrap.init_corosync_auth')
+    @mock.patch('os.path.exists')
+    def test_init_corosync_no_warning_knet(self, mock_exists, mock_auth, 
mock_conf, mock_adjust, mock_warning):
+        mock_exists.return_value = False
+        profiles = {
+            'corosync.totem.crypto_cipher': 'aes256',
+            'corosync.totem.crypto_hash': 'sha256',
+            'corosync.totem.secauth': None
+        }
+        bootstrap._context = mock.Mock(transport='knet', 
profiles_dict=profiles)
+        bootstrap.init_corosync()
+        mock_warning.assert_not_called()
+
+    @mock.patch('crmsh.bootstrap.logger.warning')
+    
@mock.patch('crmsh.bootstrap.adjust_corosync_parameters_according_to_profiles')
+    @mock.patch('crmsh.bootstrap.config_corosync_conf')
+    @mock.patch('crmsh.bootstrap.init_corosync_auth')
+    @mock.patch('os.path.exists')
+    def test_init_corosync_knet_warning_disabled(self, mock_exists, mock_auth, 
mock_conf, mock_adjust, mock_warning):
+        mock_exists.return_value = False
+        profiles = {
+            'corosync.totem.crypto_cipher': 'none',
+            'corosync.totem.crypto_hash': 'sha256',
+            'corosync.totem.secauth': None
+        }
+        bootstrap._context = mock.Mock(transport='knet', 
profiles_dict=profiles)
+        bootstrap.init_corosync()
+        mock_warning.assert_called_once_with(
+            'It is deprecated to disable knet encryption/authentication. '
+            'Corosync traffic will be in cleartext. Encryption will be 
enforced in future versions.'
+        )
+
+    @mock.patch('crmsh.bootstrap.logger.warning')
+    
@mock.patch('crmsh.bootstrap.adjust_corosync_parameters_according_to_profiles')
+    @mock.patch('crmsh.bootstrap.config_corosync_conf')
+    @mock.patch('crmsh.bootstrap.init_corosync_auth')
+    @mock.patch('os.path.exists')
+    def test_init_corosync_knet_warning_secauth_on_but_none(self, mock_exists, 
mock_auth, mock_conf, mock_adjust, mock_warning):
+        mock_exists.return_value = False
+        profiles = {
+            'corosync.totem.crypto_cipher': 'none',
+            'corosync.totem.crypto_hash': 'sha256',
+            'corosync.totem.secauth': 'on'
+        }
+        bootstrap._context = mock.Mock(transport='knet', 
profiles_dict=profiles)
+        bootstrap.init_corosync()
+        mock_warning.assert_called_once_with(
+            'It is deprecated to disable knet encryption/authentication. '
+            'Corosync traffic will be in cleartext. Encryption will be 
enforced in future versions.'
+        )
+
 
 class TestValidation(unittest.TestCase):
     """

Reply via email to