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/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/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/os_level_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/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/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/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, WindowsReleaseFinder, YamlFactFormatter

Constant Summary collapse

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



31
32
33
# File 'lib/facter.rb', line 31

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



46
47
48
49
50
# File 'lib/facter.rb', line 46

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)


57
58
59
60
61
62
63
64
65
# File 'lib/facter.rb', line 57

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



20
21
22
# File 'lib/facter.rb', line 20

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

.core_value(user_query) ⇒ Object



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

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)


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

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


124
125
126
# File 'lib/facter.rb', line 124

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

.debugging?bool

Check whether debugging is enabled

Returns:

  • (bool)


114
115
116
# File 'lib/facter.rb', line 114

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)


94
95
96
97
98
99
100
101
102
103
# File 'lib/facter.rb', line 94

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

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



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

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



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

def list
  to_hash.keys.sort
end

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



271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/facter.rb', line 271

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



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

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)


151
152
153
154
155
156
# File 'lib/facter.rb', line 151

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



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

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



177
178
179
# File 'lib/facter.rb', line 177

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



186
187
188
# File 'lib/facter.rb', line 186

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



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

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:



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

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



258
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/facter.rb', line 258

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


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

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

.trace?bool

Check whether printing stack trace is enabled

Returns:

  • (bool)


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

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



238
239
240
241
242
# File 'lib/facter.rb', line 238

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



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

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)


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

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)


314
315
316
317
318
319
320
321
# File 'lib/facter.rb', line 314

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