Example #1
0
    def setUp(self):
        self.agent = lib_ra.StonithAgent(
            mock.MagicMock(spec_set=CommandRunner), "fence_dummy")
        self.metadata = etree.XML("""
            <resource-agent>
                <parameters>
                    <parameter name="test_param" required="0">
                        <longdesc>Long description</longdesc>
                        <shortdesc>short description</shortdesc>
                        <content type="string" default="default_value" />
                    </parameter>
                    <parameter name="required_param" required="1">
                        <content type="boolean" />
                    </parameter>
                    <parameter name="action">
                        <content type="string" default="reboot" />
                        <shortdesc>Fencing action</shortdesc>
                    </parameter>
                </parameters>
            </resource-agent>
        """)
        patcher = mock.patch.object(lib_ra.StonithAgent, "_get_metadata")
        self.addCleanup(patcher.stop)
        self.get_metadata = patcher.start()
        self.get_metadata.return_value = self.metadata

        patcher_stonithd = mock.patch.object(lib_ra.StonithdMetadata,
                                             "_get_metadata")
        self.addCleanup(patcher_stonithd.stop)
        self.get_stonithd_metadata = patcher_stonithd.start()
        self.get_stonithd_metadata.return_value = etree.XML("""
            <resource-agent>
                <parameters />
            </resource-agent>
        """)
Example #2
0
 def setUp(self):
     self.mock_runner = mock.MagicMock(spec_set=CommandRunner)
     self.agent_name = "fence_dummy"
     self.agent = lib_ra.StonithAgent(
         self.mock_runner,
         self.agent_name
     )
Example #3
0
def get_fence_agent_info(lib, argv, modifiers):
    """
    Options: no options
    """
    del lib
    modifiers.ensure_only_supported()
    if len(argv) != 1:
        utils.err("One parameter expected")

    agent = argv[0]
    if not agent.startswith("stonith:"):
        utils.err("Invalid fence agent name")

    runner = utils.cmd_runner()

    try:
        metadata = lib_ra.StonithAgent(runner, agent[len("stonith:"):])
        info = metadata.get_full_info()
        info["name"] = "stonith:{0}".format(info["name"])
        print(json.dumps(info))
    except lib_ra.ResourceAgentError as e:
        process_library_reports(
            [lib_ra.resource_agent_error_to_report_item(e)])
    except LibraryError as e:
        process_library_reports(e.args)
Example #4
0
    def setUp(self):
        self.agent = lib_ra.StonithAgent(
            mock.MagicMock(spec_set=CommandRunner), "fence_dummy")
        self.metadata = etree.XML("""
            <resource-agent>
                <parameters>
                    <parameter name="test_param" required="0">
                        <longdesc>Long description</longdesc>
                        <shortdesc>short description</shortdesc>
                        <content type="string" default="default_value" />
                    </parameter>
                    <parameter name="required_param" required="1">
                        <content type="boolean" />
                    </parameter>
                    <parameter name="action">
                        <content type="string" default="reboot" />
                        <shortdesc>Fencing action</shortdesc>
                    </parameter>
                </parameters>
            </resource-agent>
        """)
        patcher = mock.patch.object(lib_ra.StonithAgent, "_get_metadata")
        self.addCleanup(patcher.stop)
        self.get_metadata = patcher.start()
        self.get_metadata.return_value = self.metadata

        patcher_fenced = mock.patch.object(lib_ra.FencedMetadata,
                                           "_get_metadata")
        self.addCleanup(patcher_fenced.stop)
        self.get_fenced_metadata = patcher_fenced.start()
        self.get_fenced_metadata.return_value = etree.XML("""
            <resource-agent>
                <parameters />
            </resource-agent>
        """)
        self.report_error = (
            severity.ERROR,
            report_codes.DEPRECATED_OPTION,
            {
                "option_name": "action",
                "option_type": "stonith",
                "replaced_by": ["pcmk_off_action", "pcmk_reboot_action"],
            },
            report_codes.FORCE_OPTIONS,
        )
        self.report_warning = (
            severity.WARNING,
            report_codes.DEPRECATED_OPTION,
            {
                "option_name": "action",
                "option_type": "stonith",
                "replaced_by": ["pcmk_off_action", "pcmk_reboot_action"],
            },
            None,
        )
Example #5
0
def describe_agent(lib_env, agent_name):
    """
    Get agent's description (metadata) in a structure
    string agent_name name of the agent (not containing "stonith:" prefix)
    """
    try:
        metadata = resource_agent.StonithAgent(lib_env.cmd_runner(),
                                               agent_name)
        return metadata.get_full_info()
    except resource_agent.ResourceAgentError as e:
        raise LibraryError(
            resource_agent.resource_agent_error_to_report_item(e))
Example #6
0
def get_fence_agent_info(argv):
    # This is used only by pcsd, will be removed in new architecture
    if len(argv) != 1:
        utils.err("One parameter expected")

    agent = argv[0]
    if not agent.startswith("stonith:"):
        utils.err("Invalid fence agent name")

    runner = utils.cmd_runner()

    try:
        metadata = lib_ra.StonithAgent(runner, agent[len("stonith:"):])
        info = metadata.get_full_info()
        info["name"] = "stonith:{0}".format(info["name"])
        print(json.dumps(info))
    except lib_ra.ResourceAgentError as e:
        utils.process_library_reports(
            [lib_ra.resource_agent_error_to_report_item(e)])
    except LibraryError as e:
        utils.process_library_reports(e.args)
Example #7
0
def stonith_create(argv):
    if len(argv) < 2:
        usage.stonith(["create"])
        sys.exit(1)

    stonith_id = argv.pop(0)
    stonith_type = argv.pop(0)
    st_values, op_values, meta_values = resource.parse_resource_options(
        argv, with_clone=False
    )

    try:
        metadata = lib_ra.StonithAgent(
            utils.cmd_runner(),
            stonith_type
        )
        if metadata.get_provides_unfencing():
            meta_values = [
                meta for meta in meta_values if not meta.startswith("provides=")
            ]
            meta_values.append("provides=unfencing")
    except lib_ra.ResourceAgentError as e:
        forced = utils.get_modificators().get("force", False)
        if forced:
            severity = ReportItemSeverity.WARNING
        else:
            severity = ReportItemSeverity.ERROR
        utils.process_library_reports([
            lib_ra.resource_agent_error_to_report_item(
                e, severity, not forced
            )
        ])
    except LibraryError as e:
        utils.process_library_reports(e.args)

    resource.resource_create(
        stonith_id, "stonith:" + stonith_type, st_values, op_values, meta_values,
        group=utils.pcs_options.get("--group", None)
    )
Example #8
0
 def setUp(self):
     self.agent = lib_ra.StonithAgent(
         mock.MagicMock(spec_set=CommandRunner), "fence_dummy")
Example #9
0
    def test_success(self):
        mock_runner = mock.MagicMock(spec_set=CommandRunner)
        agent_name = "fence_dummy"
        agent = lib_ra.StonithAgent(mock_runner, agent_name)

        self.assertEqual(agent.get_name(), agent_name)