ohey 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +12 -0
- data/README.md +48 -0
- data/Rakefile +13 -0
- data/lib/ohey.rb +65 -0
- data/lib/ohey/aix.rb +30 -0
- data/lib/ohey/darwin.rb +38 -0
- data/lib/ohey/dragonflybsd.rb +31 -0
- data/lib/ohey/freebsd.rb +31 -0
- data/lib/ohey/linux.rb +355 -0
- data/lib/ohey/netbsd.rb +31 -0
- data/lib/ohey/openbsd.rb +31 -0
- data/lib/ohey/solaris2.rb +72 -0
- data/lib/ohey/version.rb +4 -0
- data/lib/ohey/windows.rb +50 -0
- data/ohey.gemspec +19 -0
- data/spec/aix_spec.rb +35 -0
- data/spec/darwin_spec.rb +37 -0
- data/spec/dragonflybsd_spec.rb +34 -0
- data/spec/freebsd_spec.rb +34 -0
- data/spec/linux_spec.rb +739 -0
- data/spec/netbsd_spec.rb +34 -0
- data/spec/ohey_spec.rb +20 -0
- data/spec/openbsd_spec.rb +34 -0
- data/spec/solaris2_spec.rb +256 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/windows_spec.rb +41 -0
- metadata +85 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: be4a504ad45c9b823a322a0188a8465c1292b134bdf7bd1b38b934603fdb673c
|
4
|
+
data.tar.gz: fe51f5f4830d81076345ca34e96a0d45468ff1b663888df46539879624972705
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 26a70e6bd74c5ca7133508314abf60111074dbc0140a1b280e7ad94645f625ef50bc4024df2aca323422e6c2aaab2654d5fd02a48d4b407f033131800497d697
|
7
|
+
data.tar.gz: 71fc54090e382023f9a88741af850c4ae50544e35fd2a72551efd36d16222f5b047b6728e278c8228a3fbb04e19661cd56f33fd51822dadcb170caf867214c99
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
[](https://travis-ci.com/camertron/ohey)
|
2
|
+
|
3
|
+
## ohey
|
4
|
+
A rewrite of the platform detection logic in ohai, but with fewer dependencies and 100% less metaprogramming.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Install ohey by running `gem install ohey` or by adding it to your Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'ohey', '~> 1.0'
|
12
|
+
```
|
13
|
+
|
14
|
+
## Usage
|
15
|
+
|
16
|
+
### Detecting the current platform:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
platform = Ohey.current_platform
|
20
|
+
|
21
|
+
platform.name # => "mac_os_x"
|
22
|
+
platform.family # => "mac_os_x
|
23
|
+
platform.build # => "19H1030"
|
24
|
+
platform.version # => "10.15.7"
|
25
|
+
```
|
26
|
+
|
27
|
+
### Registering a new platform:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
Ohey.register_platform(:name, PlatformClass.new)
|
31
|
+
```
|
32
|
+
|
33
|
+
The second argument must respond to the `name`, `family`, `build`, and `version` methods.
|
34
|
+
|
35
|
+
### Listing Registered Plaforms
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
Ohey.registered_platforms # => {:darwin=>#<Ohey::Darwin:0x00007ff9d51f1ef0>, ...}
|
39
|
+
```
|
40
|
+
|
41
|
+
## License
|
42
|
+
|
43
|
+
Licensed under the MIT license. See LICENSE for details.
|
44
|
+
|
45
|
+
## Authors
|
46
|
+
|
47
|
+
* The numerous authors who contributed to https://github.com/chef/ohai.
|
48
|
+
* Adapted by Cameron C. Dutro: https://github.com/camertron
|
data/Rakefile
ADDED
data/lib/ohey.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
module Ohey
|
2
|
+
autoload :Aix, 'ohey/aix'
|
3
|
+
autoload :Darwin, 'ohey/darwin'
|
4
|
+
autoload :DragonflyBSD, 'ohey/dragonflybsd'
|
5
|
+
autoload :FreeBSD, 'ohey/freebsd'
|
6
|
+
autoload :Linux, 'ohey/linux'
|
7
|
+
autoload :NetBSD, 'ohey/netbsd'
|
8
|
+
autoload :OpenBSD, 'ohey/openbsd'
|
9
|
+
autoload :Solaris2, 'ohey/solaris2'
|
10
|
+
autoload :Windows, 'ohey/windows'
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def current_platform
|
14
|
+
registered_platforms[os]
|
15
|
+
end
|
16
|
+
|
17
|
+
def register_platform(name, klass)
|
18
|
+
registered_platforms[name] = klass
|
19
|
+
end
|
20
|
+
|
21
|
+
def registered_platforms
|
22
|
+
@registered_platforms ||= {}
|
23
|
+
end
|
24
|
+
|
25
|
+
def os
|
26
|
+
case ::RbConfig::CONFIG['host_os']
|
27
|
+
when /aix(.+)$/
|
28
|
+
:aix
|
29
|
+
when /darwin(.+)$/
|
30
|
+
:darwin
|
31
|
+
when /linux/
|
32
|
+
:linux
|
33
|
+
when /freebsd(.+)$/
|
34
|
+
:freebsd
|
35
|
+
when /openbsd(.+)$/
|
36
|
+
:openbsd
|
37
|
+
when /netbsd(.*)$/
|
38
|
+
:netbsd
|
39
|
+
when /dragonfly(.*)$/
|
40
|
+
:dragonflybsd
|
41
|
+
when /solaris2/
|
42
|
+
:solaris2
|
43
|
+
when /mswin|mingw32|windows/
|
44
|
+
# After long discussion in IRC the "powers that be" have come to a consensus
|
45
|
+
# that no Windows platform exists that was not based on the
|
46
|
+
# Windows_NT kernel, so we herby decree that "windows" will refer to all
|
47
|
+
# platforms built upon the Windows_NT kernel and have access to win32 or win64
|
48
|
+
# subsystems.
|
49
|
+
:windows
|
50
|
+
else
|
51
|
+
::RbConfig::CONFIG['host_os'].to_sym
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
Ohey.register_platform(:aix, Ohey::Aix.new)
|
58
|
+
Ohey.register_platform(:darwin, Ohey::Darwin.new)
|
59
|
+
Ohey.register_platform(:dragonflybsd, Ohey::DragonflyBSD.new)
|
60
|
+
Ohey.register_platform(:freebsd, Ohey::FreeBSD.new)
|
61
|
+
Ohey.register_platform(:linux, Ohey::Linux.new)
|
62
|
+
Ohey.register_platform(:netbsd, Ohey::NetBSD.new)
|
63
|
+
Ohey.register_platform(:openbsd, Ohey::OpenBSD.new)
|
64
|
+
Ohey.register_platform(:solaris2, Ohey::Solaris2.new)
|
65
|
+
Ohey.register_platform(:windows, Ohey::Windows.new)
|
data/lib/ohey/aix.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Ohey
|
2
|
+
class Aix
|
3
|
+
NAME = 'aix'.freeze
|
4
|
+
FAMILY = 'aix'.freeze
|
5
|
+
|
6
|
+
def name
|
7
|
+
NAME
|
8
|
+
end
|
9
|
+
|
10
|
+
def family
|
11
|
+
FAMILY
|
12
|
+
end
|
13
|
+
|
14
|
+
def build
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def version
|
19
|
+
@version ||= begin
|
20
|
+
release = uname_rvp[0]
|
21
|
+
version = uname_rvp[1]
|
22
|
+
[version, release].join(".")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def uname_rvp
|
27
|
+
@uname_rvp ||= `uname -rvp`.split
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/ohey/darwin.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ohey
|
2
|
+
class Darwin
|
3
|
+
NAME = 'mac_os_x'.freeze
|
4
|
+
FAMILY = 'mac_os_x'.freeze
|
5
|
+
|
6
|
+
def name
|
7
|
+
NAME
|
8
|
+
end
|
9
|
+
|
10
|
+
def family
|
11
|
+
FAMILY
|
12
|
+
end
|
13
|
+
|
14
|
+
def build
|
15
|
+
@build ||= sw_vers.each do |line|
|
16
|
+
case line
|
17
|
+
when /^BuildVersion:\s+(.+)$/
|
18
|
+
break $1
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def version
|
24
|
+
@version ||= sw_vers.each do |line|
|
25
|
+
case line
|
26
|
+
when /^ProductVersion:\s+(.+)$/
|
27
|
+
break $1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def sw_vers
|
35
|
+
@sw_vers ||= `/usr/bin/sw_vers`.split("\n")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Ohey
|
2
|
+
class DragonflyBSD
|
3
|
+
FAMILY = 'dragonflybsd'.freeze
|
4
|
+
|
5
|
+
def name
|
6
|
+
@name ||= uname_s.strip.downcase
|
7
|
+
end
|
8
|
+
|
9
|
+
def version
|
10
|
+
@version ||= uname_r.strip
|
11
|
+
end
|
12
|
+
|
13
|
+
def build
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def family
|
18
|
+
FAMILY
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def uname_s
|
24
|
+
@uname_s ||= `uname -s`
|
25
|
+
end
|
26
|
+
|
27
|
+
def uname_r
|
28
|
+
@uname_r ||= `uname -r`
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ohey/freebsd.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Ohey
|
2
|
+
class FreeBSD
|
3
|
+
FAMILY = 'freebsd'.freeze
|
4
|
+
|
5
|
+
def name
|
6
|
+
@name ||= uname_s.strip.downcase
|
7
|
+
end
|
8
|
+
|
9
|
+
def version
|
10
|
+
@version ||= uname_r.strip
|
11
|
+
end
|
12
|
+
|
13
|
+
def build
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def family
|
18
|
+
FAMILY
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def uname_s
|
24
|
+
@uname_s ||= `uname -s`
|
25
|
+
end
|
26
|
+
|
27
|
+
def uname_r
|
28
|
+
@uname_r ||= `uname -r`
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ohey/linux.rb
ADDED
@@ -0,0 +1,355 @@
|
|
1
|
+
module Ohey
|
2
|
+
class Linux
|
3
|
+
OS_RELEASE_PATH = '/etc/os-release'.freeze
|
4
|
+
ORACLE_RELEASE_PATH = '/etc/oracle-release'.freeze
|
5
|
+
ENTERPRISE_RELEASE_PATH = '/etc/enterprise-release'.freeze
|
6
|
+
F5_RELEASE_PATH = '/etc/f5-release'.freeze
|
7
|
+
DEBIAN_VERSION_PATH = '/etc/debian_version'.freeze
|
8
|
+
PARALLELS_RELEASE_PATH = '/etc/parallels-release'.freeze
|
9
|
+
EOS_RELEASE_PATH = '/etc/Eos-release'.freeze
|
10
|
+
REDHAT_RELEASE_PATH = '/etc/redhat-release'.freeze
|
11
|
+
SYSTEM_RELEASE_PATH = '/etc/system-release'.freeze
|
12
|
+
SUSE_RELEASE_PATH = '/etc/SuSE-release'.freeze
|
13
|
+
SLACKWARE_VERSION_PATH = '/etc/slackware-version'.freeze
|
14
|
+
EXHERBO_RELEASE_PATH = '/etc/exherbo-release'.freeze
|
15
|
+
CLEARLINUX_RELEASE_PATH = '/usr/lib/os-release'.freeze
|
16
|
+
|
17
|
+
# the platform mappings between the 'ID' field in /etc/os-release and the value
|
18
|
+
# ohai uses. If you're adding a new platform here and you want to change the name
|
19
|
+
# you'll want to add it here and then add a spec for the platform_id_remap method
|
20
|
+
PLATFORM_ID_MAP = {
|
21
|
+
'alinux' => 'alibabalinux',
|
22
|
+
'amzn' => 'amazon',
|
23
|
+
'archarm' => 'arch',
|
24
|
+
'cumulus-linux' => 'cumulus',
|
25
|
+
'ol' => 'oracle',
|
26
|
+
'opensuse-leap' => 'opensuseleap',
|
27
|
+
'rhel' => 'redhat',
|
28
|
+
'sles_sap' => 'suse',
|
29
|
+
'sles' => 'suse',
|
30
|
+
'xenenterprise' => 'xenserver',
|
31
|
+
}
|
32
|
+
|
33
|
+
PLATFORM_ID_MAP.freeze
|
34
|
+
|
35
|
+
def name
|
36
|
+
@name ||= if os_release_exists?
|
37
|
+
platform_id_remap(os_release_info['ID'])
|
38
|
+
else
|
39
|
+
legacy_platform_detection
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def family
|
44
|
+
case name
|
45
|
+
when /ubuntu/, /debian/, /linuxmint/, /raspbian/, /cumulus/, /kali/, /pop/
|
46
|
+
# apt-get+dpkg almost certainly goes here
|
47
|
+
'debian'
|
48
|
+
when /centos/, /redhat/, /oracle/, /almalinux/, /rocky/, /scientific/, /enterpriseenterprise/, /xenserver/, /xcp-ng/, /cloudlinux/, /alibabalinux/, /sangoma/, /clearos/, /parallels/, /ibm_powerkvm/, /nexus_centos/, /bigip/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
|
49
|
+
# NOTE: "rhel" should be reserved exclusively for recompiled rhel
|
50
|
+
# versions that are nearly perfectly compatible down to the
|
51
|
+
# platform_version. The operating systems that are "rhel" should
|
52
|
+
# all be as compatible as rhel7 = centos7 = oracle7 = scientific7
|
53
|
+
# (98%-ish core RPM version compatibility and the version numbers
|
54
|
+
# MUST track the upstream). The appropriate EPEL version repo should
|
55
|
+
# work nearly perfectly. Some variation like the oracle kernel
|
56
|
+
# version differences and tuning and extra packages are clearly
|
57
|
+
# acceptable. Almost certainly some distros above (xenserver?)
|
58
|
+
# should not be in this list. Please use fedora, below, instead.
|
59
|
+
# Also note that this is the only platform_family with this strict
|
60
|
+
# of a rule, see the example of the debian platform family for how
|
61
|
+
# the rest of the platform_family designations should be used.
|
62
|
+
#
|
63
|
+
# TODO: when XCP-NG 7.4 support ends we can remove the xcp-ng match.
|
64
|
+
# 7.5+ reports as xenenterprise which we remap to xenserver.
|
65
|
+
'rhel'
|
66
|
+
when /amazon/
|
67
|
+
'amazon'
|
68
|
+
when /suse/, /sles/, /opensuseleap/, /opensuse/, /sled/
|
69
|
+
'suse'
|
70
|
+
when /fedora/, /arista_eos/
|
71
|
+
# In the broadest sense: RPM-based, fedora-derived distributions
|
72
|
+
# which are not strictly re-compiled RHEL (if it uses RPMs, and
|
73
|
+
# smells more like redhat and less like SuSE it probably goes here).
|
74
|
+
'fedora'
|
75
|
+
when /nexus/, /ios_xr/
|
76
|
+
'wrlinux'
|
77
|
+
when /gentoo/
|
78
|
+
'gentoo'
|
79
|
+
when /arch/, /manjaro/
|
80
|
+
'arch'
|
81
|
+
when /exherbo/
|
82
|
+
'exherbo'
|
83
|
+
when /alpine/
|
84
|
+
'alpine'
|
85
|
+
when /clearlinux/
|
86
|
+
'clearlinux'
|
87
|
+
when /mangeia/
|
88
|
+
'mandriva'
|
89
|
+
when /slackware/
|
90
|
+
'slackware'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def build
|
95
|
+
nil
|
96
|
+
end
|
97
|
+
|
98
|
+
def version
|
99
|
+
@version ||= if os_release_exists?
|
100
|
+
# Grab the version from the VERSION_ID field and use the kernel release if that's not
|
101
|
+
# available. It should be there for everything, but rolling releases like arch / gentoo
|
102
|
+
# where we've traditionally used the kernel as the version
|
103
|
+
|
104
|
+
# centos only includes the major version in os-release for some reason
|
105
|
+
if os_release_info['ID'] == 'centos'
|
106
|
+
get_redhatish_version(redhat_release)
|
107
|
+
# debian testing and unstable don't have VERSION_ID set
|
108
|
+
elsif os_release_info['ID'] == 'debian'
|
109
|
+
os_release_info['VERSION_ID'] || debian_version
|
110
|
+
else
|
111
|
+
os_release_info['VERSION_ID'] || uname_r.strip
|
112
|
+
end
|
113
|
+
else
|
114
|
+
legacy_platform_version_detection
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def uname_r
|
121
|
+
@uname_r ||= `/bin/uname -r`
|
122
|
+
end
|
123
|
+
|
124
|
+
def os_release_file_is_cisco?
|
125
|
+
os_release_exists? && os_release_info['CISCO_RELEASE_INFO']
|
126
|
+
end
|
127
|
+
|
128
|
+
# our platform names don't match os-release. given a time machine they would but ohai
|
129
|
+
# came before the os-release file. This method remaps the os-release names to
|
130
|
+
# the ohai names
|
131
|
+
def platform_id_remap(id)
|
132
|
+
# this catches the centos guest shell in the nexus switch which identifies itself as centos
|
133
|
+
return "nexus_centos" if id == "centos" && os_release_file_is_cisco?
|
134
|
+
|
135
|
+
PLATFORM_ID_MAP[id.downcase] || id.downcase
|
136
|
+
end
|
137
|
+
|
138
|
+
def read_release_info(file)
|
139
|
+
return nil unless File.exist?(file)
|
140
|
+
|
141
|
+
File.read(file).split.inject({}) do |map, line|
|
142
|
+
key, value = line.split("=")
|
143
|
+
map[key] = value.gsub(/\A"|"\Z/, "") if value
|
144
|
+
map
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def os_release_info
|
149
|
+
@os_release_info ||= read_release_info(OS_RELEASE_PATH).tap do |release_info|
|
150
|
+
cisco_release_info = release_info['CISCO_RELEASE_INFO'] if release_info
|
151
|
+
|
152
|
+
if cisco_release_info && File.exist?(cisco_release_info)
|
153
|
+
release_info.merge!(read_os_release_info(cisco_release_info))
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def os_release_exists?
|
159
|
+
File.exist?(OS_RELEASE_PATH)
|
160
|
+
end
|
161
|
+
|
162
|
+
def lsb
|
163
|
+
@lsb ||= {}.tap do |attrs|
|
164
|
+
lsb_release_a.split("\n").each do |line|
|
165
|
+
case line
|
166
|
+
when /^Distributor ID:\s+(.+)/
|
167
|
+
attrs[:id] = $1
|
168
|
+
when /^Description:\s+(.+)/
|
169
|
+
attrs[:description] = $1
|
170
|
+
when /^Release:\s+(.+)/
|
171
|
+
attrs[:release] = $1
|
172
|
+
when /^Codename:\s+(.+)/
|
173
|
+
attrs[:codename] = $1
|
174
|
+
else
|
175
|
+
attrs[:id] = line
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def lsb_release_a
|
182
|
+
@lsb_release_a ||= `lsb_release -a`
|
183
|
+
end
|
184
|
+
|
185
|
+
def bigip_version
|
186
|
+
f5_release.match(/BIG-IP release (\S*)/)[1] # http://rubular.com/r/O8nlrBVqSb
|
187
|
+
rescue NoMethodError, Errno::ENOENT, Errno::EACCES # rescue regex failure, file missing, or permission denied
|
188
|
+
puts 'Detected F5 Big-IP, but /etc/f5-release could not be parsed to determine platform_version'
|
189
|
+
nil
|
190
|
+
end
|
191
|
+
|
192
|
+
def oracle_release
|
193
|
+
@oracle_release ||= File.read(ORACLE_RELEASE_PATH).chomp
|
194
|
+
end
|
195
|
+
|
196
|
+
def enterprise_release
|
197
|
+
@enterprise_release ||= File.read(ENTERPRISE_RELEASE_PATH).chomp
|
198
|
+
end
|
199
|
+
|
200
|
+
def f5_release
|
201
|
+
@f5_release ||= File.read(F5_RELEASE_PATH)
|
202
|
+
end
|
203
|
+
|
204
|
+
def debian_version
|
205
|
+
@debian_version ||= File.read(DEBIAN_VERSION_PATH).chomp
|
206
|
+
end
|
207
|
+
|
208
|
+
def parallels_release
|
209
|
+
@parallels_release ||= File.read(PARALLELS_RELEASE_PATH).chomp
|
210
|
+
end
|
211
|
+
|
212
|
+
def eos_release
|
213
|
+
@eos_release ||= File.read(EOS_RELEASE_PATH)
|
214
|
+
end
|
215
|
+
|
216
|
+
def redhat_release
|
217
|
+
@redhat_release ||= File.read(REDHAT_RELEASE_PATH).chomp
|
218
|
+
end
|
219
|
+
|
220
|
+
def system_release
|
221
|
+
@system_release ||= File.read(SYSTEM_RELEASE_PATH).chomp
|
222
|
+
end
|
223
|
+
|
224
|
+
def suse_release
|
225
|
+
@suse_release ||= File.read(SUSE_RELEASE_PATH)
|
226
|
+
end
|
227
|
+
|
228
|
+
def slackware_version
|
229
|
+
@slackware_version ||= File.read(SLACKWARE_VERSION_PATH)
|
230
|
+
end
|
231
|
+
|
232
|
+
def clearlinux_release
|
233
|
+
@clearlinux_release ||= File.read(CLEARLINUX_RELEASE_PATH)
|
234
|
+
end
|
235
|
+
|
236
|
+
def get_redhatish_platform(contents)
|
237
|
+
contents[/^Red Hat/i] ? 'redhat' : contents[/(\w+)/i, 1].downcase
|
238
|
+
end
|
239
|
+
|
240
|
+
def get_redhatish_version(contents)
|
241
|
+
contents[/(release)? ([\d\.]+)/, 2]
|
242
|
+
end
|
243
|
+
|
244
|
+
def legacy_platform_detection
|
245
|
+
# platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching
|
246
|
+
if File.exist?(ORACLE_RELEASE_PATH) || File.exist?(ENTERPRISE_RELEASE_PATH)
|
247
|
+
'oracle'
|
248
|
+
elsif File.exist?(F5_RELEASE_PATH)
|
249
|
+
'bigip'
|
250
|
+
elsif File.exist?(DEBIAN_VERSION_PATH)
|
251
|
+
# Ubuntu and Debian both have /etc/debian_version
|
252
|
+
# Ubuntu should always have a working lsb, debian does not by default
|
253
|
+
/Ubuntu/i.match?(lsb[:id]) ? 'ubuntu' : 'debian'
|
254
|
+
elsif File.exist?(PARALLELS_RELEASE_PATH)
|
255
|
+
get_redhatish_platform(parallels_release)
|
256
|
+
elsif File.exist?(EOS_RELEASE_PATH)
|
257
|
+
'arista_eos'
|
258
|
+
elsif File.exist?(REDHAT_RELEASE_PATH)
|
259
|
+
get_redhatish_platform(redhat_release)
|
260
|
+
elsif File.exist?(SYSTEM_RELEASE_PATH)
|
261
|
+
get_redhatish_platform(system_release)
|
262
|
+
elsif File.exist?(SUSE_RELEASE_PATH)
|
263
|
+
if /^openSUSE/.match?(suse_release)
|
264
|
+
# opensuse releases >= 42 are openSUSE Leap
|
265
|
+
if version.to_i < 42
|
266
|
+
'opensuse'
|
267
|
+
else
|
268
|
+
'opensuseleap'
|
269
|
+
end
|
270
|
+
else
|
271
|
+
'suse'
|
272
|
+
end
|
273
|
+
elsif os_release_file_is_cisco?
|
274
|
+
if os_release_info['ID_LIKE'].nil? || !os_release_info['ID_LIKE'].include?('wrlinux')
|
275
|
+
raise 'unknown Cisco /etc/os-release or /etc/cisco-release ID_LIKE field'
|
276
|
+
end
|
277
|
+
|
278
|
+
case os_release_info['ID']
|
279
|
+
when 'nexus'
|
280
|
+
'nexus'
|
281
|
+
when 'ios_xr'
|
282
|
+
'ios_xr'
|
283
|
+
else
|
284
|
+
raise 'unknown Cisco /etc/os-release or /etc/cisco-release ID field'
|
285
|
+
end
|
286
|
+
elsif File.exist?(SLACKWARE_VERSION_PATH)
|
287
|
+
'slackware'
|
288
|
+
elsif File.exist?(EXHERBO_RELEASE_PATH)
|
289
|
+
'exherbo'
|
290
|
+
elsif File.exist?(CLEARLINUX_RELEASE_PATH)
|
291
|
+
# Clear Linux https://clearlinux.org/
|
292
|
+
if /clear-linux-os/.match?(clearlinux_release)
|
293
|
+
'clearlinux'
|
294
|
+
end
|
295
|
+
elsif /RedHat/i.match?(lsb[:id])
|
296
|
+
'redhat'
|
297
|
+
elsif /Amazon/i.match?(lsb[:id])
|
298
|
+
'amazon'
|
299
|
+
elsif /ScientificSL/i.match?(lsb[:id])
|
300
|
+
'scientific'
|
301
|
+
elsif /XenServer/i.match?(lsb[:id])
|
302
|
+
'xenserver'
|
303
|
+
elsif lsb[:id]
|
304
|
+
# LSB can provide odd data that changes between releases, so we currently fall back on it
|
305
|
+
# rather than dealing with its subtleties
|
306
|
+
lsb[:id].downcase
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def legacy_platform_version_detection
|
311
|
+
# platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching
|
312
|
+
if File.exist?(ORACLE_RELEASE_PATH)
|
313
|
+
get_redhatish_version(oracle_release)
|
314
|
+
elsif File.exist?(ENTERPRISE_RELEASE_PATH)
|
315
|
+
get_redhatish_version(enterprise_release)
|
316
|
+
elsif File.exist?(F5_RELEASE_PATH)
|
317
|
+
bigip_version
|
318
|
+
elsif File.exist?(DEBIAN_VERSION_PATH)
|
319
|
+
# Ubuntu and Debian both have /etc/debian_version
|
320
|
+
# Ubuntu should always have a working lsb, debian does not by default
|
321
|
+
if /Ubuntu/i.match?(lsb[:id])
|
322
|
+
lsb[:release]
|
323
|
+
else
|
324
|
+
debian_version
|
325
|
+
end
|
326
|
+
elsif File.exist?(PARALLELS_RELEASE_PATH)
|
327
|
+
parallels_release.match(/(\d\.\d\.\d)/)[0]
|
328
|
+
elsif File.exist?(EOS_RELEASE_PATH)
|
329
|
+
eos_release.strip.split[-1]
|
330
|
+
elsif File.exist?(REDHAT_RELEASE_PATH)
|
331
|
+
get_redhatish_version(redhat_release)
|
332
|
+
elsif File.exist?(SYSTEM_RELEASE_PATH)
|
333
|
+
get_redhatish_version(system_release)
|
334
|
+
elsif File.exist?(SUSE_RELEASE_PATH)
|
335
|
+
suse_version = suse_release.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join(".")
|
336
|
+
suse_version = suse_release[/VERSION = ([\d\.]{2,})/, 1] if suse_version == ''
|
337
|
+
suse_version
|
338
|
+
elsif os_release_file_is_cisco?
|
339
|
+
os_release_info['VERSION']
|
340
|
+
elsif File.exist?(SLACKWARE_VERSION_PATH)
|
341
|
+
slackware_version.scan(/(\d+|\.+)/).join
|
342
|
+
elsif File.exist?(EXHERBO_RELEASE_PATH)
|
343
|
+
# no way to determine platform_version in a rolling release distribution
|
344
|
+
# kernel release will be used - ex. 3.13
|
345
|
+
uname_r.strip
|
346
|
+
elsif File.exist?(CLEARLINUX_RELEASE_PATH)
|
347
|
+
if /clear-linux-os/.match?(clearlinux_release) # Clear Linux https://clearlinux.org/
|
348
|
+
clearlinux_release[/VERSION_ID=(\d+)/, 1]
|
349
|
+
end
|
350
|
+
else
|
351
|
+
lsb[:release]
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|