Skip to content

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, facterversion

Hardware 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 / uuid

Sourced 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 floats

The 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 environment

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