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-12-10 21:52:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/crmsh (Old) and /work/SRC/openSUSE:Factory/.crmsh.new.2520 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "crmsh" Fri Dec 10 21:52:32 2021 rev:230 rq:938974 version:4.3.1+20211210.a149de51 Changes: -------- --- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes 2021-12-07 23:59:55.655703447 +0100 +++ /work/SRC/openSUSE:Factory/.crmsh.new.2520/crmsh.changes 2021-12-10 21:52:55.050906693 +0100 @@ -1,0 +2,11 @@ +Fri Dec 10 02:48:29 UTC 2021 - xli...@suse.com + +- Update to version 4.3.1+20211210.a149de51: + * Dev: unittest: adjust unit test based on previous changes + * Dev: behave: adjust functional test based on previous changes + * Dev: ui_cluster: Exit stop process when there is no DC + * Dev: ui_cluster: check dlm controld ra is running when stop cluster + * Dev: log: In status_long function, add a blank line when exception + * Revert "Dev: ui_cluster: Make sure node is online when stop service" + +------------------------------------------------------------------- Old: ---- crmsh-4.3.1+20211206.e34e2fff.tar.bz2 New: ---- crmsh-4.3.1+20211210.a149de51.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ crmsh.spec ++++++ --- /var/tmp/diff_new_pack.ANrzra/_old 2021-12-10 21:52:55.650906959 +0100 +++ /var/tmp/diff_new_pack.ANrzra/_new 2021-12-10 21:52:55.654906960 +0100 @@ -36,7 +36,7 @@ Summary: High Availability cluster command-line interface License: GPL-2.0-or-later Group: %{pkg_group} -Version: 4.3.1+20211206.e34e2fff +Version: 4.3.1+20211210.a149de51 Release: 0 URL: http://crmsh.github.io Source0: %{name}-%{version}.tar.bz2 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.ANrzra/_old 2021-12-10 21:52:55.694906978 +0100 +++ /var/tmp/diff_new_pack.ANrzra/_new 2021-12-10 21:52:55.694906978 +0100 @@ -9,6 +9,6 @@ </service> <service name="tar_scm"> <param name="url">https://github.com/ClusterLabs/crmsh.git</param> - <param name="changesrevision">e34e2fff81bd37313b199fb113044ebfdbdbf373</param> + <param name="changesrevision">9cdc6cb5447970fa20263d9edcc1234567a55303</param> </service> </servicedata> \ No newline at end of file ++++++ crmsh-4.3.1+20211206.e34e2fff.tar.bz2 -> crmsh-4.3.1+20211210.a149de51.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/crmsh/bootstrap.py new/crmsh-4.3.1+20211210.a149de51/crmsh/bootstrap.py --- old/crmsh-4.3.1+20211206.e34e2fff/crmsh/bootstrap.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/crmsh/bootstrap.py 2021-12-10 03:35:17.000000000 +0100 @@ -33,7 +33,7 @@ from . import tmpfiles from . import lock from . import userdir -from .constants import SSH_OPTION, QDEVICE_HELP_INFO, CRM_MON_ONE_SHOT, STONITH_TIMEOUT_DEFAULT +from .constants import SSH_OPTION, QDEVICE_HELP_INFO, STONITH_TIMEOUT_DEFAULT from . import ocfs2 from . import qdevice from . import log @@ -364,25 +364,14 @@ sleep(1) -def wait_for_cluster(message="Waiting for cluster", node_list=[]): - """ - Wait for local node or specific node(s) online - """ - # Sleep here since just after pacemaker.service started, crm_mon might not ready - sleep(2) - # Check if already online - if is_online(node_list): - return - - with logger_utils.status_long(message): +def wait_for_cluster(): + with logger_utils.status_long("Waiting for cluster"): while True: - if is_online(node_list): + _rc, out, _err = utils.get_stdout_stderr("crm_mon -1") + if is_online(out): break status_progress() sleep(2) - # Sleep here since when do_stop function calling wait_for_cluster, - # just after nodes online, if no sleep to wait, some nodes might hang with pending - sleep(2) def get_cluster_node_hostname(): @@ -390,7 +379,7 @@ Get the hostname of the cluster node """ peer_node = None - if _context and _context.cluster_node: + if _context.cluster_node: rc, out, err = utils.get_stdout_stderr("ssh {} {} crm_node --name".format(SSH_OPTION, _context.cluster_node)) if rc != 0: utils.fatal(err) @@ -398,18 +387,13 @@ return peer_node -def is_online(node_list=[]): +def is_online(crm_mon_txt): """ - Check whether local node is online, or specific node(s) online + Check whether local node is online Besides that, in join process, check whether init node is online """ - _list = node_list if node_list else [utils.this_node()] - crm_mon_txt = utils.get_stdout_or_raise_error(CRM_MON_ONE_SHOT, remote=_list[0]) - # Make sure all nodes online - # TODO how about the shutdown node? - for node in _list: - if not re.search(r'Online:\s+\[.*{}\s+.*'.format(node), crm_mon_txt): - return False + if not re.search("Online: .* {} ".format(utils.this_node()), crm_mon_txt): + return False # if peer_node is None, this is in the init process peer_node = get_cluster_node_hostname() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/crmsh/constants.py new/crmsh-4.3.1+20211210.a149de51/crmsh/constants.py --- old/crmsh-4.3.1+20211206.e34e2fff/crmsh/constants.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/crmsh/constants.py 2021-12-10 03:35:17.000000000 +0100 @@ -513,4 +513,5 @@ CRM_MON_ONE_SHOT = "crm_mon -1" STONITH_TIMEOUT_DEFAULT = 60 PCMK_DELAY_MAX = 30 +DLM_CONTROLD_RA = "ocf::pacemaker:controld" # vim:ts=4:sw=4:et: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/crmsh/log.py new/crmsh-4.3.1+20211210.a149de51/crmsh/log.py --- old/crmsh-4.3.1+20211206.e34e2fff/crmsh/log.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/crmsh/log.py 2021-12-10 03:35:17.000000000 +0100 @@ -297,6 +297,7 @@ try: yield except: + print("") raise else: self.status_done() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/crmsh/ui_cluster.py new/crmsh-4.3.1+20211210.a149de51/crmsh/ui_cluster.py --- old/crmsh-4.3.1+20211206.e34e2fff/crmsh/ui_cluster.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/crmsh/ui_cluster.py 2021-12-10 03:35:17.000000000 +0100 @@ -186,18 +186,20 @@ if not node_list: return - bootstrap.wait_for_cluster("Waiting for {} online".format(' '.join(node_list)), node_list) + if not utils.get_dc(timeout=5): + logger.error("No DC found currently, please wait if the cluster is still starting") + return False - # When dlm configured and quorum is lost, before stop cluster service, should set + # When dlm running and quorum is lost, before stop cluster service, should set # enable_quorum_fencing=0, enable_quorum_lockspace=0 for dlm config option - if utils.is_dlm_configured(node_list[0]) and not utils.is_quorate(node_list[0]): + if utils.is_dlm_running() and not utils.is_quorate(): logger.debug("Quorum is lost; Set enable_quorum_fencing=0 and enable_quorum_lockspace=0 for dlm") - utils.set_dlm_option(peer=node_list[0], enable_quorum_fencing=0, enable_quorum_lockspace=0) + utils.set_dlm_option(enable_quorum_fencing=0, enable_quorum_lockspace=0) # Stop pacemaker since it can make sure cluster has quorum until stop corosync utils.stop_service("pacemaker", node_list=node_list) # Then, stop qdevice if is active - if utils.service_is_active("corosync-qdevice.service", node_list[0]): + if utils.service_is_active("corosync-qdevice.service"): utils.stop_service("corosync-qdevice.service", node_list=node_list) # Last, stop corosync utils.stop_service("corosync", node_list=node_list) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/crmsh/utils.py new/crmsh-4.3.1+20211210.a149de51/crmsh/utils.py --- old/crmsh-4.3.1+20211206.e34e2fff/crmsh/utils.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/crmsh/utils.py 2021-12-10 03:35:17.000000000 +0100 @@ -836,9 +836,11 @@ return False -def get_dc(): +def get_dc(timeout=None): cmd = "crmadmin -D" - rc, s = get_stdout(add_sudo(cmd)) + if timeout: + cmd += " -t {}".format(timeout) + rc, s, _ = get_stdout_stderr(add_sudo(cmd)) if rc != 0: return None if not s.startswith("Designated"): @@ -2698,7 +2700,10 @@ """ Check if any RA is running """ - out = get_stdout_or_raise_error("crm_mon -1") + cmd = "crm_mon -1" + if ra_type: + cmd = "crm_mon -1rR" + out = get_stdout_or_raise_error(cmd) if ra_type: return re.search("{}.*Started".format(ra_type), out) is not None else: @@ -2936,38 +2941,45 @@ return re.search(r'Node\s+{}:\s+standby'.format(node), out) is not None -def get_dlm_option_dict(peer=None): +def get_dlm_option_dict(): """ Get dlm config option dictionary """ - out = get_stdout_or_raise_error("dlm_tool dump_config", remote=peer) + out = get_stdout_or_raise_error("dlm_tool dump_config") return dict(re.findall("(\w+)=(\w+)", out)) -def set_dlm_option(peer=None, **kargs): +def set_dlm_option(**kargs): """ Set dlm option """ - dlm_option_dict = get_dlm_option_dict(peer=peer) + dlm_option_dict = get_dlm_option_dict() for option, value in kargs.items(): if option not in dlm_option_dict: raise ValueError('"{}" is not dlm config option'.format(option)) if dlm_option_dict[option] != value: - get_stdout_or_raise_error('dlm_tool set_config "{}={}"'.format(option, value), remote=peer) + get_stdout_or_raise_error('dlm_tool set_config "{}={}"'.format(option, value)) + + +def is_dlm_running(): + """ + Check if dlm ra controld is running + """ + return has_resource_running(constants.DLM_CONTROLD_RA) -def is_dlm_configured(peer=None): +def is_dlm_configured(): """ Check if dlm configured """ - return has_resource_configured("ocf::pacemaker:controld", peer=peer) + return has_resource_configured(constants.DLM_CONTROLD_RA) -def is_quorate(peer=None): +def is_quorate(): """ Check if cluster is quorated """ - out = get_stdout_or_raise_error("corosync-quorumtool -s", remote=peer, success_val_list=[0, 2]) + out = get_stdout_or_raise_error("corosync-quorumtool -s", success_val_list=[0, 2]) res = re.search(r'Quorate:\s+(.*)', out) if res: return res.group(1) == "Yes" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/test/features/bootstrap_init_join_remove.feature new/crmsh-4.3.1+20211210.a149de51/test/features/bootstrap_init_join_remove.feature --- old/crmsh-4.3.1+20211206.e34e2fff/test/features/bootstrap_init_join_remove.feature 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/test/features/bootstrap_init_join_remove.feature 2021-12-10 03:35:17.000000000 +0100 @@ -26,12 +26,14 @@ When Run "crm node online --all" on "hanode1" Then Node "hanode1" is online And Node "hanode2" is online + When Wait for DC When Run "crm cluster stop --all" on "hanode1" Then Cluster service is "stopped" on "hanode1" And Cluster service is "stopped" on "hanode2" When Run "crm cluster start --all" on "hanode1" Then Cluster service is "started" on "hanode1" And Cluster service is "started" on "hanode2" + When Wait for DC When Run "crm cluster stop hanode2" on "hanode1" Then Cluster service is "stopped" on "hanode2" When Run "crm cluster start hanode2" on "hanode1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/test/features/environment.py new/crmsh-4.3.1+20211210.a149de51/test/features/environment.py --- old/crmsh-4.3.1+20211206.e34e2fff/test/features/environment.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/test/features/environment.py 2021-12-10 03:35:17.000000000 +0100 @@ -1,6 +1,7 @@ import logging import re from crmsh import utils, parallax +import time def get_online_nodes(): @@ -25,8 +26,8 @@ online_nodes = get_online_nodes() if online_nodes: resource_cleanup() - try: - parallax.parallax_call(online_nodes, 'crm cluster stop') - except ValueError as err: - context.logger.error("{}\n".format(err)) - context.failed = True + while True: + time.sleep(1) + if utils.get_dc(): + break + utils.get_stdout_or_raise_error("crm cluster stop --all") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/test/features/steps/step_implementation.py new/crmsh-4.3.1+20211210.a149de51/test/features/steps/step_implementation.py --- old/crmsh-4.3.1+20211206.e34e2fff/test/features/steps/step_implementation.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/test/features/steps/step_implementation.py 2021-12-10 03:35:17.000000000 +0100 @@ -378,3 +378,11 @@ data = yaml.load(f, Loader=yaml.SafeLoader) sec_name, key = path.split(':') assert str(data[sec_name][key]) == str(value) + + +@when('Wait for DC') +def step_impl(context): + while True: + time.sleep(1) + if crmutils.get_dc(): + break diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/test/unittests/test_bootstrap.py new/crmsh-4.3.1+20211210.a149de51/test/unittests/test_bootstrap.py --- old/crmsh-4.3.1+20211206.e34e2fff/test/unittests/test_bootstrap.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/test/unittests/test_bootstrap.py 2021-12-10 03:35:17.000000000 +0100 @@ -608,37 +608,31 @@ mock_error.assert_called_once_with("error") @mock.patch('crmsh.utils.this_node') + @mock.patch('re.search') @mock.patch('crmsh.bootstrap.get_cluster_node_hostname') - @mock.patch('crmsh.utils.get_stdout_or_raise_error') - def test_is_online_local_offline(self, mock_run, mock_get_peer, mock_this_node): - mock_run.return_value = """ -Node List: - * Online: [ node1 node2 ] - """ - mock_this_node.return_value = "node3" + def test_is_online_local_offline(self, mock_get_peer, mock_search, mock_this_node): + mock_this_node.return_value = "node1" + mock_search.return_value = None - assert bootstrap.is_online() is False + assert bootstrap.is_online("text") is False mock_this_node.assert_called_once_with() mock_get_peer.assert_not_called() - mock_run.assert_called_once_with(constants.CRM_MON_ONE_SHOT, remote="node3") + mock_search.assert_called_once_with("Online: .* node1 ", "text") @mock.patch('crmsh.utils.this_node') + @mock.patch('re.search') @mock.patch('crmsh.bootstrap.get_cluster_node_hostname') - @mock.patch('crmsh.utils.get_stdout_or_raise_error') - def test_is_online_on_init_node(self, mock_run, mock_get_peer, mock_this_node): - mock_run.return_value = """ -Node List: - * Online: [ node1 node2 ] - """ + def test_is_online_on_init_node(self, mock_get_peer, mock_search, mock_this_node): + mock_search.return_value = mock.Mock() mock_this_node.return_value = "node1" mock_get_peer.return_value = None - assert bootstrap.is_online() is True + assert bootstrap.is_online("text") is True mock_this_node.assert_called_once_with() mock_get_peer.assert_called_once_with() - mock_run.assert_called_once_with(constants.CRM_MON_ONE_SHOT, remote="node1") + mock_search.assert_called_once_with("Online: .* node1 ", "text") @mock.patch('crmsh.utils.fatal') @mock.patch('crmsh.utils.stop_service') @@ -646,27 +640,25 @@ @mock.patch('crmsh.corosync.conf') @mock.patch('shutil.copy') @mock.patch('crmsh.utils.this_node') + @mock.patch('re.search') @mock.patch('crmsh.bootstrap.get_cluster_node_hostname') - @mock.patch('crmsh.utils.get_stdout_or_raise_error') - def test_is_online_peer_offline(self, mock_run, mock_get_peer, mock_this_node, + def test_is_online_peer_offline(self, mock_get_peer, mock_search, mock_this_node, mock_copy, mock_corosync_conf, mock_csync2, mock_stop_service, mock_error): - mock_run.return_value = """ -Node List: - * Online: [ node1 node2 ] - """ bootstrap.COROSYNC_CONF_ORIG = "/tmp/crmsh_tmpfile" + mock_search.side_effect = [ mock.Mock(), None ] mock_this_node.return_value = "node2" - mock_get_peer.return_value = "node3" - mock_corosync_conf.side_effect = [ "/etc/corosync/corosync.conf", + mock_get_peer.return_value = "node1" + mock_corosync_conf.side_effect = [ "/etc/corosync/corosync.conf", "/etc/corosync/corosync.conf"] - mock_error.side_effect = ValueError - with self.assertRaises(ValueError): - bootstrap.is_online() + bootstrap.is_online("text") - mock_run.assert_called_once_with(constants.CRM_MON_ONE_SHOT, remote="node2") mock_this_node.assert_called_once_with() mock_get_peer.assert_called_once_with() + mock_search.assert_has_calls([ + mock.call("Online: .* node2 ", "text"), + mock.call("Online: .* node1 ", "text") + ]) mock_corosync_conf.assert_has_calls([ mock.call(), mock.call() @@ -674,7 +666,7 @@ mock_copy.assert_called_once_with(bootstrap.COROSYNC_CONF_ORIG, "/etc/corosync/corosync.conf") mock_csync2.assert_called_once_with("/etc/corosync/corosync.conf") mock_stop_service.assert_called_once_with("corosync") - mock_error.assert_called_once_with("Cannot see peer node \"node3\", please check the communication IP") + mock_error.assert_called_once_with("Cannot see peer node \"node1\", please check the communication IP") @mock.patch('crmsh.utils.fatal') @mock.patch('crmsh.utils.stop_service') @@ -682,21 +674,22 @@ @mock.patch('crmsh.corosync.conf') @mock.patch('shutil.copy') @mock.patch('crmsh.utils.this_node') + @mock.patch('re.search') @mock.patch('crmsh.bootstrap.get_cluster_node_hostname') - @mock.patch('crmsh.utils.get_stdout_or_raise_error') - def test_is_online_both_online(self, mock_run, mock_get_peer, mock_this_node, + def test_is_online_both_online(self, mock_get_peer, mock_search, mock_this_node, mock_copy, mock_corosync_conf, mock_csync2, mock_stop_service, mock_error): - mock_run.return_value = """ -Node List: - * Online: [ node1 node2 ] - """ + mock_search.side_effect = [ mock.Mock(), mock.Mock() ] mock_this_node.return_value = "node2" mock_get_peer.return_value = "node1" - assert bootstrap.is_online() is True + assert bootstrap.is_online("text") is True mock_this_node.assert_called_once_with() mock_get_peer.assert_called_once_with() + mock_search.assert_has_calls([ + mock.call("Online: .* node2 ", "text"), + mock.call("Online: .* node1 ", "text") + ]) mock_corosync_conf.assert_not_called() mock_copy.assert_not_called() mock_csync2.assert_not_called() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/test/unittests/test_ui_cluster.py new/crmsh-4.3.1+20211210.a149de51/test/unittests/test_ui_cluster.py --- old/crmsh-4.3.1+20211206.e34e2fff/test/unittests/test_ui_cluster.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/test/unittests/test_ui_cluster.py 2021-12-10 03:35:17.000000000 +0100 @@ -97,22 +97,23 @@ @mock.patch('crmsh.utils.stop_service') @mock.patch('crmsh.utils.set_dlm_option') @mock.patch('crmsh.utils.is_quorate') - @mock.patch('crmsh.utils.is_dlm_configured') - @mock.patch('crmsh.bootstrap.wait_for_cluster') + @mock.patch('crmsh.utils.is_dlm_running') + @mock.patch('crmsh.utils.get_dc') @mock.patch('crmsh.utils.service_is_active') @mock.patch('crmsh.ui_cluster.parse_option_for_nodes') - def test_do_stop(self, mock_parse_nodes, mock_active, mock_wait, mock_dlm_configured, mock_is_quorate, mock_set_dlm, mock_stop, mock_info, mock_debug): + def test_do_stop(self, mock_parse_nodes, mock_active, mock_get_dc, mock_dlm_running, mock_is_quorate, mock_set_dlm, mock_stop, mock_info, mock_debug): context_inst = mock.Mock() mock_parse_nodes.return_value = ["node1"] mock_active.side_effect = [True, True] - mock_dlm_configured.return_value = True + mock_dlm_running.return_value = True mock_is_quorate.return_value = False + mock_get_dc.return_value = "node1" self.ui_cluster_inst.do_stop(context_inst, "node1") mock_active.assert_has_calls([ mock.call("corosync.service", remote_addr="node1"), - mock.call("corosync-qdevice.service", "node1") + mock.call("corosync-qdevice.service") ]) mock_stop.assert_has_calls([ mock.call("pacemaker", node_list=["node1"]), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.3.1+20211206.e34e2fff/test/unittests/test_utils.py new/crmsh-4.3.1+20211210.a149de51/test/unittests/test_utils.py --- old/crmsh-4.3.1+20211206.e34e2fff/test/unittests/test_utils.py 2021-12-06 15:28:27.000000000 +0100 +++ new/crmsh-4.3.1+20211210.a149de51/test/unittests/test_utils.py 2021-12-10 03:35:17.000000000 +0100 @@ -1500,7 +1500,7 @@ "key1": "value1", "key2": "value2" } - mock_run.assert_called_once_with("dlm_tool dump_config", remote=None) + mock_run.assert_called_once_with("dlm_tool dump_config") @mock.patch('crmsh.utils.get_dlm_option_dict') @@ -1522,14 +1522,14 @@ "key2": "value2" } utils.set_dlm_option(key2="test") - mock_run.assert_called_once_with('dlm_tool set_config "key2=test"', remote=None) + mock_run.assert_called_once_with('dlm_tool set_config "key2=test"') @mock.patch('crmsh.utils.has_resource_configured') def test_is_dlm_configured(mock_configured): mock_configured.return_value = True assert utils.is_dlm_configured() is True - mock_configured.assert_called_once_with("ocf::pacemaker:controld", peer=None) + mock_configured.assert_called_once_with("ocf::pacemaker:controld") @mock.patch('crmsh.utils.get_stdout_or_raise_error') @@ -1538,7 +1538,7 @@ with pytest.raises(ValueError) as err: utils.is_quorate() assert str(err.value) == "Failed to get quorate status from corosync-quorumtool" - mock_run.assert_called_once_with("corosync-quorumtool -s", remote=None, success_val_list=[0, 2]) + mock_run.assert_called_once_with("corosync-quorumtool -s", success_val_list=[0, 2]) @mock.patch('crmsh.utils.get_stdout_or_raise_error') @@ -1548,7 +1548,7 @@ Quorate: Yes """ assert utils.is_quorate() is True - mock_run.assert_called_once_with("corosync-quorumtool -s", remote=None, success_val_list=[0, 2]) + mock_run.assert_called_once_with("corosync-quorumtool -s", success_val_list=[0, 2]) @mock.patch('crmsh.utils.etree.fromstring')