Facts & schema
Facts & schema
go-facter resolves the Facter aggregate (structured) facts and the flat
legacy aliases that derive from them. Structured facts are nested maps queried
by dotted path (os.release.full); legacy aliases are top-level scalars
(operatingsystemrelease). A fact that a platform cannot provide in pure Go is
skipped gracefully rather than reported wrong.
Aggregate facts
os
os.name e.g. "Ubuntu", "Darwin", "windows"
os.family e.g. "Debian", "RedHat", "Suse", "Darwin", "windows"
os.release.full distribution / kernel version, and .major / .minor
os.architecture e.g. "x86_64", "aarch64"
os.hardware machine hardware name
os.distro.* Linux: id, codename, description, release.* (from /etc/os-release)
os.macosx.* Darwin: product, build, version.full/major/minor (from sw_vers)kernel
kernel (Linux / Darwin / windows), kernelrelease (full release string),
kernelversion (numeric prefix, e.g. 6.5.0), kernelmajversion (6.5).
networking
networking.hostname / fqdn / domain
networking.primary elected primary interface name
networking.ip / ip6 / mac / netmask summary of the primary interface
networking.interfaces.<name>.ip per-interface ip / ip6 / mac / mtu
.netmask / .network
.bindings[] {address, netmask, network}
.bindings6[]processors, memory
processors.count / physicalcount / models[] / isa
memory.system.total / total_bytes / available / available_bytes / used / capacity
memory.swap.* (same shape; omitted when there is no swap)Byte counts are integers; the human strings (total, used, …) use Facter’s
binary units (15.51 GiB), and capacity is a "NN.NN%" string.
Storage
mountpoints.<path> (device, filesystem, options, size/used/available bytes +
human + capacity), filesystems (comma-separated on-disk fs types), and
disks.<name> (size, model, vendor). These are Linux facts, parsed from
/proc/mounts, df, /proc/filesystems and /sys/block.
Virtualization, uptime, identity
virtual / is_virtual hypervisor (DMI + cpu flag) and container (docker/podman/cgroup) detection
system_uptime.seconds / hours / days / uptime
identity.user / group / uid / gid / privileged
timezone, path, facterversionHardware inventory — dmi
dmi.manufacturer system vendor (SMBIOS)
dmi.bios.vendor / version / release_date
dmi.board.manufacturer / product / serial_number / asset_tag
dmi.chassis.type / asset_tag
dmi.product.name / serial_number / uuidSourced from /sys/class/dmi/id on Linux, system_profiler / ioreg on
Darwin and wmic on Windows, and skipped where DMI is unavailable (many
containers). The bios_*, board*, chassis*, manufacturer, productname,
serialnumber, uuid legacy aliases derive from it.
ssh, selinux, load_averages
ssh.<algo>.type / key algo: rsa / dsa / ecdsa / ed25519
ssh.<algo>.fingerprints.sha1 / .sha256 SSHFP records, computed in pure Go
selinux.enabled / enforced / current_mode Linux; reports {enabled: false} when absent
selinux.policy_version / config_mode / config_policy
load_averages.1m / 5m / 15m run-queue averages as floatsThe ssh<algo>key and sshfp_<algo> flat facts derive from the structured
ssh fact, so each host key is read and fingerprinted at most once.
Cloud, Ruby & agent facts
cloud.provider aws / gce / azure, from DMI (no network)
ec2_metadata.* best-effort, non-blocking IMDS probe on EC2
ruby.version / sitedir / platform
fips_enabled bool; /proc/sys/crypto/fips_enabled on Linux
aio_agent_version puppet-agent AIO package version, when present
augeasversion installed Augeas library version, when present
env_windows_installdir Windows install directory from the environmentThe cloud / ec2_metadata probes are bounded and non-blocking: a host that is
not on a provider never stalls fact resolution.
Legacy aliases
| Alias | Resolves to |
|---|---|
operatingsystem | os.name |
osfamily | os.family |
operatingsystemrelease / operatingsystemmajrelease | os.release.full / .major |
architecture / hardwaremodel | os.architecture / os.hardware |
hostname / domain / fqdn | networking.* |
ipaddress / ipaddress6 / macaddress / netmask | primary interface |
interfaces | comma-separated interface names |
processorcount / physicalprocessorcount | processors.count / .physicalcount |
memorysize / memoryfree / swapsize / swapfree | memory.* |
uptime / uptime_seconds / uptime_days / uptime_hours | system_uptime.* |
id / gid | identity.user / .gid |
bios_vendor / bios_version / bios_release_date | dmi.bios.* |
boardmanufacturer / boardproductname / boardserialnumber / boardassettag | dmi.board.* |
chassistype / chassisassettag | dmi.chassis.* |
manufacturer / productname / serialnumber / uuid | dmi.manufacturer / dmi.product.* |
ssh<algo>key / sshfp_<algo> | ssh.<algo>.* |
memorysize_mb / memoryfree_mb / swapsize_mb / swapfree_mb | memory.* (mebibytes) |
Aliases resolve lazily through the structured fact, so the underlying probe runs at most once regardless of which shape is queried.