def test_unset_all_guest_attributes(self):
     resource_element = etree.fromstring(
         """
         <primitive id="A">
             <meta_attributes id="B">
                 <nvpair id="C" name="remote-node" value="node1"/>
                 <nvpair id="D" name="remote-port" value="2222"/>
                 <nvpair id="E" name="remote-addr" value="node3"/>
                 <nvpair id="F" name="remote-connect-timeout" value="10"/>
                 <nvpair id="G" name="a" value="b"/>
             </meta_attributes>
         </primitive>
     """
     )
     guest_node.unset_guest(resource_element)
     assert_xml_equal(
         etree.tostring(resource_element).decode(),
         """
             <primitive id="A">
                 <meta_attributes id="B">
                     <nvpair id="G" name="a" value="b"/>
                 </meta_attributes>
             </primitive>
         """,
     )
Beispiel #2
0
def node_remove_guest(
    env: LibraryEnvironment,
    node_identifier,
    skip_offline_nodes=False,
    allow_remove_multiple_nodes=False,
    allow_pacemaker_remote_service_fail=False,
    wait: WaitType = False,
):
    """
    remove a resource representing remote node and destroy remote node

    LibraryEnvironment env provides all for communication with externals
    string node_identifier -- node name, hostname or resource id
    bool skip_offline_nodes -- a flag for ignoring when some nodes are offline
    bool allow_remove_multiple_nodes -- is a flag for allowing
        remove unexpected multiple occurrence of remote node for node_identifier
    bool allow_pacemaker_remote_service_fail -- is a flag for allowing
        successfully finish this command even if stoping/disabling
        pacemaker_remote not succeeded
    """
    wait_timeout = env.ensure_wait_satisfiable(wait)
    cib = env.get_cib()

    resource_element_list = _find_resources_to_remove(
        cib,
        env.report_processor,
        "guest",
        node_identifier,
        allow_remove_multiple_nodes,
        guest_node.find_node_resources,
    )

    node_names_list = sorted(
        {
            guest_node.get_node_name_from_resource(node_element)
            for node_element in resource_element_list
        }
    )

    if not env.is_cib_live:
        env.report_processor.report_list(
            _report_skip_live_parts_in_remove(node_names_list)
        )
    else:
        _destroy_pcmk_remote_env(
            env,
            node_names_list,
            skip_offline_nodes,
            allow_pacemaker_remote_service_fail,
        )

    for resource_element in resource_element_list:
        guest_node.unset_guest(resource_element)

    env.push_cib(wait_timeout=wait_timeout)

    # remove node from pcmk caches
    if env.is_cib_live:
        for node_name in node_names_list:
            remove_node(env.cmd_runner(), node_name)
Beispiel #3
0
def node_remove_guest(
    env, node_identifier,
    skip_offline_nodes=False,
    allow_remove_multiple_nodes=False,
    allow_pacemaker_remote_service_fail=False,
    wait=False,
):
    """
    remove a resource representing remote node and destroy remote node

    LibraryEnvironment env provides all for communication with externals
    string node_identifier -- node name, hostname or resource id
    bool skip_offline_nodes -- a flag for ignoring when some nodes are offline
    bool allow_remove_multiple_nodes -- is a flag for allowing
        remove unexpected multiple occurence of remote node for node_identifier
    bool allow_pacemaker_remote_service_fail -- is a flag for allowing
        successfully finish this command even if stoping/disabling
        pacemaker_remote not succeeded
    """
    env.ensure_wait_satisfiable(wait)
    cib = env.get_cib()

    resource_element_list = _find_resources_to_remove(
        cib,
        env.report_processor,
        "guest",
        node_identifier,
        allow_remove_multiple_nodes,
        guest_node.find_node_resources,
    )

    node_names_list = sorted({
        guest_node.get_node_name_from_resource(node_element)
        for node_element in resource_element_list
    })

    if not env.is_cib_live:
        env.report_processor.process_list(
            _report_skip_live_parts_in_remove(node_names_list)
        )
    else:
        _destroy_pcmk_remote_env(
            env,
            node_names_list,
            skip_offline_nodes,
            allow_pacemaker_remote_service_fail
        )

    for resource_element in resource_element_list:
        guest_node.unset_guest(resource_element)

    env.push_cib(wait=wait)

    #remove node from pcmk caches
    if env.is_cib_live:
        for node_name in node_names_list:
            remove_node(env.cmd_runner(), node_name)
Beispiel #4
0
def node_remove_guest(
    env,
    node_identifier,
    allow_remove_multiple_nodes=False,
    allow_pacemaker_remote_service_fail=False,
    wait=False,
):
    """
    remove a resource representing remote node and destroy remote node

    LibraryEnvironment env provides all for communication with externals
    string node_identifier -- node name, hostname or resource id
    bool allow_remove_multiple_nodes -- is a flag for allowing
        remove unexpected multiple occurence of remote node for node_identifier
    bool allow_pacemaker_remote_service_fail -- is a flag for allowing
        successfully finish this command even if stoping/disabling
        pacemaker_remote not succeeded
    """
    _ensure_consistently_live_env(env)
    env.ensure_wait_satisfiable(wait)
    cib = env.get_cib()

    resource_element_list = _find_resources_to_remove(
        cib,
        env.report_processor,
        "guest",
        node_identifier,
        allow_remove_multiple_nodes,
        guest_node.find_node_resources,
    )

    node_addresses_list = _get_node_addresses_from_resources(
        get_nodes_guest(cib),
        resource_element_list,
        guest_node.get_host,
    )

    if not env.is_corosync_conf_live:
        env.report_processor.process_list(
            _report_skip_live_parts_in_remove(node_addresses_list))
    else:
        _destroy_pcmk_remote_env(env, node_addresses_list,
                                 allow_pacemaker_remote_service_fail)

    for resource_element in resource_element_list:
        guest_node.unset_guest(resource_element)

    env.push_cib(cib, wait)

    #remove node from pcmk caches
    if env.is_cib_live:
        for node_addresses in node_addresses_list:
            remove_node(env.cmd_runner(), node_addresses.name)
 def test_unset_all_guest_attributes_and_empty_meta_tag(self):
     resource_element = etree.fromstring("""
         <primitive id="A">
             <meta_attributes id="B">
                 <nvpair id="C" name="remote-node" value="node1"/>
                 <nvpair id="D" name="remote-port" value="2222"/>
                 <nvpair id="E" name="remote-addr" value="node3"/>
                 <nvpair id="F" name="remote-connect-timeout" value="10"/>
             </meta_attributes>
         </primitive>
     """)
     guest_node.unset_guest(resource_element)
     assert_xml_equal(
         etree.tostring(resource_element).decode(),
         """
         <primitive id="A">
             <meta_attributes id="B" />
         </primitive>
         """
     )