lib/ohai/plugins/linux/platform.rb in ohai-8.5.0 vs lib/ohai/plugins/linux/platform.rb in ohai-8.5.1

- old
+ new

@@ -1,152 +1,152 @@ -# -# Author:: Adam Jacob (<adam@chef.io>) -# Copyright:: Copyright (c) 2015 Chef Software, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -Ohai.plugin(:Platform) do - provides "platform", "platform_version", "platform_family" - depends "lsb" - - def get_redhatish_platform(contents) - contents[/^Red Hat/i] ? "redhat" : contents[/(\w+)/i, 1].downcase - end - - def get_redhatish_version(contents) - contents[/Rawhide/i] ? contents[/((\d+) \(Rawhide\))/i, 1].downcase : contents[/release ([\d\.]+)/, 1] - end - - def os_release_file_is_cisco? - return false unless File.exist?('/etc/os-release') - os_release_info = File.read('/etc/os-release').split.inject({}) do |map, key_value_line| - key, _separator, value = key_value_line.partition('=') - map[key] = value - map - end - if os_release_info['CISCO_RELEASE_INFO'] && File.exist?(os_release_info['CISCO_RELEASE_INFO']) - os_release_info - else - false - end - end - - collect_data(:linux) do - # platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching - if File.exist?("/etc/oracle-release") - contents = File.read("/etc/oracle-release").chomp - platform "oracle" - platform_version get_redhatish_version(contents) - elsif File.exist?("/etc/enterprise-release") - contents = File.read("/etc/enterprise-release").chomp - platform "oracle" - platform_version get_redhatish_version(contents) - elsif File.exist?("/etc/debian_version") - # Ubuntu and Debian both have /etc/debian_version - # Ubuntu should always have a working lsb, debian does not by default - if lsb[:id] =~ /Ubuntu/i - platform "ubuntu" - platform_version lsb[:release] - elsif lsb[:id] =~ /LinuxMint/i - platform "linuxmint" - platform_version lsb[:release] - else - if File.exist?("/usr/bin/raspi-config") - platform "raspbian" - else - platform "debian" - end - platform_version File.read("/etc/debian_version").chomp - end - elsif File.exist?("/etc/parallels-release") - contents = File.read("/etc/parallels-release").chomp - platform get_redhatish_platform(contents) - platform_version contents.match(/(\d\.\d\.\d)/)[0] - elsif File.exist?("/etc/redhat-release") - if File.exist?('/etc/os-release') && (os_release_info = os_release_file_is_cisco? ) # check if Cisco - platform os_release_info['ID'] - platform_family os_release_info['ID_LIKE'] - platform_version os_release_info['VERSION'] || "" - else - contents = File.read("/etc/redhat-release").chomp - platform get_redhatish_platform(contents) - platform_version get_redhatish_version(contents) - end - elsif File.exist?("/etc/system-release") - contents = File.read("/etc/system-release").chomp - platform get_redhatish_platform(contents) - platform_version get_redhatish_version(contents) - elsif File.exist?('/etc/gentoo-release') - platform "gentoo" - platform_version File.read('/etc/gentoo-release').scan(/(\d+|\.+)/).join - elsif File.exist?('/etc/SuSE-release') - suse_release = File.read("/etc/SuSE-release") - suse_version = suse_release.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join(".") - suse_version = suse_release[/VERSION = ([\d\.]{2,})/, 1] if suse_version == "" - platform_version suse_version - if suse_release =~ /^openSUSE/ - platform "opensuse" - else - platform "suse" - end - elsif File.exist?('/etc/slackware-version') - platform "slackware" - platform_version File.read("/etc/slackware-version").scan(/(\d+|\.+)/).join - elsif File.exist?('/etc/arch-release') - platform "arch" - # no way to determine platform_version in a rolling release distribution - # kernel release will be used - ex. 2.6.32-ARCH - platform_version `uname -r`.strip - elsif File.exist?('/etc/exherbo-release') - platform "exherbo" - # no way to determine platform_version in a rolling release distribution - # kernel release will be used - ex. 3.13 - platform_version `uname -r`.strip - elsif lsb[:id] =~ /RedHat/i - platform "redhat" - platform_version lsb[:release] - elsif lsb[:id] =~ /Amazon/i - platform "amazon" - platform_version lsb[:release] - elsif lsb[:id] =~ /ScientificSL/i - platform "scientific" - platform_version lsb[:release] - elsif lsb[:id] =~ /XenServer/i - platform "xenserver" - platform_version lsb[:release] - elsif lsb[:id] # LSB can provide odd data that changes between releases, so we currently fall back on it rather than dealing with its subtleties - platform lsb[:id].downcase - platform_version lsb[:release] - end - - case platform - when /debian/, /ubuntu/, /linuxmint/, /raspbian/ - platform_family "debian" - when /fedora/, /pidora/ - platform_family "fedora" - when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /amazon/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID" - platform_family "rhel" - when /suse/ - platform_family "suse" - when /gentoo/ - platform_family "gentoo" - when /slackware/ - platform_family "slackware" - when /arch/ - platform_family "arch" - when /exherbo/ - platform_family "exherbo" - end - end -end +# +# Author:: Adam Jacob (<adam@chef.io>) +# Copyright:: Copyright (c) 2015 Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +Ohai.plugin(:Platform) do + provides "platform", "platform_version", "platform_family" + depends "lsb" + + def get_redhatish_platform(contents) + contents[/^Red Hat/i] ? "redhat" : contents[/(\w+)/i, 1].downcase + end + + def get_redhatish_version(contents) + contents[/Rawhide/i] ? contents[/((\d+) \(Rawhide\))/i, 1].downcase : contents[/release ([\d\.]+)/, 1] + end + + def os_release_file_is_cisco? + return false unless File.exist?('/etc/os-release') + os_release_info = File.read('/etc/os-release').split.inject({}) do |map, key_value_line| + key, _separator, value = key_value_line.partition('=') + map[key] = value + map + end + if os_release_info['CISCO_RELEASE_INFO'] && File.exist?(os_release_info['CISCO_RELEASE_INFO']) + os_release_info + else + false + end + end + + collect_data(:linux) do + # platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching + if File.exist?("/etc/oracle-release") + contents = File.read("/etc/oracle-release").chomp + platform "oracle" + platform_version get_redhatish_version(contents) + elsif File.exist?("/etc/enterprise-release") + contents = File.read("/etc/enterprise-release").chomp + platform "oracle" + platform_version get_redhatish_version(contents) + elsif File.exist?("/etc/debian_version") + # Ubuntu and Debian both have /etc/debian_version + # Ubuntu should always have a working lsb, debian does not by default + if lsb[:id] =~ /Ubuntu/i + platform "ubuntu" + platform_version lsb[:release] + elsif lsb[:id] =~ /LinuxMint/i + platform "linuxmint" + platform_version lsb[:release] + else + if File.exist?("/usr/bin/raspi-config") + platform "raspbian" + else + platform "debian" + end + platform_version File.read("/etc/debian_version").chomp + end + elsif File.exist?("/etc/parallels-release") + contents = File.read("/etc/parallels-release").chomp + platform get_redhatish_platform(contents) + platform_version contents.match(/(\d\.\d\.\d)/)[0] + elsif File.exist?("/etc/redhat-release") + if File.exist?('/etc/os-release') && (os_release_info = os_release_file_is_cisco? ) # check if Cisco + platform os_release_info['ID'] + platform_family os_release_info['ID_LIKE'] + platform_version os_release_info['VERSION'] || "" + else + contents = File.read("/etc/redhat-release").chomp + platform get_redhatish_platform(contents) + platform_version get_redhatish_version(contents) + end + elsif File.exist?("/etc/system-release") + contents = File.read("/etc/system-release").chomp + platform get_redhatish_platform(contents) + platform_version get_redhatish_version(contents) + elsif File.exist?('/etc/gentoo-release') + platform "gentoo" + platform_version File.read('/etc/gentoo-release').scan(/(\d+|\.+)/).join + elsif File.exist?('/etc/SuSE-release') + suse_release = File.read("/etc/SuSE-release") + suse_version = suse_release.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join(".") + suse_version = suse_release[/VERSION = ([\d\.]{2,})/, 1] if suse_version == "" + platform_version suse_version + if suse_release =~ /^openSUSE/ + platform "opensuse" + else + platform "suse" + end + elsif File.exist?('/etc/slackware-version') + platform "slackware" + platform_version File.read("/etc/slackware-version").scan(/(\d+|\.+)/).join + elsif File.exist?('/etc/arch-release') + platform "arch" + # no way to determine platform_version in a rolling release distribution + # kernel release will be used - ex. 2.6.32-ARCH + platform_version `uname -r`.strip + elsif File.exist?('/etc/exherbo-release') + platform "exherbo" + # no way to determine platform_version in a rolling release distribution + # kernel release will be used - ex. 3.13 + platform_version `uname -r`.strip + elsif lsb[:id] =~ /RedHat/i + platform "redhat" + platform_version lsb[:release] + elsif lsb[:id] =~ /Amazon/i + platform "amazon" + platform_version lsb[:release] + elsif lsb[:id] =~ /ScientificSL/i + platform "scientific" + platform_version lsb[:release] + elsif lsb[:id] =~ /XenServer/i + platform "xenserver" + platform_version lsb[:release] + elsif lsb[:id] # LSB can provide odd data that changes between releases, so we currently fall back on it rather than dealing with its subtleties + platform lsb[:id].downcase + platform_version lsb[:release] + end + + case platform + when /debian/, /ubuntu/, /linuxmint/, /raspbian/ + platform_family "debian" + when /fedora/, /pidora/ + platform_family "fedora" + when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /amazon/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID" + platform_family "rhel" + when /suse/ + platform_family "suse" + when /gentoo/ + platform_family "gentoo" + when /slackware/ + platform_family "slackware" + when /arch/ + platform_family "arch" + when /exherbo/ + platform_family "exherbo" + end + end +end