Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package crmsh for openSUSE:Factory checked in at 2021-04-21 20:59:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/crmsh (Old) and /work/SRC/openSUSE:Factory/.crmsh.new.12324 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "crmsh" Wed Apr 21 20:59:41 2021 rev:207 rq:886829 version:4.3.0+20210416.49f489c2 Changes: -------- --- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes 2021-04-12 12:40:27.133584636 +0200 +++ /work/SRC/openSUSE:Factory/.crmsh.new.12324/crmsh.changes 2021-04-21 20:59:55.626251212 +0200 @@ -1,0 +2,14 @@ +Fri Apr 16 15:43:11 UTC 2021 - xli...@suse.com + +- Update to version 4.3.0+20210416.49f489c2: + * Dev: unittest: add unit test code for query_qdevice_status functiona + * Dev: add "crm corosync status qdevice" sub-command + +------------------------------------------------------------------- +Wed Apr 14 08:25:40 UTC 2021 - xli...@suse.com + +- Update to version 4.3.0+20210414.d22dd892: + * Dev: unittest: adjust unit test for disable sbd warning + * Dev: bootstrap: disable unnecessary warnings (bsc#1178118) + +------------------------------------------------------------------- Old: ---- crmsh-4.3.0+20210412.7d40b39d.tar.bz2 New: ---- crmsh-4.3.0+20210416.49f489c2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ crmsh.spec ++++++ --- /var/tmp/diff_new_pack.ku2D6Y/_old 2021-04-21 20:59:56.238252175 +0200 +++ /var/tmp/diff_new_pack.ku2D6Y/_new 2021-04-21 20:59:56.242252181 +0200 @@ -36,7 +36,7 @@ Summary: High Availability cluster command-line interface License: GPL-2.0-or-later Group: %{pkg_group} -Version: 4.3.0+20210412.7d40b39d +Version: 4.3.0+20210416.49f489c2 Release: 0 URL: http://crmsh.github.io Source0: %{name}-%{version}.tar.bz2 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.ku2D6Y/_old 2021-04-21 20:59:56.278252238 +0200 +++ /var/tmp/diff_new_pack.ku2D6Y/_new 2021-04-21 20:59:56.278252238 +0200 @@ -9,6 +9,6 @@ </service> <service name="tar_scm"> <param name="url">https://github.com/ClusterLabs/crmsh.git</param> - <param name="changesrevision">4dc3a162391c92d96f0aa02b8821d39caef6e082</param> + <param name="changesrevision">49f489c2fad5b63d34c39c16dbe14e902551eef5</param> </service> </servicedata> \ No newline at end of file ++++++ crmsh-4.3.0+20210412.7d40b39d.tar.bz2 -> crmsh-4.3.0+20210416.49f489c2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.0+20210412.7d40b39d/crmsh/bootstrap.py new/crmsh-4.3.0+20210416.49f489c2/crmsh/bootstrap.py --- old/crmsh-4.3.0+20210412.7d40b39d/crmsh/bootstrap.py 2021-04-12 10:18:59.000000000 +0200 +++ new/crmsh-4.3.0+20210416.49f489c2/crmsh/bootstrap.py 2021-04-16 17:29:55.000000000 +0200 @@ -358,6 +358,7 @@ are a good choice. Note that all data on the partition you specify here will be destroyed. """ + SBD_WARNING = "Not configuring SBD - STONITH will be disabled." DISKLESS_SBD_WARNING = """Diskless SBD requires cluster with three or more nodes. If you want to use diskless SBD for two-nodes cluster, should be combined with QDevice.""" PARSE_RE = "[; ]" @@ -431,13 +432,13 @@ Get sbd device on interactive mode """ if _context.yes_to_all: - warn("Not configuring SBD ({} left untouched).".format(SYSCONFIG_SBD)) + warn(self.SBD_WARNING) return status(self.SBD_STATUS_DESCRIPTION) if not confirm("Do you wish to use SBD?"): - warn("Not configuring SBD - STONITH will be disabled.") + warn(self.SBD_WARNING) return configured_dev_list = self._get_sbd_device_from_config() @@ -1033,8 +1034,6 @@ init_firewall_suse(tcp, udp) elif utils.package_is_installed("ufw"): init_firewall_ufw(tcp, udp) - else: - warn("Failed to detect firewall: Could not open ports tcp={}, udp={}".format("|".join(tcp), "|".join(udp))) def firewall_open_basic_ports(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.0+20210412.7d40b39d/crmsh/corosync.py new/crmsh-4.3.0+20210416.49f489c2/crmsh/corosync.py --- old/crmsh-4.3.0+20210412.7d40b39d/crmsh/corosync.py 2021-04-12 10:18:59.000000000 +0200 +++ new/crmsh-4.3.0+20210416.49f489c2/crmsh/corosync.py 2021-04-16 17:29:55.000000000 +0200 @@ -35,14 +35,16 @@ """ Query status of corosync - Possible types could be ring/quorum/qnetd + Possible types could be ring/quorum/qdevice/qnetd """ - if status_type == "ring": - query_ring_status() - elif status_type == "quorum": - query_quorum_status() - elif status_type == "qnetd": - query_qnetd_status() + status_func_dict = { + "ring": query_ring_status, + "quorum": query_quorum_status, + "qdevice": query_qdevice_status, + "qnetd": query_qnetd_status + } + if status_type in status_func_dict: + status_func_dict[status_type]() else: raise ValueError("Wrong type \"{}\" to query status".format(status_type)) @@ -73,6 +75,18 @@ print(out) +def query_qdevice_status(): + """ + Query qdevice status + """ + if not utils.is_qdevice_configured(): + raise ValueError("QDevice/QNetd not configured!") + cmd = "corosync-qdevice-tool -sv" + out = utils.get_stdout_or_raise_error(cmd) + utils.print_cluster_nodes() + print(out) + + def query_qnetd_status(): """ Query qnetd status diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.0+20210412.7d40b39d/crmsh/ui_corosync.py new/crmsh-4.3.0+20210416.49f489c2/crmsh/ui_corosync.py --- old/crmsh-4.3.0+20210412.7d40b39d/crmsh/ui_corosync.py 2021-04-12 10:18:59.000000000 +0200 +++ new/crmsh-4.3.0+20210416.49f489c2/crmsh/ui_corosync.py 2021-04-16 17:29:55.000000000 +0200 @@ -54,7 +54,7 @@ def requires(self): return corosync.check_tools() - @command.completers(completers.choice(['ring', 'quorum', 'qnetd'])) + @command.completers(completers.choice(['ring', 'quorum', 'qdevice', 'qnetd'])) def do_status(self, context, status_type="ring"): ''' Quick cluster health status. Corosync status or QNetd status diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.0+20210412.7d40b39d/doc/crm.8.adoc new/crmsh-4.3.0+20210416.49f489c2/doc/crm.8.adoc --- old/crmsh-4.3.0+20210412.7d40b39d/doc/crm.8.adoc 2021-04-12 10:18:59.000000000 +0200 +++ new/crmsh-4.3.0+20210416.49f489c2/doc/crm.8.adoc 2021-04-16 17:29:55.000000000 +0200 @@ -1745,11 +1745,11 @@ [[cmdhelp_corosync_status,Display the corosync status]] ==== `status` -Displays the corosync ring status(default), quorum status and qnetd status. +Displays the corosync ring status(default), also can display quorum/qdevice/qnetd status. Usage: ......... -status [ring|quorum|qnetd] +status [ring|quorum|qdevice|qnetd] ......... [[cmdhelp_cib,CIB shadow management]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.0+20210412.7d40b39d/test/unittests/test_bootstrap.py new/crmsh-4.3.0+20210416.49f489c2/test/unittests/test_bootstrap.py --- old/crmsh-4.3.0+20210412.7d40b39d/test/unittests/test_bootstrap.py 2021-04-12 10:18:59.000000000 +0200 +++ new/crmsh-4.3.0+20210416.49f489c2/test/unittests/test_bootstrap.py 2021-04-16 17:29:55.000000000 +0200 @@ -354,7 +354,7 @@ def test_get_sbd_device_interactive_yes_to_all(self, mock_warn): bootstrap._context = mock.Mock(yes_to_all=True) self.sbd_inst._get_sbd_device_interactive() - mock_warn.assert_called_once_with("Not configuring SBD ({} left untouched).".format(bootstrap.SYSCONFIG_SBD)) + mock_warn.assert_called_once_with(bootstrap.SBDManager.SBD_WARNING) @mock.patch('crmsh.bootstrap.confirm') @mock.patch('crmsh.bootstrap.status') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.0+20210412.7d40b39d/test/unittests/test_corosync.py new/crmsh-4.3.0+20210416.49f489c2/test/unittests/test_corosync.py --- old/crmsh-4.3.0+20210412.7d40b39d/test/unittests/test_corosync.py 2021-04-12 10:18:59.000000000 +0200 +++ new/crmsh-4.3.0+20210416.49f489c2/test/unittests/test_corosync.py 2021-04-16 17:29:55.000000000 +0200 @@ -42,6 +42,37 @@ print(parser.to_string()) +def test_query_status_exception(): + with pytest.raises(ValueError) as err: + corosync.query_status("test") + assert str(err.value) == "Wrong type \"test\" to query status" + + +@mock.patch('crmsh.corosync.query_ring_status') +def test_query_status(mock_ring_status): + corosync.query_status("ring") + mock_ring_status.assert_called_once_with() + + +@mock.patch('crmsh.utils.is_qdevice_configured') +def test_query_qdevice_status_exception(mock_configured): + mock_configured.return_value = False + with pytest.raises(ValueError) as err: + corosync.query_qdevice_status() + assert str(err.value) == "QDevice/QNetd not configured!" + mock_configured.assert_called_once_with() + + +@mock.patch('crmsh.utils.print_cluster_nodes') +@mock.patch('crmsh.utils.get_stdout_or_raise_error') +@mock.patch('crmsh.utils.is_qdevice_configured') +def test_query_qdevice_status(mock_configured, mock_run, mock_print): + mock_configured.return_value = True + corosync.query_qdevice_status() + mock_run.assert_called_once_with("corosync-qdevice-tool -sv") + mock_print.assert_called_once_with() + + @mock.patch("crmsh.corosync.query_ring_status") def test_query_status_ring(mock_ring_status): corosync.query_status("ring")