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/gce.rb,
lib/facter/resolvers/xen.rb,
lib/facter/resolvers/zfs.rb,
lib/facter/resolvers/cloud.rb,
lib/facter/resolvers/lspci.rb,
lib/facter/resolvers/zpool.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/resolvers/utils/http.rb,
lib/facter/framework/utils/utils.rb,
lib/facter/resolvers/solaris/dmi.rb,
lib/facter/resolvers/windows/ssh.rb,
lib/facter/framework/core/options.rb,
lib/facter/models/fact_collection.rb,
lib/facter/resolvers/aix/os_level.rb,
lib/facter/resolvers/dmi_resolver.rb,
lib/facter/resolvers/solaris/ldom.rb,
lib/facter/resolvers/solaris/zone.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/load_averages.rb,
lib/facter/resolvers/lpar_resolver.rb,
lib/facter/resolvers/path_resolver.rb,
lib/facter/resolvers/ruby_resolver.rb,
lib/facter/resolvers/solaris/disks.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/solaris/memory.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/aix/serialnumber.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/solaris/dmi_sparc.rb,
lib/facter/resolvers/solaris/ipaddress.rb,
lib/facter/resolvers/solaris/zone_name.rb,
lib/facter/resolvers/timezone_resolver.rb,
lib/facter/resolvers/utils/fingerprint.rb,
lib/facter/custom_facts/util/resolution.rb,
lib/facter/facts_utils/virtual_detector.rb,
lib/facter/framework/benchmarking/timer.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/networking.rb,
lib/facter/resolvers/solaris/os_release.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/linux/docker_uptime.rb,
lib/facter/resolvers/linux/load_averages.rb,
lib/facter/resolvers/macosx/dmi_resolver.rb,
lib/facter/resolvers/networking_resolver.rb,
lib/facter/resolvers/os_release_resolver.rb,
lib/facter/resolvers/processors_resolver.rb,
lib/facter/resolvers/solaris/ffi/structs.rb,
lib/facter/resolvers/solaris/filesystems.rb,
lib/facter/resolvers/utils/uptime_helper.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/freebsd/dmi_resolver.rb,
lib/facter/resolvers/lsb_release_resolver.rb,
lib/facter/resolvers/mountpoints_resolver.rb,
lib/facter/framework/detector/os_hierarchy.rb,
lib/facter/resolvers/aix/hardware_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/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/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/ffi/load_averages.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/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/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/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/freebsd/swap_memory_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/resolvers/freebsd/system_memory_resolver.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/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, Framework, 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, VirtualDetector, WindowsReleaseFinder, YamlFactFormatter

Constant Summary collapse

VERSION =
'4.0.41'
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:



52
53
54
# File 'lib/facter.rb', line 52

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



67
68
69
70
71
# File 'lib/facter.rb', line 67

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)


78
79
80
81
82
83
84
85
86
# File 'lib/facter.rb', line 78

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

.clear_messagesObject



41
42
43
# File 'lib/facter.rb', line 41

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

.core_value(user_query) ⇒ Object



88
89
90
91
92
93
94
# File 'lib/facter.rb', line 88

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(message) ⇒ nil

Logs debug message when debug option is set to true

Parameters:

  • message (Object)

    Message object to be logged

Returns:

  • (nil)


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

def debug(message)
  return unless debugging?

  logger.debug(message.to_s)
  nil
end

.debugging(debug_bool) ⇒ type

Enable or disable debugging

Parameters:

  • debug_bool (bool)

    State which debugging should have

Returns:

  • (type)
    description


158
159
160
# File 'lib/facter.rb', line 158

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

.debugging?bool

Check whether debugging is enabled

Returns:

  • (bool)


148
149
150
# File 'lib/facter.rb', line 148

def debugging?
  Options[:debug]
end

.debugonce(message) ⇒ nil

Logs the same debug message only once when debug option is set to true

Parameters:

  • message (Object)

    Message object to be logged

Returns:

  • (nil)


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

def debugonce(message)
  return unless debugging?

  message_string = message.to_s
  return if @debug_once.include? message_string

  @debug_once << message_string
  logger.debug(message_string)
  nil
end

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

Define a new fact or extend an existing fact.

Parameters:

  • name (Symbol)

    The name of the fact to define

  • options (Hash) (defaults to: {})

    A hash of options to set on the fact

Returns:



134
135
136
137
# File 'lib/facter.rb', line 134

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

.each {|name, value| ... } ⇒ Facter

Iterates over fact names and values

