Module: Facter

Includes:
ApiDebugger
Defined in:
lib/facter/custom_facts/util/fact.rb,
lib/facter.rb,
lib/facter/version.rb,
lib/facter/resolvers/ec2.rb,
lib/facter/resolvers/xen.rb,
lib/facter/resolvers/lspci.rb,
lib/facter/resolvers/vmware.rb,
lib/facter/util/file_helper.rb,
lib/facter/framework/cli/cli.rb,
lib/facter/resolvers/aix/nim.rb,
lib/facter/resolvers/open_vz.rb,
lib/facter/models/loaded_fact.rb,
lib/facter/resolvers/aix/disks.rb,
lib/facter/resolvers/utils/ssh.rb,
lib/facter/resolvers/virt_what.rb,
lib/facter/models/resolved_fact.rb,
lib/facter/models/searched_fact.rb,
lib/facter/resolvers/aix/memory.rb,
lib/facter/resolvers/containers.rb,
lib/facter/resolvers/dmi_decode.rb,
lib/facter/resolvers/partitions.rb,
lib/facter/framework/utils/utils.rb,
lib/facter/resolvers/windows/ssh.rb,
lib/facter/framework/core/options.rb,
lib/facter/models/fact_collection.rb,
lib/facter/resolvers/dmi_resolver.rb,
lib/facter/resolvers/ssh_resolver.rb,
lib/facter/facts_utils/facts_utils.rb,
lib/facter/resolvers/base_resolver.rb,
lib/facter/resolvers/disk_resolver.rb,
lib/facter/resolvers/lpar_resolver.rb,
lib/facter/resolvers/path_resolver.rb,
lib/facter/resolvers/ruby_resolver.rb,
lib/facter/resolvers/wpar_resolver.rb,
lib/facter/framework/logging/logger.rb,
lib/facter/resolvers/aix/partitions.rb,
lib/facter/resolvers/aix/processors.rb,
lib/facter/resolvers/bsd/processors.rb,
lib/facter/resolvers/debian_version.rb,
lib/facter/resolvers/uname_resolver.rb,
lib/facter/facts_utils/uptime_parser.rb,
lib/facter/resolvers/aix/mountpoints.rb,
lib/facter/resolvers/augeas_resolver.rb,
lib/facter/resolvers/memory_resolver.rb,
lib/facter/resolvers/solaris/ffi/ffi.rb,
lib/facter/resolvers/uptime_resolver.rb,
lib/facter/facts_utils/unit_converter.rb,
lib/facter/framework/core/fact_filter.rb,
lib/facter/resolvers/selinux_resolver.rb,
lib/facter/resolvers/sw_vers_resolver.rb,
lib/facter/custom_facts/core/aggregate.rb,
lib/facter/custom_facts/core/execution.rb,
lib/facter/framework/core/fact_manager.rb,
lib/facter/resolvers/aio_agent_version.rb,
lib/facter/resolvers/hostname_resolver.rb,
lib/facter/resolvers/identity_resolver.rb,
lib/facter/resolvers/os_level_resolver.rb,
lib/facter/resolvers/timezone_resolver.rb,
lib/facter/resolvers/utils/fingerprint.rb,
lib/facter/custom_facts/util/resolution.rb,
lib/facter/framework/config/fact_groups.rb,
lib/facter/framework/core/cache_manager.rb,
lib/facter/framework/core/session_cache.rb,
lib/facter/resolvers/aix/ffi/ffi_helper.rb,
lib/facter/resolvers/bsd/ffi/ffi_helper.rb,
lib/facter/resolvers/freebsd/processors.rb,
lib/facter/resolvers/solaris/processors.rb,
lib/facter/framework/core/fact_augmenter.rb,
lib/facter/resolvers/aix/utils/odm_query.rb,
lib/facter/resolvers/macosx/dmi_resolver.rb,
lib/facter/resolvers/os_release_resolver.rb,
lib/facter/resolvers/processors_resolver.rb,
lib/facter/resolvers/solaris/ffi/structs.rb,
lib/facter/framework/config/config_reader.rb,
lib/facter/framework/parsers/query_parser.rb,
lib/facter/resolvers/eos_release_resolver.rb,
lib/facter/resolvers/filesystems_resolver.rb,
lib/facter/resolvers/lsb_release_resolver.rb,
lib/facter/resolvers/mountpoints_resolver.rb,
lib/facter/resolvers/solaris/zfs_resolver.rb,
lib/facter/framework/detector/os_hierarchy.rb,
lib/facter/resolvers/aix/hardware_resolver.rb,
lib/facter/resolvers/aix/os_level_resolver.rb,
lib/facter/resolvers/fips_enabled_resolver.rb,
lib/facter/resolvers/freebsd/geom_resolver.rb,
lib/facter/resolvers/solaris/ffi/functions.rb,
lib/facter/resolvers/solaris/zone_resolver.rb,
lib/facter/resolvers/suse_release_resolver.rb,
lib/facter/resolvers/windows/fips_resolver.rb,
lib/facter/custom_facts/core/execution/base.rb,
lib/facter/resolvers/facterversion_resolver.rb,
lib/facter/resolvers/freebsd/ffi/ffi_helper.rb,
lib/facter/resolvers/load_averages_resolver.rb,
lib/facter/resolvers/solaris/zpool_resolver.rb,
lib/facter/custom_facts/core/execution/posix.rb,
lib/facter/resolvers/aix/filesystem_resolver.rb,
lib/facter/resolvers/aix/networking_resolver.rb,
lib/facter/resolvers/puppet_version_resolver.rb,
lib/facter/resolvers/redhat_release_resolver.rb,
lib/facter/resolvers/utils/filesystem_helper.rb,
lib/facter/resolvers/windows/kernel_resolver.rb,
lib/facter/resolvers/windows/memory_resolver.rb,
lib/facter/resolvers/windows/netkvm_resolver.rb,
lib/facter/resolvers/windows/uptime_resolver.rb,
lib/facter/facts_utils/windows_release_finder.rb,
lib/facter/resolvers/aix/utils/info_extractor.rb,
lib/facter/custom_facts/core/execution/windows.rb,
lib/facter/framework/core/options/option_store.rb,
lib/facter/resolvers/aix/architecture_resolver.rb,
lib/facter/resolvers/macosx/processor_resolver.rb,
lib/facter/resolvers/networking_linux_resolver.rb,
lib/facter/resolvers/solaris/solaris_zone_name.rb,
lib/facter/resolvers/windows/aio_agent_version.rb,
lib/facter/resolvers/windows/dmi_bios_resolver.rb,
lib/facter/resolvers/windows/identity_resolver.rb,
lib/facter/resolvers/windows/system32_resolver.rb,
lib/facter/resolvers/aix/load_averages_resolver.rb,
lib/facter/resolvers/bsd/load_averages_resolver.rb,
lib/facter/resolvers/macosx/networking_resolver.rb,
lib/facter/resolvers/solaris/ipaddress_resolver.rb,
lib/facter/framework/formatters/formatter_helper.rb,
lib/facter/resolvers/macosx/filesystems_resolver.rb,
lib/facter/resolvers/macosx/mountpoints_resolver.rb,
lib/facter/resolvers/macosx/swap_memory_resolver.rb,
lib/facter/resolvers/solaris/networking_resolver.rb,
lib/facter/resolvers/windows/networking_resolver.rb,
lib/facter/resolvers/windows/processors_resolver.rb,
lib/facter/framework/core/fact/internal/core_fact.rb,
lib/facter/framework/formatters/formatter_factory.rb,
lib/facter/resolvers/solaris/filesystems_resolver.rb,
lib/facter/framework/core/fact_loaders/fact_loader.rb,
lib/facter/resolvers/macosx/load_averages_resolver.rb,
lib/facter/resolvers/macosx/system_memory_resolver.rb,
lib/facter/framework/core/options/options_validator.rb,
lib/facter/framework/formatters/json_fact_formatter.rb,
lib/facter/framework/formatters/yaml_fact_formatter.rb,
lib/facter/framework/formatters/hocon_fact_formatter.rb,
lib/facter/resolvers/macosx/system_profiler_resolver.rb,
lib/facter/resolvers/windows/virtualization_resolver.rb,
lib/facter/framework/core/options/config_file_options.rb,
lib/facter/framework/formatters/legacy_fact_formatter.rb,
lib/facter/resolvers/freebsd/freebsd_version_resolver.rb,
lib/facter/resolvers/windows/product_release_resolver.rb,
lib/facter/framework/core/fact_loaders/class_discoverer.rb,
lib/facter/resolvers/solaris/solaris_os_release_resolver.rb,
lib/facter/resolvers/windows/dmi_computersystem_resolver.rb,
lib/facter/resolvers/windows/win_os_description_resolver.rb,
lib/facter/resolvers/macosx/utils/system_profile_executor.rb,
lib/facter/framework/core/fact_loaders/external_fact_loader.rb,
lib/facter/framework/core/fact_loaders/internal_fact_loader.rb,
lib/facter/resolvers/windows/hardware_architecture_resolver.rb,
lib/facter/framework/core/fact/external/external_fact_manager.rb,
lib/facter/framework/core/fact/internal/internal_fact_manager.rb

