Пример #1
0
def node_pacemaker_status(lib, argv, dummy_modifiers):
    """
    Internal pcs-pcsd command
    """
    print(json.dumps(
        lib_pacemaker.get_local_node_status(utils.cmd_runner())
    ))
Пример #2
0
    def test_success(self):
        node_id = "id_1"
        node_name = "name_1"
        node_status = self.fixture_get_node_status(node_name, node_id)
        expected_status = dict(node_status, offline=False)
        self.fixture_add_node_status(
            self.fixture_get_node_status("name_2", "id_2"))
        self.fixture_add_node_status(node_status)
        self.fixture_add_node_status(
            self.fixture_get_node_status("name_3", "id_3"))

        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        call_list = [
            mock.call(self.crm_mon_cmd()),
            mock.call([self.path("crm_node"), "--cluster-id"]),
            mock.call(
                [self.path("crm_node"), "--name-for-id={0}".format(node_id)]),
        ]
        return_value_list = [(str(self.status), "", 0), (node_id, "", 0),
                             (node_name, "", 0)]
        mock_runner.run.side_effect = return_value_list

        real_status = lib.get_local_node_status(mock_runner)

        self.assertEqual(len(return_value_list), len(call_list))
        self.assertEqual(len(return_value_list), mock_runner.run.call_count)
        mock_runner.run.assert_has_calls(call_list)
        self.assertEqual(expected_status, real_status)
Пример #3
0
    def test_error_3(self):
        node_id = "id_1"
        node_name = "name_1"
        node_status = self.fixture_get_node_status(node_name, node_id)
        self.fixture_add_node_status(node_status)

        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        call_list = [
            mock.call(self.crm_mon_cmd()),
            mock.call([self.path("crm_node"), "--cluster-id"]),
            mock.call(
                [self.path("crm_node"), "--name-for-id={0}".format(node_id)]
            ),
        ]
        return_value_list = [
            (str(self.status), "", 0),
            (node_id, "", 0),
            ("(null)", "", 0),
        ]
        mock_runner.run.side_effect = return_value_list

        assert_raise_library_error(
            lambda: lib.get_local_node_status(mock_runner),
            (
                Severity.ERROR,
                report_codes.PACEMAKER_LOCAL_NODE_NAME_NOT_FOUND,
                {"reason": "node name is null"}
            )
        )

        self.assertEqual(len(return_value_list), len(call_list))
        self.assertEqual(len(return_value_list), mock_runner.run.call_count)
        mock_runner.run.assert_has_calls(call_list)
Пример #4
0
    def test_error_3(self):
        node_id = "id_1"
        node_name = "name_1"
        node_status = self.fixture_get_node_status(node_name, node_id)
        self.fixture_add_node_status(node_status)

        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        call_list = [
            mock.call(self.crm_mon_cmd()),
            mock.call([self.path("crm_node"), "--cluster-id"]),
            mock.call(
                [self.path("crm_node"), "--name-for-id={0}".format(node_id)]),
        ]
        return_value_list = [
            (str(self.status), "", 0),
            (node_id, "", 0),
            ("(null)", "", 0),
        ]
        mock_runner.run.side_effect = return_value_list

        assert_raise_library_error(
            lambda: lib.get_local_node_status(mock_runner),
            (Severity.ERROR, report_codes.PACEMAKER_LOCAL_NODE_NAME_NOT_FOUND,
             {
                 "reason": "node name is null"
             }))

        self.assertEqual(len(return_value_list), len(call_list))
        self.assertEqual(len(return_value_list), mock_runner.run.call_count)
        mock_runner.run.assert_has_calls(call_list)
Пример #5
0
    def test_success(self):
        node_id = "id_1"
        node_name = "name_1"
        node_status = self.fixture_get_node_status(node_name, node_id)
        expected_status = dict(node_status, offline=False)
        self.fixture_add_node_status(
            self.fixture_get_node_status("name_2", "id_2")
        )
        self.fixture_add_node_status(node_status)
        self.fixture_add_node_status(
            self.fixture_get_node_status("name_3", "id_3")
        )

        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        call_list = [
            mock.call(self.crm_mon_cmd()),
            mock.call([self.path("crm_node"), "--cluster-id"]),
            mock.call(
                [self.path("crm_node"), "--name-for-id={0}".format(node_id)]
            ),
        ]
        return_value_list = [
            (str(self.status), "", 0),
            (node_id, "", 0),
            (node_name, "", 0)
        ]
        mock_runner.run.side_effect = return_value_list

        real_status = lib.get_local_node_status(mock_runner)

        self.assertEqual(len(return_value_list), len(call_list))
        self.assertEqual(len(return_value_list), mock_runner.run.call_count)
        mock_runner.run.assert_has_calls(call_list)
        self.assertEqual(expected_status, real_status)
