File: //proc/self/root/usr/lib/ruby/site_ruby/1.8/facter/os.rb
# Fact: os
#
# Purpose:
# Return various facts related to the machine's operating system, including:
# Name: The name of the operating system.
# Family: A mapping of the operating system to an operating system family.
# Release: The release version of the operating system. Includes entries for the
# major and minor release versions, as well as the full release string.
# Lsb: Linux Standard Base information for the system.
#
# This fact is structured. These values are returned as a group of key-value pairs.
#
# Resolution:
# For the name entry, if the kernel is a Linux kernel, check for the existence of a
# selection of files in `/etc` to find the specific flavor.
# On SunOS based kernels, attempt to determine the flavor, otherwise return Solaris.
# On systems other than Linux, use the kernel value.
#
# For the family entry, map operating systems to operating system families, such
# as linux distribution derivatives. Adds mappings from specific operating systems
# to kernels in the case that it is relevant.
#
# For the release entry, on RedHat derivatives, returns `/etc/<variant>-release` file.
# On Debian, returns `/etc/debian_version`.
# On Ubuntu, parses `/etc/lsb-release` for the release version
# On Suse and derivatives, parses `/etc/SuSE-release` for a selection of version
# information.
# On Slackware, parses `/etc/slackware-version`.
# On Amazon Linux, returns the lsbdistrelease fact's value.
# On Mageia, parses `/etc/mageia-release` for the release version.
# On all remaining systems, returns the kernelrelease fact's value.
#
# For the major version, uses the value of the full release string to determine the major
# release version.
# In RedHat osfamily derivatives and Debian, splits down the release string for a decimal point
# and uses the first non-decimal character.
# In Solaris, uses the first non-decimal character of the release string.
# In Ubuntu, uses the characters before and after the first decimal point, as in '14.04'.
# In Windows, uses the full release string in the case of server releases, such as '2012 R2',
# and uses the first non-decimal character in the cases of releases such as '8.1'.
#
# For the minor version, attempts to split the full release version string and return
# the value of the character after the first decimal.
#
# For the lsb entries, uses the `lsb_release` system command.
#
# Caveats:
# The family entry is completely reliant on the name key, and no heuristics are used.
#
# The major and minor release sub-facts of the release entry are not currenty
# supported on all platforms.
#
# The lsb entries only work on Linux (and the kfreebsd derivative) systems. Requires
# the `lsb_release` program, which may not be installed by default. It is only as
# accurate as the output of `lsb_release`.
#
require 'facter/operatingsystem/implementation'
Facter.add(:os, :type => :aggregate) do
def os
@os ||= Facter::Operatingsystem.implementation
end
chunk(:name) do
os_hash = {}
if (operatingsystem = os.get_operatingsystem)
os_hash["name"] = operatingsystem
os_hash
end
end
chunk(:family) do
os_hash = {}
if (osfamily = os.get_osfamily)
os_hash["family"] = osfamily
os_hash
end
end
chunk(:release) do
os_hash = {}
if (releasedata = os.get_operatingsystemrelease_hash)
os_hash["release"] = releasedata
os_hash unless os_hash["release"].empty?
end
end
chunk(:lsb) do
os_hash = {}
if os.has_lsb?
if (lsbdata = os.get_lsb_facts_hash)
os_hash["lsb"] = lsbdata
os_hash unless os_hash["lsb"].empty?
end
end
end
end