Overview

CuAt (Customized Attributes) non-default attribute values CuDv (Customized Devices) the devices present on this machine PdAt (Predefined Attributes) default values for all device attributes PdDv (Predefined Devices) the list of all devices supported by this release of AIX

Defined Under Namespace

Modules: Aix, Bsd, Core, FactAugmenter, FactsUtils, FilesystemHelper, Freebsd, InfoExtractor, OptionsValidator, Resolvers, Util, Utils Classes: CacheManager, ClassDiscoverer, Cli, ConfigFileOptions, ConfigReader, CoreFact, ExternalFactLoader, ExternalFactManager, FactCollection, FactFilter, FactGroups, FactLoader, FactManager, FingerPrint, FormatterFactory, FormatterHelper, HoconFactFormatter, InternalFactLoader, InternalFactManager, JsonFactFormatter, LegacyFactFormatter, LoadedFact, Log, ODMQuery, OptionStore, Options, OsHierarchy, QueryParser, ResolveCustomFactError, ResolvedFact, SearchedFact, SessionCache, Ssh, UptimeParser, WindowsReleaseFinder, YamlFactFormatter

Constant Summary collapse

VERSION =
'4.0.32'
RED =
"\e[31m"
GREEN =
"\e[32m"
YELLOW =
"\e[33m"
CYAN =
"\e[36m"
RESET =
"\e[0m"
DEFAULT_LOG_LEVEL =
:warn