Пример #6
0
    def test_offline(self):
        (self.config.runner.pcmk.load_state(
            stderr="error: Could not connect to cluster (is it running?)",
            returncode=102))

        env = self.env_assist.get_env()
        real_status = lib.get_local_node_status(env.cmd_runner())
        self.assertEqual(dict(offline=True), real_status)
Пример #7
0
    def test_offline(self):
        expected_stdout = "some info"
        expected_stderr = "some error"
        expected_retval = 1
        mock_runner = get_runner(expected_stdout, expected_stderr,
                                 expected_retval)

        self.assertEqual({"offline": True},
                         lib.get_local_node_status(mock_runner))
        mock_runner.run.assert_called_once_with(self.crm_mon_cmd())
Пример #8
0
def node_pacemaker_status(lib, argv, modifiers):
    """
    Internal pcs-pcsd command
    """
    del lib
    del argv
    del modifiers
    print(json.dumps(
        lib_pacemaker.get_local_node_status(utils.cmd_runner())
    ))
Пример #9
0
    def test_invalid_status(self):
        (self.config.runner.pcmk.load_state(stdout="invalid xml"))

        env = self.env_assist.get_env()
        self.env_assist.assert_raise_library_error(
            lambda: lib.get_local_node_status(env.cmd_runner()), [
                fixture.error(report_codes.BAD_CLUSTER_STATE_FORMAT,
                              force_code=None)
            ],
            expected_in_processor=False)
Пример #10
0
    def test_offline(self):
        expected_stdout = "some info"
        expected_stderr = "some error"
        expected_retval = 1
        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        mock_runner.run.return_value = (expected_stdout, expected_stderr,
                                        expected_retval)

        self.assertEqual({"offline": True},
                         lib.get_local_node_status(mock_runner))
        mock_runner.run.assert_called_once_with(self.crm_mon_cmd())
Пример #11
0
    def test_success(self):
        (self.config.runner.pcmk.load_state(
            nodes=[fixture.state_node(i, f"name_{i}")
                   for i in range(1, 4)]).runner.pcmk.local_node_name(
                       node_name="name_2"))

        env = self.env_assist.get_env()
        real_status = lib.get_local_node_status(env.cmd_runner())
        self.assertEqual(
            dict(offline=False, **fixture.state_node("2", "name_2")),
            real_status)
Пример #12
0
    def test_invalid_status(self):
        expected_stdout = "invalid xml"
        expected_stderr = ""
        expected_retval = 0
        mock_runner = get_runner(expected_stdout, expected_stderr,
                                 expected_retval)

        assert_raise_library_error(
            lambda: lib.get_local_node_status(mock_runner),
            (Severity.ERROR, report_codes.BAD_CLUSTER_STATE_FORMAT, {}))
        mock_runner.run.assert_called_once_with(self.crm_mon_cmd())
Пример #13
0
    def test_offline(self):
        (self.config
            .runner.pcmk.load_state(
                stderr="error: Could not connect to cluster (is it running?)",
                returncode=102
            )
        )

        env = self.env_assist.get_env()
        real_status = lib.get_local_node_status(env.cmd_runner())
        self.assertEqual(dict(offline=True), real_status)
Пример #14
0
def wait_for_local_node_started(stop_at, interval):
    try:
        while True:
            time.sleep(interval)
            node_status = lib_pacemaker.get_local_node_status(
                utils.cmd_runner())
            if is_node_fully_started(node_status):
                return 0, "Started"
            if datetime.datetime.now() > stop_at:
                return 1, "Waiting timeout"
    except LibraryError as e:
        return 1, "Unable to get node status: {0}".format("\n".join(
            [build_report_message(item) for item in e.args]))
Пример #15
0
    def test_offline_node_name(self):
        self.config.runner.pcmk.load_state(
            nodes=[fixture.state_node(i, f"name_{i}") for i in range(1, 4)])
        self.config.runner.pcmk.local_node_name(
            stderr=(
                "error: Could not connect to controller: Transport endpoint is "
                "not connected\n"),
            returncode=_EXITCODE_NOT_CONNECTED,
        )

        env = self.env_assist.get_env()
        real_status = lib.get_local_node_status(env.cmd_runner())
        self.assertEqual(dict(offline=True), real_status)
Пример #16
0
    def test_success(self):
        (self.config
            .runner.pcmk.load_state(nodes=[
                fixture.state_node(i, f"name_{i}") for i in range(1, 4)
            ])
            .runner.pcmk.local_node_name(node_name="name_2")
        )

        env = self.env_assist.get_env()
        real_status = lib.get_local_node_status(env.cmd_runner())
        self.assertEqual(
            dict(offline=False, **fixture.state_node("2", "name_2")),
            real_status
        )
