def test_get_parsed_section(patch_register, node_section_content, expected_result): parsed_sections_broker = ParsedSectionsBroker() parsed_sections_broker.setdefault( HostKey("node1", "127.0.0.1", SourceType.HOST), AgentHostSections(sections=node_section_content), ) content = parsed_sections_broker.get_parsed_section( HostKey("node1", "127.0.0.1", SourceType.HOST), ParsedSectionName("parsed"), ) assert expected_result == content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, content)
def _discover_host_labels_for_source_type( *, host_key: HostKey, parsed_sections_broker: ParsedSectionsBroker, discovery_parameters: DiscoveryParameters, ) -> Mapping[str, HostLabel]: try: host_data = parsed_sections_broker[host_key] except KeyError: return {} host_labels = {} try: # We do *not* process all available raw sections. Instead we see which *parsed* # sections would result from them, and then process those. parse_sections = { agent_based_register.get_section_plugin(rs).parsed_section_name for rs in host_data.sections } applicable_sections = parsed_sections_broker.determine_applicable_sections( parse_sections, host_key.source_type, ) console.vverbose("Trying host label discovery with: %s\n" % ", ".join(str(s.name) for s in applicable_sections)) for section_plugin in _sort_sections_by_label_priority( applicable_sections): kwargs = { 'section': parsed_sections_broker.get_parsed_section( host_key, section_plugin.parsed_section_name), } host_label_params = config.get_host_label_parameters( host_key.hostname, section_plugin) if host_label_params is not None: kwargs["params"] = host_label_params try: for label in section_plugin.host_label_function(**kwargs): console.vverbose( f" {label.name}: {label.value} ({section_plugin.name})\n" ) host_labels[label.name] = HostLabel( label.name, label.value, section_plugin.name, ) except (KeyboardInterrupt, MKTimeout): raise except Exception as exc: if cmk.utils.debug.enabled( ) or discovery_parameters.on_error == "raise": raise if discovery_parameters.on_error == "warn": console.error("Host label discovery of '%s' failed: %s\n" % (section_plugin.name, exc)) except KeyboardInterrupt: raise MKGeneralException("Interrupted by Ctrl-C.") return host_labels