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> """, )
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)
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)
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> """ )