-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bring train platform data more in line with ohai's platform data #126
Changes from 3 commits
2f4fdc3
b644f6f
c2b2963
a780ee2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,96 +9,108 @@ | |
# | ||
|
||
require 'train/extras/linux_lsb' | ||
require 'train/extras/uname' | ||
|
||
module Train::Extras | ||
module DetectLinux # rubocop:disable Metrics/ModuleLength | ||
DEBIAN_FAMILY = %w{debian ubuntu linuxmint raspbian}.freeze | ||
REDHAT_FAMILY = %w{centos redhat oracle scientific enterpriseenterprise xenserver cloudlinux ibm_powerkvm nexus_centos wrlinux}.freeze | ||
SUSE_FAMILY = %w{suse opensuse}.freeze | ||
|
||
include Train::Extras::LinuxLSB | ||
include Train::Extras::Uname | ||
|
||
def detect_linux_via_config # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity | ||
if !(raw = get_config('oracle-release')).nil? | ||
@platform[:family] = 'oracle' | ||
@platform[:name] = 'oracle' | ||
@platform[:release] = redhatish_version(raw) | ||
elsif !(raw = get_config('/etc/enterprise-release')).nil? | ||
@platform[:family] = 'oracle' | ||
@platform[:name] = 'oracle' | ||
@platform[:release] = redhatish_version(raw) | ||
elsif !(raw = get_config('/etc/debian_version')).nil? | ||
case lsb[:id] | ||
when /ubuntu/i | ||
@platform[:family] = 'ubuntu' | ||
@platform[:name] = 'ubuntu' | ||
@platform[:release] = lsb[:release] | ||
when /linuxmint/i | ||
@platform[:family] = 'linuxmint' | ||
@platform[:name] = 'linuxmint' | ||
@platform[:release] = lsb[:release] | ||
else | ||
@platform[:family] = unix_file?('/usr/bin/raspi-config') ? 'raspbian' : 'debian' | ||
@platform[:name] = unix_file?('/usr/bin/raspi-config') ? 'raspbian' : 'debian' | ||
@platform[:release] = raw.chomp | ||
end | ||
elsif !(raw = get_config('/etc/parallels-release')).nil? | ||
@platform[:family] = redhatish_platform(raw) | ||
@platform[:name] = redhatish_platform(raw) | ||
@platform[:release] = raw[/(\d\.\d\.\d)/, 1] | ||
elsif !(raw = get_config('/etc/redhat-release')).nil? | ||
# TODO: Cisco | ||
# TODO: fully investigate os-release and integrate it; | ||
# here we just use it for centos | ||
if !(osrel = get_config('/etc/os-release')).nil? && osrel =~ /centos/i | ||
@platform[:family] = 'centos' | ||
else | ||
@platform[:family] = redhatish_platform(raw) | ||
end | ||
@platform[:name] = if !(osrel = get_config('/etc/os-release')).nil? && osrel =~ /centos/i | ||
'centos' | ||
else | ||
redhatish_platform(raw) | ||
end | ||
|
||
@platform[:release] = redhatish_version(raw) | ||
elsif !(raw = get_config('/etc/system-release')).nil? | ||
# Amazon Linux | ||
@platform[:family] = redhatish_platform(raw) | ||
@platform[:name] = redhatish_platform(raw) | ||
@platform[:release] = redhatish_version(raw) | ||
elsif !(suse = get_config('/etc/SuSE-release')).nil? | ||
version = suse.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join('.') | ||
version = suse[/VERSION = ([\d\.]{2,})/, 1] if version == '' | ||
@platform[:release] = version | ||
@platform[:family] = 'suse' | ||
@platform[:family] = 'opensuse' if suse =~ /^openSUSE/ | ||
@platform[:name] = if suse =~ /^openSUSE/ | ||
'opensuse' | ||
else | ||
'suse' | ||
end | ||
elsif !(raw = get_config('/etc/arch-release')).nil? | ||
@platform[:family] = 'arch' | ||
@platform[:name] = 'arch' | ||
# Because this is a rolling release distribution, | ||
# use the kernel release, ex. 4.1.6-1-ARCH | ||
@platform[:release] = uname_r | ||
elsif !(raw = get_config('/etc/slackware-version')).nil? | ||
@platform[:family] = 'slackware' | ||
@platform[:name] = 'slackware' | ||
@platform[:release] = raw.scan(/(\d+|\.+)/).join | ||
elsif !(raw = get_config('/etc/exherbo-release')).nil? | ||
@platform[:family] = 'exherbo' | ||
@platform[:name] = 'exherbo' | ||
# Because this is a rolling release distribution, | ||
# use the kernel release, ex. 4.1.6 | ||
@platform[:release] = uname_r | ||
elsif !(raw = get_config('/etc/gentoo-release')).nil? | ||
@platform[:family] = 'gentoo' | ||
@platform[:name] = 'gentoo' | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we add the family There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Family is set to the name if no other name is set at line 110. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perfect. Missed that. That is great! |
||
@platform[:release] = raw.scan(/(\d+|\.+)/).join | ||
elsif !(raw = get_config('/etc/alpine-release')).nil? | ||
@platform[:family] = 'alpine' | ||
@platform[:name] = 'alpine' | ||
@platform[:release] = raw.strip | ||
elsif !(raw = get_config('/etc/coreos/update.conf')).nil? | ||
@platform[:family] = 'coreos' | ||
@platform[:name] = 'coreos' | ||
meta = lsb_config(raw) | ||
@platform[:release] = meta[:release] | ||
elsif !(os_info = fetch_os_release).nil? | ||
if os_info['ID_LIKE'] =~ /wrlinux/ | ||
@platform[:family] = 'wrlinux' | ||
@platform[:name] = 'wrlinux' | ||
@platform[:release] = os_info['VERSION'] | ||
end | ||
end | ||
|
||
!@platform[:family].nil? && !@platform[:release].nil? | ||
end | ||
@platform[:family] = family_for_platform | ||
|
||
def uname_s | ||
@uname_s ||= @backend.run_command('uname -s').stdout | ||
!@platform[:family].nil? && !@platform[:release].nil? | ||
end | ||
|
||
def uname_r | ||
@uname_r ||= ( | ||
res = @backend.run_command('uname -r').stdout | ||
res.strip! unless res.nil? | ||
res | ||
) | ||
def family_for_platform | ||
if DEBIAN_FAMILY.include?(@platform[:name]) | ||
'debian' | ||
elsif REDHAT_FAMILY.include?(@platform[:name]) | ||
'redhat' | ||
elsif SUSE_FAMILY.include?(@platform[:name]) | ||
'suse' | ||
else | ||
@platform[:name] || @platform[:family] | ||
end | ||
end | ||
|
||
def redhatish_platform(conf) | ||
|
@@ -111,11 +123,16 @@ def redhatish_version(conf) | |
conf[/release ([\d\.]+)/, 1] | ||
end | ||
|
||
def detect_linux_arch | ||
@platform[:arch] = uname_m | ||
end | ||
|
||
def detect_linux | ||
# TODO: print an error in this step of the detection | ||
return false if uname_s.nil? || uname_s.empty? | ||
return false if uname_r.nil? || uname_r.empty? | ||
|
||
detect_linux_arch | ||
return true if detect_linux_via_config | ||
return true if detect_linux_via_lsb | ||
# in all other cases we failed the detection | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# encoding: utf-8 | ||
# author: Dominik Richter | ||
# author: Christoph Hartmann | ||
# | ||
# This is heavily based on: | ||
# | ||
# OHAI https://github.com/chef/ohai | ||
# by Adam Jacob, Chef Software Inc | ||
# | ||
module Train::Extras | ||
module Uname | ||
def uname_s | ||
@uname_s ||= backend.run_command('uname -s').stdout | ||
end | ||
|
||
def uname_r | ||
@uname_r ||= begin | ||
res = backend.run_command('uname -r').stdout | ||
res.strip! unless res.nil? | ||
res | ||
end | ||
end | ||
|
||
def uname_m | ||
@uname_m ||= backend.run_command('uname -m').stdout.chomp | ||
end | ||
end | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we have to add amazon as a platform here?