Пример #1
0
def find_node_list(tree):
    """
    Return list of remote nodes from the specified element tree

    etree.Element tree -- an element to search remote nodes in
    """
    node_list = [
        PacemakerNode(
            nvpair.getparent().getparent().attrib["id"],
            nvpair.attrib["value"]
        )
        for nvpair in tree.xpath(
            ".//primitive[{is_remote}]/{has_server}"
            .format(
                is_remote=_IS_REMOTE_AGENT_XPATH_SNIPPET,
                has_server=_HAS_SERVER_XPATH_SNIPPET,
            )
        )
    ]

    node_list.extend([
        PacemakerNode(primitive.attrib["id"], primitive.attrib["id"])
        for primitive in tree.xpath(
            ".//primitive[{is_remote} and not({has_server})]"
            .format(
                is_remote=_IS_REMOTE_AGENT_XPATH_SNIPPET,
                has_server=_HAS_SERVER_XPATH_SNIPPET,
            )
        )
    ])

    return node_list
Пример #2
0
 def test_find_multiple_nodes(self):
     self.assert_nodes_equals(
         """
         <resources>
             <primitive class="ocf" id="R1"
                 provider="pacemaker" type="remote"
             >
                 <instance_attributes>
                     <nvpair name="server" value="H1"/>
                 </instance_attributes>
             </primitive>
             <primitive class="ocf" id="R2"
                 provider="pacemaker" type="remote"
             >
                 <instance_attributes id="first-attribs">
                     <nvpair name="server" value="H2"/>
                 </instance_attributes>
             </primitive>
         </resources>
         """,
         [
             PacemakerNode("R1", "H1"),
             PacemakerNode("R2", "H2"),
         ],
     )
Пример #3
0
def find_node_list(tree):
    """
    Return list of guest nodes from the specified element tree

    etree.Element tree -- an element to search guest nodes in
    """
    node_list = []
    for meta_attrs in tree.xpath("""
            .//primitive
                /meta_attributes[
                    nvpair[
                        @name="remote-node"
                        and
                        string-length(@value) > 0
                    ]
                ]
        """):
        host = None
        name = None
        for nvpair in meta_attrs:
            if nvpair.attrib.get("name", "") == "remote-addr":
                host = nvpair.attrib["value"]
            if nvpair.attrib.get("name", "") == "remote-node":
                name = nvpair.attrib["value"]
                if host is None:
                    host = name
        if name:
            # The name is never empty as we only loop through elements with
            # non-empty names. It's just we loop through nvpairs instead of
            # reading the name directly.
            node_list.append(PacemakerNode(name, host))
    return node_list
Пример #4
0
 def test_get_multiple_nodes(self):
     self.assert_nodes_equals(
         """
         <resources>
             <primitive>
                 <meta_attributes>
                     <nvpair name="remote-node" value="G1"/>
                     <nvpair name="remote-addr" value="G1addr"/>
                 </meta_attributes>
             </primitive>
             <primitive>
                 <meta_attributes>
                     <nvpair name="remote-node" value="G2"/>
                 </meta_attributes>
             </primitive>
         </resources>
         """,
         [PacemakerNode("G1", "G1addr"), PacemakerNode("G2", "G2"),],
     )
Пример #5
0
 def test_find_nodes_without_server(self):
     self.assert_nodes_equals(
         """
         <resources>
             <primitive class="ocf" id="R1"
                 provider="pacemaker" type="remote"
             >
             </primitive>
         </resources>
         """, [
             PacemakerNode("R1", "R1"),
         ])
Пример #6
0
 def test_find_nodes_with_empty_server(self):
     #it does not work, but the node "R1" is visible as remote node in the
     #status
     self.assert_nodes_equals(
         """
         <resources>
             <primitive class="ocf" id="R1"
                 provider="pacemaker" type="remote"
             >
                 <instance_attributes id="first-attribs">
                     <nvpair name="server" value=""/>
                 </instance_attributes>
             </primitive>
         </resources>
         """, [
             PacemakerNode("R1", "R1"),
         ])