def do_inv( hostnames: List[HostName], *, selected_sections: checkers.SectionNameCollection, run_only_plugin_names: Optional[Set[InventoryPluginName]] = None, ) -> None: store.makedirs(cmk.utils.paths.inventory_output_dir) store.makedirs(cmk.utils.paths.inventory_archive_dir) for hostname in hostnames: section.section_begin(hostname) try: host_config = config.HostConfig.make_host_config(hostname) inv_result = _do_active_inventory_for( host_config=host_config, selected_sections=selected_sections, run_only_plugin_names=run_only_plugin_names, ) _run_inventory_export_hooks(host_config, inv_result.trees.inventory) # TODO: inv_results.source_results is completely ignored here. # We should process the results to make errors visible on the console _show_inventory_results_on_console(inv_result.trees) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()
def do_inv(hostnames): # type: (List[HostName]) -> None store.makedirs(cmk.utils.paths.inventory_output_dir) store.makedirs(cmk.utils.paths.inventory_archive_dir) for hostname in hostnames: section.section_begin(hostname) try: config_cache = config.get_config_cache() host_config = config_cache.get_host_config(hostname) if host_config.is_cluster: ipaddress = None else: ipaddress = ip_lookup.lookup_ip_address(hostname) sources = data_sources.DataSources(hostname, ipaddress) inventory_tree, status_data_tree = _do_inv_for( sources, multi_host_sections=None, host_config=host_config, ipaddress=ipaddress, ) _run_inventory_export_hooks(host_config, inventory_tree) _show_inventory_results_on_console(inventory_tree, status_data_tree) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.base.cleanup.cleanup_globals()
def commandline_inventory( hostnames: List[HostName], *, selected_sections: SectionNameCollection, run_plugin_names: Container[InventoryPluginName] = EVERYTHING, ) -> None: store.makedirs(cmk.utils.paths.inventory_output_dir) store.makedirs(cmk.utils.paths.inventory_archive_dir) for hostname in hostnames: section.section_begin(hostname) host_config = config.HostConfig.make_host_config(hostname) try: _commandline_inventory_on_host( host_config=host_config, selected_sections=selected_sections, run_plugin_names=run_plugin_names, ) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()
def commandline_discovery( arg_hostnames: Set[HostName], *, selected_sections: SectionNameCollection, run_plugin_names: Container[CheckPluginName], arg_only_new: bool, only_host_labels: bool = False, ) -> None: """Implementing cmk -I and cmk -II This is directly called from the main option parsing code. The list of hostnames is already prepared by the main code. If it is empty then we use all hosts and switch to using cache files. """ config_cache = config.get_config_cache() on_error = OnError.RAISE if cmk.utils.debug.enabled() else OnError.WARN host_names = _preprocess_hostnames(arg_hostnames, config_cache, only_host_labels) mode = Mode.DISCOVERY if selected_sections is NO_SELECTION else Mode.FORCE_SECTIONS # Now loop through all hosts for host_name in sorted(host_names): host_config = config_cache.get_host_config(host_name) section.section_begin(host_name) try: ipaddress = config.lookup_ip_address(host_config) parsed_sections_broker, _results = make_broker( config_cache=config_cache, host_config=host_config, ip_address=ipaddress, mode=mode, selected_sections=selected_sections, file_cache_max_age=config.max_cachefile_age(), fetcher_messages=(), force_snmp_cache_refresh=False, on_scan_error=on_error, ) _commandline_discovery_on_host( host_name, ipaddress, parsed_sections_broker, run_plugin_names, arg_only_new, load_labels=arg_only_new, only_host_labels=only_host_labels, on_error=on_error, ) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()
def do_discovery( arg_hostnames: Set[HostName], *, selected_sections: SectionNameCollection, run_plugin_names: Container[CheckPluginName], arg_only_new: bool, only_host_labels: bool = False, ) -> None: config_cache = config.get_config_cache() use_caches = not arg_hostnames or cmk.core_helpers.cache.FileCacheFactory.maybe on_error = "raise" if cmk.utils.debug.enabled() else "warn" discovery_parameters = DiscoveryParameters( on_error=on_error, load_labels=arg_only_new, save_labels=True, only_host_labels=only_host_labels, ) host_names = _preprocess_hostnames(arg_hostnames, config_cache, only_host_labels) mode = Mode.DISCOVERY if selected_sections is NO_SELECTION else Mode.FORCE_SECTIONS # Now loop through all hosts for host_name in sorted(host_names): host_config = config_cache.get_host_config(host_name) section.section_begin(host_name) try: ipaddress = config.lookup_ip_address(host_config) parsed_sections_broker, _results = make_broker( config_cache=config_cache, host_config=host_config, ip_address=ipaddress, mode=mode, selected_sections=selected_sections, file_cache_max_age=config.discovery_max_cachefile_age() if use_caches else 0, fetcher_messages=(), force_snmp_cache_refresh=False, on_scan_error=on_error, ) _do_discovery_for( host_name, ipaddress, parsed_sections_broker, run_plugin_names, arg_only_new, discovery_parameters, ) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()
def test_section_error(caplog, capsys): caplog.set_level(console.VERBOSE, logger="cmk.base") section.section_error("hello") captured = capsys.readouterr() assert "hello" in captured.out assert "ERROR" in captured.out assert captured.out.endswith("\n") assert not captured.err # Error on stdout (and not stderr) is not a typo.
def do_inv(hostnames: List[HostName]) -> None: store.makedirs(cmk.utils.paths.inventory_output_dir) store.makedirs(cmk.utils.paths.inventory_archive_dir) config_cache = config.get_config_cache() for hostname in hostnames: section.section_begin(hostname) try: host_config = config.HostConfig.make_host_config(hostname) if host_config.is_cluster: ipaddress = None else: ipaddress = ip_lookup.lookup_ip_address(host_config) inventory_tree, status_data_tree = _do_inv_for( config_cache, host_config, ipaddress, sources=checkers.make_sources( host_config, ipaddress, mode=checkers.Mode.INVENTORY, ), multi_host_sections=None, )[:2] _run_inventory_export_hooks(host_config, inventory_tree) _show_inventory_results_on_console(inventory_tree, status_data_tree) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()
def commandline_inventory( hostnames: List[HostName], *, selected_sections: SectionNameCollection, run_plugin_names: Container[InventoryPluginName] = EVERYTHING, ) -> None: store.makedirs(cmk.utils.paths.inventory_output_dir) store.makedirs(cmk.utils.paths.inventory_archive_dir) for hostname in hostnames: section.section_begin(hostname) try: host_config = config.HostConfig.make_host_config(hostname) inv_result = _inventorize_host( host_config=host_config, selected_sections=selected_sections, run_plugin_names=run_plugin_names, ) _run_inventory_export_hooks(host_config, inv_result.trees.inventory) # TODO: inv_results.source_results is completely ignored here. # We should process the results to make errors visible on the console _show_inventory_results_on_console(inv_result.trees) for detail in check_parsing_errors( errors=inv_result.parsing_errors).details: console.warning(detail) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()
def do_inv(hostnames: List[HostName]) -> None: store.makedirs(cmk.utils.paths.inventory_output_dir) store.makedirs(cmk.utils.paths.inventory_archive_dir) config_cache = config.get_config_cache() for hostname in hostnames: section.section_begin(hostname) try: host_config = config.HostConfig.make_host_config(hostname) if host_config.is_cluster: ipaddress = None else: ipaddress = ip_lookup.lookup_ip_address(host_config) # TODO: Results are completely ignored here. We should process the results to make error # visible on the console multi_host_sections, _results = _get_multi_host_sections_for_inv( config_cache, host_config, ipaddress) inventory_tree, status_data_tree = _do_inv_for( host_config, ipaddress, multi_host_sections=multi_host_sections, ) _run_inventory_export_hooks(host_config, inventory_tree) _show_inventory_results_on_console(inventory_tree, status_data_tree) except Exception as e: if cmk.utils.debug.enabled(): raise section.section_error("%s" % e) finally: cmk.utils.cleanup.cleanup_globals()