Пример #17
0
    def test_error_getting_node_name(self):
        (self.config.runner.pcmk.load_state(
            nodes=[fixture.state_node(i, f"name_{i}")
                   for i in range(1, 4)]).runner.pcmk.local_node_name(
                       stdout="some info", stderr="some error", returncode=1))

        env = self.env_assist.get_env()
        self.env_assist.assert_raise_library_error(
            lambda: lib.get_local_node_status(env.cmd_runner()), [
                fixture.error(report_codes.PACEMAKER_LOCAL_NODE_NAME_NOT_FOUND,
                              force_code=None,
                              reason="some error\nsome info")
            ],
            expected_in_processor=False)
Пример #18
0
    def test_node_not_in_status(self):
        (self.config.runner.pcmk.load_state(
            nodes=[fixture.state_node(i, f"name_{i}")
                   for i in range(1, 4)]).runner.pcmk.local_node_name(
                       node_name="name_X"))

        env = self.env_assist.get_env()
        self.env_assist.assert_raise_library_error(
            lambda: lib.get_local_node_status(env.cmd_runner()), [
                fixture.error(report_codes.NODE_NOT_FOUND,
                              force_code=None,
                              node="name_X",
                              searched_types=[])
            ],
            expected_in_processor=False)
Пример #19
0
    def test_offline(self):
        expected_stdout = "some info"
        expected_stderr = "some error"
        expected_retval = 1
        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        mock_runner.run.return_value = (
            expected_stdout,
            expected_stderr,
            expected_retval
        )

        self.assertEqual(
            {"offline": True},
            lib.get_local_node_status(mock_runner)
        )
        mock_runner.run.assert_called_once_with(self.crm_mon_cmd())
Пример #20
0
    def test_invalid_status(self):
        (self.config
            .runner.pcmk.load_state(stdout="invalid xml")
        )

        env = self.env_assist.get_env()
        self.env_assist.assert_raise_library_error(
            lambda: lib.get_local_node_status(env.cmd_runner()),
            [
                fixture.error(
                    report_codes.BAD_CLUSTER_STATE_FORMAT,
                    force_code=None
                )
            ],
            expected_in_processor=False
        )
Пример #21
0
    def test_invalid_status(self):
        expected_stdout = "invalid xml"
        expected_stderr = ""
        expected_retval = 0
        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        mock_runner.run.return_value = (
            expected_stdout,
            expected_stderr,
            expected_retval
        )

        assert_raise_library_error(
            lambda: lib.get_local_node_status(mock_runner),
            (
                Severity.ERROR,
                report_codes.BAD_CLUSTER_STATE_FORMAT,
                {}
            )
        )
        mock_runner.run.assert_called_once_with(self.crm_mon_cmd())
Пример #22
0
    def test_node_not_in_status(self):
        (self.config
            .runner.pcmk.load_state(nodes=[
                fixture.state_node(i, f"name_{i}") for i in range(1, 4)
            ])
            .runner.pcmk.local_node_name(node_name="name_X")
        )

        env = self.env_assist.get_env()
        self.env_assist.assert_raise_library_error(
            lambda: lib.get_local_node_status(env.cmd_runner()),
            [
                fixture.error(
                    report_codes.NODE_NOT_FOUND,
                    force_code=None,
                    node="name_X",
                    searched_types=[]
                )
            ],
            expected_in_processor=False
        )
Пример #23
0
    def test_error_getting_node_name(self):
        (self.config
            .runner.pcmk.load_state(nodes=[
                fixture.state_node(i, f"name_{i}") for i in range(1, 4)
            ])
            .runner.pcmk.local_node_name(
                stdout="some info", stderr="some error", returncode=1
            )
        )

        env = self.env_assist.get_env()
        self.env_assist.assert_raise_library_error(
            lambda: lib.get_local_node_status(env.cmd_runner()),
            [
                fixture.error(
                    report_codes.PACEMAKER_LOCAL_NODE_NAME_NOT_FOUND,
                    force_code=None,
                    reason="some error\nsome info"
                )
            ],
            expected_in_processor=False
        )
Пример #24
0
def node_pacemaker_status(lib, argv, modifiers):
    print(json.dumps(lib_pacemaker.get_local_node_status(utils.cmd_runner())))
Пример #25
0
def node_pacemaker_status(lib, argv, modifiers):
    print(json.dumps(
        lib_pacemaker.get_local_node_status(utils.cmd_runner())
    ))