lib/facter/operatingsystemrelease.rb in facter-1.6.18 vs lib/facter/operatingsystemrelease.rb in facter-1.7.0.rc1

- old
+ new

@@ -8,21 +8,24 @@ # On Ubuntu, parses '/etc/issue' for the release version. # On Suse, derivatives, parses '/etc/SuSE-release' for a selection of version # information. # On Slackware, parses '/etc/slackware-version'. # On Amazon Linux, returns the 'lsbdistrelease' value. +# On Mageia, parses '/etc/mageia-release' for the release version. # # On all remaining systems, returns the 'kernelrelease' value. # # Caveats: # +require 'facter/util/file_read' + Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{CentOS Fedora oel ovs OracleLinux RedHat MeeGo Scientific SLC Ascendos CloudLinux PSBM} setcode do case Facter.value(:operatingsystem) - when "CentOS", "RedHat", "Scientific", "SLC", "Ascendos", "CloudLinux", "PSBM" + when "CentOS", "RedHat", "Scientific", "SLC", "Ascendos", "CloudLinux", "PSBM", "XenServer" releasefile = "/etc/redhat-release" when "Fedora" releasefile = "/etc/fedora-release" when "MeeGo" releasefile = "/etc/meego-release" @@ -31,111 +34,159 @@ when "OEL", "oel" releasefile = "/etc/enterprise-release" when "OVS", "ovs" releasefile = "/etc/ovs-release" end - File::open(releasefile, "r") do |f| - line = f.readline.chomp - if line =~ /\(Rawhide\)$/ + + if release = Facter::Util::FileRead.read(releasefile) + line = release.split("\n").first.chomp + if match = /\(Rawhide\)$/.match(line) "Rawhide" - elsif line =~ /release (\d[\d.]*)/ - $1 + elsif match = /release (\d[\d.]*)/.match(line) + match[1] end end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{Debian} setcode do - release = Facter::Util::Resolution.exec('cat /etc/debian_version') + if release = Facter::Util::FileRead.read('/etc/debian_version') + release.sub!(/\s*$/, '') + release + end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{Ubuntu} setcode do - release = Facter::Util::Resolution.exec('cat /etc/issue') - if release =~ /Ubuntu (\d+.\d+)/ - $1 + if release = Facter::Util::FileRead.read('/etc/issue') + if match = release.match(/Ubuntu ((\d+.\d+)(\.(\d+))?)/) + # Return only the major and minor version numbers. This behavior must + # be preserved for compatibility reasons. + match[2] + end end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{SLES SLED OpenSuSE} setcode do - releasefile = Facter::Util::Resolution.exec('cat /etc/SuSE-release') - if releasefile =~ /^VERSION\s*=\s*(\d+)/ - releasemajor = $1 - if releasefile =~ /^PATCHLEVEL\s*=\s*(\d+)/ - releaseminor = $1 - elsif releasefile =~ /^VERSION\s=.*.(\d+)/ - releaseminor = $1 + if release = Facter::Util::FileRead.read('/etc/SuSE-release') + if match = /^VERSION\s*=\s*(\d+)/.match(release) + releasemajor = match[1] + if match = /^PATCHLEVEL\s*=\s*(\d+)/.match(release) + releaseminor = match[1] + elsif match = /^VERSION\s=.*.(\d+)/.match(release) + releaseminor = match[1] + else + releaseminor = "0" + end + releasemajor + "." + releaseminor else - releaseminor = "0" + "unknown" end - releasemajor + "." + releaseminor - else - "unknown" end end end Facter.add(:operatingsystemrelease) do + confine :operatingsystem => %w{OpenWrt} + setcode do + if release = Facter::Util::FileRead.read('/etc/openwrt_version') + if match = /^(\d+\.\d+.*)/.match(release) + match[1] + end + end + end +end + +Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{Slackware} setcode do - release = Facter::Util::Resolution.exec('cat /etc/slackware-version') - if release =~ /Slackware ([0-9.]+)/ - $1 + if release = Facter::Util::FileRead.read('/etc/slackware-version') + if match = /Slackware ([0-9.]+)/.match(release) + match[1] + end end end end Facter.add(:operatingsystemrelease) do + confine :operatingsystem => %w{Mageia} + setcode do + if release = Facter::Util::FileRead.read('/etc/mageia-release') + if match = /Mageia release ([0-9.]+)/.match(release) + match[1] + end + end + end +end + +Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{Bluewhite64} setcode do - releasefile = Facter::Util::Resolution.exec('cat /etc/bluewhite64-version') - if releasefile =~ /^\s*\w+\s+(\d+)\.(\d+)/ - $1 + "." + $2 - else - "unknown" + if release = Facter::Util::FileRead.read('/etc/bluewhite64-version') + if match = /^\s*\w+\s+(\d+)\.(\d+)/.match(release) + match[1] + "." + match[2] + else + "unknown" + end end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{VMwareESX} setcode do release = Facter::Util::Resolution.exec('vmware -v') - if release =~ /VMware ESX .*?(\d.*)/ - $1 + if match = /VMware ESX .*?(\d.*)/.match(release) + match[1] end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{Slamd64} setcode do - releasefile = Facter::Util::Resolution.exec('cat /etc/slamd64-version') - if releasefile =~ /^\s*\w+\s+(\d+)\.(\d+)/ - $1 + "." + $2 - else - "unknown" + if release = Facter::Util::FileRead.read('/etc/slamd64-version') + if match = /^\s*\w+\s+(\d+)\.(\d+)/.match(release) + match[1] + "." + match[2] + else + "unknown" + end end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => :Alpine setcode do - File.read('/etc/alpine-release') + if release = Facter::Util::FileRead.read('/etc/alpine-release') + release.sub!(/\s*$/, '') + release + end end end Facter.add(:operatingsystemrelease) do confine :operatingsystem => %W{Amazon} setcode do Facter[:lsbdistrelease].value end +end + +Facter.add(:operatingsystemrelease) do + confine :osfamily => :solaris + setcode do + if release = Facter::Util::FileRead.read('/etc/release') + line = release.split("\n").first.chomp + if match = /\s+s(\d+)[sx]?(_u\d+)?.*(?:SPARC|X86)/.match(line) + match.captures.join('') + end + end + end end Facter.add(:operatingsystemrelease) do setcode do Facter[:kernelrelease].value end end