Yield Parameters:

  • name (String)

    the fact name

  • value (String)

    the current value of the fact

Returns:



170
171
172
173
174
175
176
177
178
179
180
# File 'lib/facter.rb', line 170

def each
  log_blocked_facts
  resolved_facts = Facter::FactManager.instance.resolve_facts
  SessionCache.invalidate_all_caches

  resolved_facts.each do |fact|
    yield(fact.name, fact.value)
  end

  self
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:

  • user_query (String)

    the name of the fact

Returns:



192
193
194
195
196
197
# File 'lib/facter.rb', line 192

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

  @already_searched[user_query]
end

.listArray

Returns a list with the names of all solved facts

Returns:

  • (Array)

    the list with all the fact names



361
362
363
# File 'lib/facter.rb', line 361

def list
  to_hash.keys.sort
end

.loadfactsnil

Loads all facts

Returns:

  • (nil)


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

def loadfacts
  LegacyFacter.loadfacts
  nil
end

.log_exception(exception, message = nil) ⇒ Object



347
348
349
350
351
352
353
354
# File 'lib/facter.rb', line 347

def log_exception(exception, message = nil)
  error_message = []

  error_message << message.to_s unless message.nil? || (message.is_a?(String) && message.empty?)

  parse_exception(exception, error_message)
  logger.error(error_message.flatten.join("\n"))
end

.on_message(&block) ⇒ Object



139
140
141
# File 'lib/facter.rb', line 139

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)


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

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

.resolve(args_as_string) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/facter.rb', line 20

def resolve(args_as_string)
  require 'facter/framework/cli/cli_launcher'

  args = args_as_string.split(' ')

  Facter::OptionsValidator.validate(args)
  processed_arguments = CliLauncher.prepare_arguments(args, nil)

  cli = Facter::Cli.new([], processed_arguments)

  if cli.args.include?(:version)
    cli.invoke(:version, [])
  elsif cli.args.include?('--list-cache-groups')
    cli.invoke(:list_cache_groups, [])
  elsif cli.args.include?('--list-block-groups')
    cli.invoke(:list_block_groups, [])
  else
    cli.invoke(:arg_parser)
  end
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



230
231
232
# File 'lib/facter.rb', line 230

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



241
242
243
# File 'lib/facter.rb', line 241

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



250
251
252
# File 'lib/facter.rb', line 250

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



259
260
261
# File 'lib/facter.rb', line 259

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:



269
270
271
272
273
274
275
# File 'lib/facter.rb', line 269

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



334
335
336
337
338
339
340
341
342
343
344
345
# File 'lib/facter.rb', line 334

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:

  • bool (bool)

    Set trace on debug state

Returns:

  • (type)
    description


292
293
294
# File 'lib/facter.rb', line 292

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

.trace?bool

Check whether printing stack trace is enabled

Returns:

  • (bool)


282
283
284
# File 'lib/facter.rb', line 282

def trace?
  Options[:trace]
end

.value(user_query) ⇒ String

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

Parameters:

  • user_query (String)

    the fact name

Returns:

  • (String)

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



302
303
304
305
306
# File 'lib/facter.rb', line 302

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

.values(options, user_queries) ⇒ Object



308
309
310
311
312
313
314
315
316
317
318
# File 'lib/facter.rb', line 308

def values(options, user_queries)
  init_cli_options(options, user_queries)
  resolved_facts = Facter::FactManager.instance.resolve_facts(user_queries)
  Facter::SessionCache.invalidate_all_caches

  if user_queries.count.zero?
    Facter::FactCollection.new.build_fact_collection!(resolved_facts)
  else
    FormatterHelper.retrieve_facts_to_display_for_user_query(user_queries, resolved_facts)
  end
end

.versionString

Returns Facter version

Returns:

  • (String)

    Current version



325
326
327
# File 'lib/facter.rb', line 325

def version
  Facter::VERSION
end

.warn(message) ⇒ nil

Logs the message parameter as a warning.

Parameters:

  • message (Object)

    the warning object to be displayed

Returns:

  • (nil)


372
373
374
375
# File 'lib/facter.rb', line 372

def warn(message)
  logger.warn(message.to_s)
  nil
end

.warnonce(message) ⇒ nil

Logs only once the same warning message.

Parameters:

  • message (Object)

    the warning message object

Returns:

  • (nil)


384
385
386
387
388
389
390
391
# File 'lib/facter.rb', line 384

def warnonce(message)
  message_string = message.to_s
  return if @warn_once.include? message_string

  @warn_once << message_string
  logger.warn(message_string)
  nil
end