Class Method Summary collapse

Methods included from ApiDebugger

parse_options, prepended

Class Method Details

.[](name) ⇒ Facter::Util::Fact?

Alias method for Facter.fact()

Parameters:

  • name (string)

    fact name

Returns:



29
30
31
# File 'lib/facter.rb', line 29

def [](name)
  fact(name)
end

.add(name, options = {}, &block) ⇒ Facter::Util::Fact

Add custom facts to fact collection

Parameters:

  • name (String)

    Custom fact name

  • options (defaults to: {})

    {} [Hash] optional parameters for the fact - attributes

    of Facter::Util::Fact and Facter::Util::Resolution can be supplied here

  • block (Proc)

    a block defining a fact resolution

Returns:

  • (Facter::Util::Fact)

    the fact object, which includes any previously defined resolutions



44
45
46
47
48
# File 'lib/facter.rb', line 44

def add(name, options = {}, &block)
  options[:fact_type] = :custom
  LegacyFacter.add(name, options, &block)
  LegacyFacter.collection.invalidate_custom_facts
end

.clearnil

Clears all cached values and removes all facts from memory.

Returns:

  • (nil)


55
56
57
58
59
60
61
# File 'lib/facter.rb', line 55

def clear
  @already_searched = {}
  LegacyFacter.clear
  Options[:custom_dir] = []
  LegacyFacter.collection.invalidate_custom_facts
  LegacyFacter.collection.reload_custom_facts
end

.clear_messagesObject



18
19
20
# File 'lib/facter.rb', line 18

def clear_messages
  logger.debug('clear_messages is not implemented')
end

.core_value(user_query) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/facter.rb', line 63

def core_value(user_query)
  user_query = user_query.to_s
  resolved_facts = Facter::FactManager.instance.resolve_core([user_query])
  fact_collection = FactCollection.new.build_fact_collection!(resolved_facts)
  splitted_user_query = Facter::Utils.split_user_query(user_query)
  fact_collection.dig(*splitted_user_query)
end

.debug(msg) ⇒ nil

Prints out a debug message when debug option is set to true

Parameters:

  • msg (String)

    Message to be printed out

Returns:

  • (nil)


77
78
79
80
81
82
# File 'lib/facter.rb', line 77

def debug(msg)
  return unless debugging?

  logger.debug(msg)
  nil
end

.debugging(debug_bool) ⇒ type

Enable or disable debugging

Parameters:

  • debug_bool (bool)

    State which debugging should have

Returns:

  • (type)
    description


103
104
105
# File 'lib/facter.rb', line 103

def debugging(debug_bool)
  Facter::Options[:debug] = debug_bool
end

.debugging?bool

Check whether debuging is enabled

Returns:

  • (bool)


93
94
95
# File 'lib/facter.rb', line 93

def debugging?
  Options[:debug]
end

.fact(user_query) ⇒ Facter::Util::Fact?

