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