Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package crmsh for openSUSE:Factory checked 
in at 2022-09-30 17:58:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/crmsh (Old)
 and      /work/SRC/openSUSE:Factory/.crmsh.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "crmsh"

Fri Sep 30 17:58:15 2022 rev:262 rq:1007132 version:4.4.1+20220928.3480aa0d

Changes:
--------
--- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes      2022-09-28 
17:51:56.243254489 +0200
+++ /work/SRC/openSUSE:Factory/.crmsh.new.2275/crmsh.changes    2022-09-30 
17:58:32.589344640 +0200
@@ -1,0 +2,20 @@
+Wed Sep 28 08:53:06 UTC 2022 - xli...@suse.com
+
+- Update to version 4.4.1+20220928.3480aa0d:
+  * Dev: behave: append more functional test for sbd and watchdog
+
+-------------------------------------------------------------------
+Wed Sep 28 08:19:45 UTC 2022 - xli...@suse.com
+
+- Update to version 4.4.1+20220928.ef80f673:
+  * Dev: unittest: Adjust unit test based on previous changes
+  * Fix: sbd: Ask if overwrite when given sbd device on interactive 
mode(bsc#1201428)
+
+-------------------------------------------------------------------
+Wed Sep 28 06:26:30 UTC 2022 - xli...@suse.com
+
+- Update to version 4.4.1+20220928.ea5c5190:
+  * Dev: history: print necessary log messages when collecting report
+  * Dev: report: make sure 'crm -d report' could increase the verbosity
+
+-------------------------------------------------------------------

Old:
----
  crmsh-4.4.1+20220928.ded85d0a.tar.bz2

New:
----
  crmsh-4.4.1+20220928.3480aa0d.tar.bz2

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

Other differences:
------------------
++++++ crmsh.spec ++++++
--- /var/tmp/diff_new_pack.0005tr/_old  2022-09-30 17:58:33.109345752 +0200
+++ /var/tmp/diff_new_pack.0005tr/_new  2022-09-30 17:58:33.117345769 +0200
@@ -36,7 +36,7 @@
 Summary:        High Availability cluster command-line interface
 License:        GPL-2.0-or-later
 Group:          %{pkg_group}
-Version:        4.4.1+20220928.ded85d0a
+Version:        4.4.1+20220928.3480aa0d
 Release:        0
 URL:            http://crmsh.github.io
 Source0:        %{name}-%{version}.tar.bz2

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.0005tr/_old  2022-09-30 17:58:33.165345872 +0200
+++ /var/tmp/diff_new_pack.0005tr/_new  2022-09-30 17:58:33.169345880 +0200
@@ -9,7 +9,7 @@
 </service>
 <service name="tar_scm">
   <param name="url">https://github.com/ClusterLabs/crmsh.git</param>
-  <param 
name="changesrevision">37d4b63487534aa9de6fbfefb8e87812bfad14be</param>
+  <param 
name="changesrevision">3081582137d44f867222d7161eebca796d2c3293</param>
 </service>
 </servicedata>
 (No newline at EOF)

++++++ crmsh-4.4.1+20220928.ded85d0a.tar.bz2 -> 
crmsh-4.4.1+20220928.3480aa0d.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-4.4.1+20220928.ded85d0a/crmsh/history.py 
new/crmsh-4.4.1+20220928.3480aa0d/crmsh/history.py
--- old/crmsh-4.4.1+20220928.ded85d0a/crmsh/history.py  2022-09-28 
02:31:20.000000000 +0200
+++ new/crmsh-4.4.1+20220928.3480aa0d/crmsh/history.py  2022-09-28 
10:37:09.000000000 +0200
@@ -473,19 +473,21 @@
             nodes_option = "'-n %s'" % ' '.join(self.setnodes)
         utils.mkdirp(os.path.dirname(d))
         logger.info("Retrieving information from cluster nodes, please 
wait...")
-        rc = utils.pipe_cmd_nosudo("%s -Z -Q -f '%s' %s %s %s %s" %
-                                   (extcmd,
-                                    self.from_dt.ctime(),
-                                    to_option,
-                                    nodes_option,
-                                    str(config.core.report_tool_options),
-                                    d))
+        cmd = "{} {} -Z -Q -f '{}' {} {} {} {}".format(extcmd,
+                "-v" if config.core.debug else "", self.from_dt.ctime(),
+                to_option, nodes_option, str(config.core.report_tool_options), 
d)
+        logger.debug("Running command: {}".format(cmd))
+        rc, out, err = utils.get_stdout_stderr(cmd)
         if rc != 0:
+            if err:
+                print(err)
             if os.path.isfile(tarball):
                 self.warn("report thinks it failed, proceeding anyway")
             else:
                 self.error("report failed")
                 return None
+        if out:
+            print(out)
         self.last_live_update = time.time()
         return self.unpack_report(tarball)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-4.4.1+20220928.ded85d0a/crmsh/report/constants.py 
new/crmsh-4.4.1+20220928.3480aa0d/crmsh/report/constants.py
--- old/crmsh-4.4.1+20220928.ded85d0a/crmsh/report/constants.py 2022-09-28 
02:31:20.000000000 +0200
+++ new/crmsh-4.4.1+20220928.3480aa0d/crmsh/report/constants.py 2022-09-28 
10:37:09.000000000 +0200
@@ -60,7 +60,6 @@
 # UNIQUE_MSG = "Mark:HB_REPORT:%d" % now_second
 USER_CLUSTER_TYPE = "Corosync/Pacemaker"
 USER_NODES = ""
-VERBOSITY = 0
 WE = socket.gethostname()
 WORKDIR = None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-4.4.1+20220928.ded85d0a/crmsh/report/core.py 
new/crmsh-4.4.1+20220928.3480aa0d/crmsh/report/core.py
--- old/crmsh-4.4.1+20220928.ded85d0a/crmsh/report/core.py      2022-09-28 
02:31:20.000000000 +0200
+++ new/crmsh-4.4.1+20220928.3480aa0d/crmsh/report/core.py      2022-09-28 
10:37:09.000000000 +0200
@@ -52,7 +52,7 @@
     env_dict["SKIP_LVL"] = constants.SKIP_LVL
     env_dict["EXTRA_LOGS"] = constants.EXTRA_LOGS
     env_dict["PCMK_LOG"] = constants.PCMK_LOG
-    env_dict["VERBOSITY"] = int(constants.VERBOSITY)
+    env_dict["VERBOSITY"] = int(config.report.verbosity) or (1 if 
config.core.debug else 0)
 
     res_str = ""
     for k, v in env_dict.items():
@@ -133,8 +133,7 @@
     constants.SKIP_LVL = utillib.str_to_bool(env_dict["SKIP_LVL"])
     constants.EXTRA_LOGS = env_dict["EXTRA_LOGS"]
     constants.PCMK_LOG = env_dict["PCMK_LOG"]
-    constants.VERBOSITY = int(env_dict["VERBOSITY"])
-    config.report.verbosity = constants.VERBOSITY
+    config.report.verbosity = env_dict["VERBOSITY"]
 
 
 def parse_argument(argv):
@@ -151,6 +150,7 @@
     else:
         usage("short")
 
+    verbosity = 0
     for args, option in opt:
         if args == '-h':
             usage()
@@ -191,11 +191,12 @@
         if args == "-E":
             constants.EXTRA_LOGS += " %s" % option
         if args == "-v":
-            constants.VERBOSITY += 1
-            config.report.verbosity = constants.VERBOSITY
+            verbosity += 1
         if args == '-d':
             constants.COMPRESS = False
 
+    config.report.verbosity = verbosity
+
     if config.report.sanitize_rule:
         constants.DO_SANITIZE = True
         temp_pattern_set = set()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-4.4.1+20220928.ded85d0a/crmsh/sbd.py 
new/crmsh-4.4.1+20220928.3480aa0d/crmsh/sbd.py
--- old/crmsh-4.4.1+20220928.ded85d0a/crmsh/sbd.py      2022-09-28 
02:31:20.000000000 +0200
+++ new/crmsh-4.4.1+20220928.3480aa0d/crmsh/sbd.py      2022-09-28 
10:37:09.000000000 +0200
@@ -284,7 +284,8 @@
         self._context = context
         self._delay_start = False
         self.timeout_inst = None
-        self.no_overwrite = False
+        self.no_overwrite_map = {}
+        self.no_update_config = False
 
     @staticmethod
     def _get_device_uuid(dev, node=None):
@@ -320,6 +321,12 @@
                 raise ValueError("{} doesn't look like a block 
device".format(dev))
             self._compare_device_uuid(dev, compare_node_list)
 
+    def _no_overwrite_check(self, dev):
+        """
+        Check if device already initialized and if need to overwrite
+        """
+        return SBDManager.has_sbd_device_already_initialized(dev) and not 
bootstrap.confirm("SBD is already configured to use {} - 
overwrite?".format(dev))
+
     def _get_sbd_device_interactive(self):
         """
         Get sbd device on interactive mode
@@ -335,8 +342,10 @@
             return
 
         configured_dev_list = self._get_sbd_device_from_config()
-        if configured_dev_list and not bootstrap.confirm("SBD is already 
configured to use {} - overwrite?".format(';'.join(configured_dev_list))):
-            self.no_overwrite = True
+        for dev in configured_dev_list:
+            self.no_overwrite_map[dev] = self._no_overwrite_check(dev)
+        if self.no_overwrite_map and all(self.no_overwrite_map.values()):
+            self.no_update_config = True
             return configured_dev_list
 
         dev_list = []
@@ -348,14 +357,22 @@
             if dev == "none":
                 self.diskless_sbd = True
                 return
+
             dev_list = utils.re_split_string(self.PARSE_RE, dev)
             try:
                 self._verify_sbd_device(dev_list)
             except ValueError as err_msg:
                 logger.error(str(err_msg))
                 continue
-            for dev_item in dev_list:
-                logger.warning("All data on {} will be 
destroyed!".format(dev_item))
+
+            for dev in dev_list:
+                if dev not in self.no_overwrite_map:
+                    self.no_overwrite_map[dev] = self._no_overwrite_check(dev)
+                if self.no_overwrite_map[dev]:
+                    if dev == dev_list[-1]:
+                        return dev_list
+                    continue
+                logger.warning("All data on {} will be destroyed!".format(dev))
                 if bootstrap.confirm('Are you sure you wish to use this 
device?'):
                     dev_looks_sane = True
                 else:
@@ -372,6 +389,10 @@
         if self.sbd_devices_input:
             dev_list = 
utils.parse_append_action_argument(self.sbd_devices_input)
             self._verify_sbd_device(dev_list)
+            for dev in dev_list:
+                self.no_overwrite_map[dev] = self._no_overwrite_check(dev)
+            if all(self.no_overwrite_map.values()) and dev_list == 
self._get_sbd_device_from_config():
+                self.no_update_config = True
         elif not self.diskless_sbd:
             dev_list = self._get_sbd_device_interactive()
         self._sbd_devices = dev_list
@@ -386,7 +407,7 @@
         msg = ""
         if self.diskless_sbd:
             msg = "Configuring diskless SBD"
-        elif not self.no_overwrite:
+        elif not all(self.no_overwrite_map.values()):
             msg = "Initializing SBD"
         if msg:
             logger.info(msg)
@@ -398,7 +419,7 @@
         opt = "-4 {} -1 {}".format(self.timeout_inst.sbd_msgwait, 
self.timeout_inst.sbd_watchdog_timeout)
 
         for dev in self._sbd_devices:
-            if self.no_overwrite and 
SBDManager.has_sbd_device_already_initialized(dev):
+            if dev in self.no_overwrite_map and self.no_overwrite_map[dev]:
                 continue
             rc, _, err = bootstrap.invoke("sbd {} -d {} create".format(opt, 
dev))
             if not rc:
@@ -408,7 +429,7 @@
         """
         Update /etc/sysconfig/sbd
         """
-        if self.no_overwrite:
+        if self.no_update_config:
             bootstrap.csync2_update(SYSCONFIG_SBD)
             return
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-4.4.1+20220928.ded85d0a/test/features/bootstrap_sbd_normal.feature 
new/crmsh-4.4.1+20220928.3480aa0d/test/features/bootstrap_sbd_normal.feature
--- 
old/crmsh-4.4.1+20220928.ded85d0a/test/features/bootstrap_sbd_normal.feature    
    2022-09-28 02:31:20.000000000 +0200
+++ 
new/crmsh-4.4.1+20220928.3480aa0d/test/features/bootstrap_sbd_normal.feature    
    2022-09-28 10:37:09.000000000 +0200
@@ -37,15 +37,21 @@
     And     Resource "stonith:external/sbd" not configured
 
   @clean
-  Scenario: Configure diskless sbd
+  Scenario: Configure diskless sbd(bsc#1181907)
     Given   Cluster service is "stopped" on "hanode1"
     Given   Cluster service is "stopped" on "hanode2"
     When    Run "crm cluster init -S -y" on "hanode1"
+    Then    Expected "Diskless SBD requires cluster with three or more nodes." 
in stdout
     Then    Cluster service is "started" on "hanode1"
     And     Service "sbd" is "started" on "hanode1"
     When    Run "crm cluster join -c hanode1 -y" on "hanode2"
+    Then    Expected "Diskless SBD requires cluster with three or more nodes." 
in stdout
     Then    Cluster service is "started" on "hanode2"
     And     Service "sbd" is "started" on "hanode2"
+    When    Run "crm cluster join -c hanode1 -y" on "hanode3"
+    Then    Expected "Diskless SBD requires cluster with three or more nodes." 
not in stdout
+    Then    Cluster service is "started" on "hanode3"
+    And     Service "sbd" is "started" on "hanode3"
     And     Resource "stonith:external/sbd" not configured
 
   @clean
@@ -136,3 +142,19 @@
     Then    Service "sbd" is "started" on "hanode2"
     When    Run "sleep 20" on "hanode1"
     Then    Resource "stonith-sbd" type "external/sbd" is "Started"
+
+  @clean
+  Scenario: Configure sbd when no watchdog device(bsc#1154927, bsc#1178869)
+    Given   Cluster service is "stopped" on "hanode1"
+    Given   Cluster service is "stopped" on "hanode2"
+    When    Try "lsmod |grep softdog && rmmod softdog" on "hanode1"
+    And     Try "lsmod |grep softdog && rmmod softdog" on "hanode2"
+    When    Run "crm cluster init -s /dev/sda1 -w softdog -y" on "hanode1"
+    Then    Cluster service is "started" on "hanode1"
+    And     Service "sbd" is "started" on "hanode1"
+    When    Try "lsmod |grep softdog"
+    Then    Expected return code is "0"
+    When    Run "crm cluster join -c hanode1 -y" on "hanode2"
+    Then    Cluster service is "started" on "hanode2"
+    And     Service "sbd" is "started" on "hanode2"
+    And     Resource "stonith-sbd" type "external/sbd" is "Started"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-4.4.1+20220928.ded85d0a/test/unittests/test_sbd.py 
new/crmsh-4.4.1+20220928.3480aa0d/test/unittests/test_sbd.py
--- old/crmsh-4.4.1+20220928.ded85d0a/test/unittests/test_sbd.py        
2022-09-28 02:31:20.000000000 +0200
+++ new/crmsh-4.4.1+20220928.3480aa0d/test/unittests/test_sbd.py        
2022-09-28 10:37:09.000000000 +0200
@@ -335,13 +335,15 @@
         
mock_status.assert_called_once_with(sbd.SBDManager.SBD_STATUS_DESCRIPTION)
         mock_warn.assert_called_once_with("Not configuring SBD - STONITH will 
be disabled.")
 
+    @mock.patch('crmsh.sbd.SBDManager._no_overwrite_check')
     @mock.patch('crmsh.sbd.SBDManager._get_sbd_device_from_config')
     @mock.patch('crmsh.bootstrap.confirm')
     @mock.patch('logging.Logger.info')
-    def test_get_sbd_device_interactive_already_configured(self, mock_status, 
mock_confirm, mock_from_config):
+    def test_get_sbd_device_interactive_already_configured(self, mock_status, 
mock_confirm, mock_from_config, mock_no_overwrite):
         self.sbd_inst._context = mock.Mock(yes_to_all=False)
-        mock_confirm.side_effect = [True, False]
+        mock_confirm.return_value = True
         mock_from_config.return_value = ["/dev/sda1"]
+        mock_no_overwrite.return_value = True
 
         res = self.sbd_inst._get_sbd_device_interactive()
         self.assertEqual(res, ["/dev/sda1"])
@@ -349,19 +351,20 @@
         
mock_status.assert_called_once_with(sbd.SBDManager.SBD_STATUS_DESCRIPTION)
         mock_confirm.assert_has_calls([
             mock.call("Do you wish to use SBD?"),
-            mock.call("SBD is already configured to use /dev/sda1 - 
overwrite?")
             ])
         
mock_status.assert_called_once_with(sbd.SBDManager.SBD_STATUS_DESCRIPTION)
         mock_from_config.assert_called_once_with()
 
     @mock.patch('crmsh.bootstrap.prompt_for_string')
+    @mock.patch('crmsh.sbd.SBDManager._no_overwrite_check')
     @mock.patch('crmsh.sbd.SBDManager._get_sbd_device_from_config')
     @mock.patch('crmsh.bootstrap.confirm')
     @mock.patch('logging.Logger.info')
-    def test_get_sbd_device_interactive_diskless(self, mock_status, 
mock_confirm, mock_from_config, mock_prompt):
+    def test_get_sbd_device_interactive_diskless(self, mock_status, 
mock_confirm, mock_from_config, mock_no_overwrite, mock_prompt):
         self.sbd_inst._context = mock.Mock(yes_to_all=False)
         mock_confirm.return_value = True
-        mock_from_config.return_value = None
+        mock_no_overwrite.return_value = False
+        mock_from_config.return_value = []
         mock_prompt.return_value = "none"
 
         self.sbd_inst._get_sbd_device_interactive()
@@ -371,13 +374,15 @@
         mock_prompt.assert_called_once_with('Path to storage device (e.g. 
/dev/disk/by-id/...), or "none" for diskless sbd, use ";" as separator for 
multi path', 'none|\\/.*')
 
     @mock.patch('crmsh.bootstrap.prompt_for_string')
+    @mock.patch('crmsh.sbd.SBDManager._no_overwrite_check')
     @mock.patch('crmsh.sbd.SBDManager._get_sbd_device_from_config')
     @mock.patch('crmsh.bootstrap.confirm')
     @mock.patch('logging.Logger.info')
-    def test_get_sbd_device_interactive_null_and_diskless(self, mock_status, 
mock_confirm, mock_from_config, mock_prompt):
+    def test_get_sbd_device_interactive_null_and_diskless(self, mock_status, 
mock_confirm, mock_from_config, mock_no_overwrite, mock_prompt):
         self.sbd_inst._context = mock.Mock(yes_to_all=False)
         mock_confirm.return_value = True
-        mock_from_config.return_value = None
+        mock_no_overwrite.return_value = False
+        mock_from_config.return_value = []
         mock_prompt.side_effect = [None, "none"]
 
         self.sbd_inst._get_sbd_device_interactive()
@@ -394,13 +399,15 @@
     @mock.patch('logging.Logger.error')
     @mock.patch('crmsh.sbd.SBDManager._verify_sbd_device')
     @mock.patch('crmsh.bootstrap.prompt_for_string')
+    @mock.patch('crmsh.sbd.SBDManager._no_overwrite_check')
     @mock.patch('crmsh.sbd.SBDManager._get_sbd_device_from_config')
     @mock.patch('crmsh.bootstrap.confirm')
     @mock.patch('logging.Logger.info')
-    def test_get_sbd_device_interactive(self, mock_status, mock_confirm, 
mock_from_config, mock_prompt, mock_verify, mock_error_msg, mock_warn, 
mock_split):
+    def test_get_sbd_device_interactive(self, mock_status, mock_confirm, 
mock_from_config, mock_no_overwrite, mock_prompt, mock_verify, mock_error_msg, 
mock_warn, mock_split):
         self.sbd_inst._context = mock.Mock(yes_to_all=False)
         mock_confirm.side_effect = [True, False, True]
-        mock_from_config.return_value = None
+        mock_from_config.return_value = []
+        mock_no_overwrite.return_value = False
         mock_prompt.side_effect = ["/dev/test1", "/dev/sda1", "/dev/sdb1"]
         mock_split.side_effect = [["/dev/test1"], ["/dev/sda1"], ["/dev/sdb1"]]
         mock_verify.side_effect = [ValueError("/dev/test1 error"), None, None]

Reply via email to