Returns a fact object by name. If you use this, you still have to call ‘value` on it to retrieve the actual value.

Parameters:

  • name (String)

    the name of the fact

Returns:



117
118
119
120
121
122
# File 'lib/facter.rb', line 117

def fact(user_query)
  user_query = user_query.to_s
  resolve_fact(user_query)

  @already_searched[user_query]
end

.log_exception(exception, message = :default) ⇒ Object



250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'lib/facter.rb', line 250

def log_exception(exception, message = :default)
  arr = []
  if message == :default
    arr << exception.message
  elsif message
    arr << message
  end
  if Options[:trace]
    arr << 'backtrace:'
    arr.concat(exception.backtrace)
  end

  logger.error(arr.flatten.join("\n"))
end

.on_message(&block) ⇒ Object



84
85
86
# File 'lib/facter.rb', line 84

def on_message(&block)
  Facter::Log.on_message(&block)
end

.resetnil

Reset search paths for custom and external facts If config file is set custom and external facts will be reloaded

Returns:

  • (nil)


130
131
132
133
134
135
# File 'lib/facter.rb', line 130

def reset
  LegacyFacter.reset
  Options[:custom_dir] = []
  Options[:external_dir] = []
  nil
end

.search(*dirs) ⇒ void

This method returns an undefined value.

Register directories to be searched for custom facts. The registered directories must be absolute paths or they will be ignored.

Parameters:

  • dirs (Array<String>)

    An array of searched directories



145
146
147
# File 'lib/facter.rb', line 145

def search(*dirs)
  Options[:custom_dir] += dirs
end

.search_external(dirs) ⇒ void

This method returns an undefined value.

Registers directories to be searched for external facts.

Parameters:

  • dirs (Array<String>)

    An array of searched directories



156
157
158
# File 'lib/facter.rb', line 156

def search_external(dirs)
  Options[:external_dir] += dirs
end

.search_external_pathArray<String>

Returns the registered search directories.for external facts.

Returns:

  • (Array<String>)

    An array of searched directories



165
166
167
# File 'lib/facter.rb', line 165

def search_external_path
  Options.external_dir
end

.search_pathArray<String>

Returns the registered search directories for custom facts.

Returns:

  • (Array<String>)

    An array of the directories searched



174
175
176
# File 'lib/facter.rb', line 174

def search_path
  Options.custom_dir
end

.to_hashFactCollection

Gets a hash mapping fact names to their values The hash contains core facts, legacy facts, custom facts and external facts (all facts that can be resolved).

Returns:



184
185
186
187
188
189
190
# File 'lib/facter.rb', line 184

def to_hash
  log_blocked_facts

  resolved_facts = Facter::FactManager.instance.resolve_facts
  Facter::SessionCache.invalidate_all_caches
  Facter::FactCollection.new.build_fact_collection!(resolved_facts)
end

.to_user_output(cli_options, *args) ⇒ Array

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Gets a hash mapping fact names to their values

Returns:

  • (Array)

    the hash of fact names and values



237
238
239
240
241
242
243
244
245
246
247
248
# File 'lib/facter.rb', line 237

def to_user_output(cli_options, *args)
  init_cli_options(cli_options, args)
  logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
  log_blocked_facts
  resolved_facts = Facter::FactManager.instance.resolve_facts(args)
  SessionCache.invalidate_all_caches
  fact_formatter = Facter::FormatterFactory.build(Facter::Options.get)

  status = error_check(resolved_facts)

  [fact_formatter.format(resolved_facts), status || 0]
end

.trace(bool) ⇒ type

Enable or disable trace

Parameters:

  • debug_bool (bool)

    Set trace on debug state

Returns:

  • (type)
    description


207
208
209
# File 'lib/facter.rb', line 207

def trace(bool)
  Options[:trace] = bool
end

.trace?bool

Check whether printing stack trace is enabled

Returns:

  • (bool)


197
198
199
# File 'lib/facter.rb', line 197

def trace?
  Options[:trace]
end

.value(user_query) ⇒ String

Gets the value for a fact. Returns ‘nil` if no such fact exists.

Parameters:

  • name (String)

    the fact name

Returns:

  • (String)

    the value of the fact, or nil if no fact is found



217
218
219
220
221
# File 'lib/facter.rb', line 217

def value(user_query)
  user_query = user_query.to_s
  resolve_fact(user_query)
  @already_searched[user_query]&.value
end

.versionString

Returns Facter version

Returns:

  • (String)

    Current version



228
229
230
# File 'lib/facter.rb', line 228

def version
  Facter::VERSION
end