kurchatov 0.0.5.pre5 → 0.0.5
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 +4 -4
- data/CHANGELOG +1 -0
- data/README.md +6 -7
- data/Rakefile +1 -1
- data/Vagrantfile +5 -6
- data/bin/kurchatov +2 -2
- data/examples/check_file_contains.rb +4 -4
- data/examples/count_proc.rb +5 -5
- data/examples/cpu.rb +5 -5
- data/examples/disk.rb +3 -3
- data/examples/disk_stat.rb +6 -6
- data/examples/dns_check.rb +2 -2
- data/examples/exim.rb +1 -1
- data/examples/file_age.rb +5 -5
- data/examples/find_files.rb +1 -1
- data/examples/http.rb +3 -3
- data/examples/iptables.rb +3 -3
- data/examples/la.rb +12 -12
- data/examples/mdadm.rb +1 -1
- data/examples/memory.rb +8 -8
- data/examples/net.rb +6 -6
- data/examples/net_stat.rb +4 -4
- data/examples/nfs.rb +2 -2
- data/examples/nginx.rb +1 -1
- data/examples/nginx_500.rb +8 -8
- data/examples/ntp.rb +5 -5
- data/examples/openfiles.rb +2 -2
- data/examples/pgsql.rb +3 -3
- data/examples/ping_icmp.rb +4 -4
- data/examples/ping_tcp.rb +4 -4
- data/examples/proc_mem.rb +6 -6
- data/examples/rabbitmq.rb +4 -4
- data/examples/runit.rb +1 -1
- data/examples/sidekiq.rb +12 -12
- data/examples/sidekiq_queue_state.rb +3 -3
- data/examples/status_file.rb +4 -4
- data/examples/tw_cli.rb +4 -4
- data/examples/uptime.rb +4 -4
- data/kurchatov.gemspec +19 -18
- data/lib/kurchatov/application.rb +73 -74
- data/lib/kurchatov/mashie.rb +32 -27
- data/lib/kurchatov/mixin/command.rb +0 -5
- data/lib/kurchatov/mixin/event.rb +7 -5
- data/lib/kurchatov/mixin/http.rb +4 -4
- data/lib/kurchatov/mixin/init.rb +5 -5
- data/lib/kurchatov/mixin/ohai.rb +11 -3
- data/lib/kurchatov/mixin/queue.rb +7 -4
- data/lib/kurchatov/plugin/config.rb +8 -7
- data/lib/kurchatov/plugin/dsl.rb +3 -1
- data/lib/kurchatov/plugin/riemann.rb +7 -8
- data/lib/kurchatov/responders/http.rb +6 -6
- data/lib/kurchatov/responders/init.rb +3 -3
- data/lib/kurchatov/responders/riemann.rb +2 -4
- data/lib/kurchatov/responders/udp.rb +2 -3
- data/lib/kurchatov/riemann/client.rb +12 -12
- data/lib/kurchatov/riemann/event.rb +1 -1
- data/lib/kurchatov/riemann/message.rb +2 -2
- data/lib/kurchatov/version.rb +1 -1
- data/lib/kurchatov.rb +4 -2
- data/lib/ohai/plugins/darwin/cpu.rb +3 -3
- data/lib/ohai/plugins/darwin/hostname.rb +3 -3
- data/lib/ohai/plugins/darwin/platform.rb +12 -12
- data/lib/ohai/plugins/hostname.rb +2 -2
- data/lib/ohai/plugins/linux/cpu.rb +29 -29
- data/lib/ohai/plugins/linux/hostname.rb +4 -4
- data/lib/ohai/plugins/linux/platform.rb +40 -40
- data/lib/ohai/plugins/linux/virtualization.rb +51 -51
- data/lib/ohai/plugins/os.rb +26 -26
- data/lib/ohai/plugins/platform.rb +4 -4
- data/lib/ohai/plugins/virtualization.rb +17 -17
- data/lib/ohai/plugins/windows/cpu.rb +11 -11
- data/lib/ohai/plugins/windows/platform.rb +1 -1
- data/tests/run.sh +4 -4
- data/tests/server.rb +2 -2
- metadata +18 -3
@@ -1,13 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'kurchatov/plugin'
|
4
|
+
require 'kurchatov/mashie'
|
5
5
|
|
6
6
|
module Kurchatov
|
7
7
|
module Plugins
|
8
8
|
class Riemann < Kurchatov::Plugin
|
9
9
|
|
10
|
-
include Kurchatov::Mixin::Queue
|
11
10
|
include Kurchatov::Mixin::Ohai
|
12
11
|
include Kurchatov::Mixin::Event
|
13
12
|
include Kurchatov::Mixin::Command
|
@@ -17,7 +16,7 @@ module Kurchatov
|
|
17
16
|
|
18
17
|
def initialize(name = '')
|
19
18
|
super(name)
|
20
|
-
@run_if = Proc.new {true}
|
19
|
+
@run_if = Proc.new { true }
|
21
20
|
@plugin = Mashie.new
|
22
21
|
@always_start = false
|
23
22
|
@collect = nil
|
@@ -35,15 +34,15 @@ module Kurchatov
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def respond_to_ohai?(opts = {})
|
38
|
-
opts.each { |k,v| return false unless ohai[k] == v }
|
37
|
+
opts.each { |k, v| return false unless ohai[k] == v }
|
39
38
|
true
|
40
39
|
end
|
41
40
|
|
42
41
|
def runnable_by_config?
|
43
42
|
Log.info("Plugin '#{self.name}' disabled by nil collect") and return if collect.nil?
|
44
|
-
Log.info("Plugin '#{self.name}' disabled in config") and return if plugin[:disable] == true
|
45
|
-
Log.info("Plugin '#{self.name}' not started by run_if condition ") and
|
46
|
-
|
43
|
+
Log.info("Plugin '#{self.name}' disabled in config") and return if (plugin[:disable] == true)
|
44
|
+
Log.info("Plugin '#{self.name}' not started by run_if condition ") and
|
45
|
+
return unless self.instance_eval(&run_if)
|
47
46
|
@plugin[:service] = name if @plugin[:service].nil?
|
48
47
|
true
|
49
48
|
end
|
@@ -15,9 +15,9 @@ module Kurchatov
|
|
15
15
|
response = info
|
16
16
|
client.gets
|
17
17
|
headers = "HTTP/1.1 200 OK\r\n" +
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
"Server: Kurchatov Ruby\r\n" +
|
19
|
+
"Content-Length: #{response.bytesize}\r\n" +
|
20
|
+
"Content-Type: application/json\r\n\r\n"
|
21
21
|
client.print headers
|
22
22
|
client.print response
|
23
23
|
client.close
|
@@ -26,9 +26,9 @@ module Kurchatov
|
|
26
26
|
|
27
27
|
def info
|
28
28
|
{
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
:version => Kurchatov::VERSION,
|
30
|
+
:uptime => (Time.now - @s_time).to_i,
|
31
|
+
:config => Kurchatov::Config.to_hash,
|
32
32
|
}.to_json + "\n"
|
33
33
|
end
|
34
34
|
|
@@ -1,3 +1,3 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
3
|
-
require_relative
|
1
|
+
require_relative 'http'
|
2
|
+
require_relative 'riemann'
|
3
|
+
require_relative 'udp'
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "kurchatov/riemann/client"
|
1
|
+
require 'kurchatov/riemann/client'
|
4
2
|
|
5
3
|
module Kurchatov
|
6
4
|
module Responders
|
@@ -34,7 +32,7 @@ module Kurchatov
|
|
34
32
|
def flush
|
35
33
|
@events_to_send ||= events.all
|
36
34
|
unless @events_to_send.empty?
|
37
|
-
@riemanns.each {|riemann| riemann << @events_to_send }
|
35
|
+
@riemanns.each { |riemann| riemann << @events_to_send }
|
38
36
|
Log.debug("Sended events via #{@name.inspect}: #{@events_to_send}")
|
39
37
|
end
|
40
38
|
@events_to_send = nil
|
@@ -3,7 +3,6 @@ module Kurchatov
|
|
3
3
|
class Udp < Kurchatov::Plugin
|
4
4
|
|
5
5
|
include Kurchatov::Mixin::Event
|
6
|
-
include Kurchatov::Mixin::Queue
|
7
6
|
|
8
7
|
def initialize(conn)
|
9
8
|
@host, @port = conn.split(':')
|
@@ -17,9 +16,9 @@ module Kurchatov
|
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
|
-
def process(data,src)
|
19
|
+
def process(data, src)
|
21
20
|
begin
|
22
|
-
event
|
21
|
+
event(JSON.parse(data))
|
23
22
|
src.reply "sended\n\n"
|
24
23
|
rescue => e
|
25
24
|
src.reply "failed to send: #{data.inspect}\n"
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'timeout'
|
2
|
+
require 'socket'
|
3
|
+
require 'kurchatov/riemann/message'
|
4
4
|
|
5
5
|
module Kurchatov
|
6
6
|
module Riemann
|
@@ -19,15 +19,15 @@ module Kurchatov
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def <<(events)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
events = events.map { |e| Event.new(e) }
|
23
|
+
message = Message.new(:events => events)
|
24
|
+
with_connection do |socket|
|
25
|
+
x = message.encode_with_length
|
26
|
+
Timeout::timeout(SEND_TIMEOUT) {
|
27
|
+
socket.write(x)
|
28
|
+
socket.flush
|
29
|
+
}
|
30
|
+
end
|
31
31
|
end
|
32
32
|
|
33
33
|
def with_connection
|
data/lib/kurchatov/version.rb
CHANGED
data/lib/kurchatov.rb
CHANGED
@@ -16,8 +16,8 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
provides
|
19
|
+
provides 'cpu'
|
20
20
|
|
21
21
|
cpu Mash.new
|
22
|
-
cpu[:real]
|
23
|
-
cpu[:total] = from(
|
22
|
+
cpu[:real] = from('sysctl -n hw.physicalcpu').to_i
|
23
|
+
cpu[:total] = from('sysctl -n hw.logicalcpu').to_i
|
@@ -16,23 +16,23 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
provides
|
19
|
+
provides 'platform', 'platform_version', 'platform_build', 'platform_family'
|
20
20
|
|
21
|
-
popen4(
|
21
|
+
popen4('/usr/bin/sw_vers') do |pid, stdin, stdout, stderr|
|
22
22
|
stdin.close
|
23
23
|
stdout.each do |line|
|
24
24
|
case line
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
when /^ProductName:\s+(.+)$/
|
26
|
+
macname = $1
|
27
|
+
macname.downcase!
|
28
|
+
macname.gsub!(' ', '_')
|
29
|
+
platform macname
|
30
|
+
when /^ProductVersion:\s+(.+)$/
|
31
|
+
platform_version $1
|
32
|
+
when /^BuildVersion:\s+(.+)$/
|
33
|
+
platform_build $1
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
platform_family
|
38
|
+
platform_family 'mac_os_x'
|
@@ -16,12 +16,12 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
provides
|
19
|
+
provides 'fqdn', 'domain'
|
20
20
|
|
21
21
|
require_plugin "#{os}::hostname"
|
22
22
|
|
23
23
|
# Domain is everything after the first dot
|
24
24
|
if fqdn
|
25
25
|
fqdn =~ /.+?\.(.*)/
|
26
|
-
domain $1
|
26
|
+
domain $1
|
27
27
|
end
|
@@ -16,42 +16,42 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
provides
|
19
|
+
provides 'cpu'
|
20
20
|
|
21
21
|
cpuinfo = Mash.new
|
22
22
|
real_cpu = Mash.new
|
23
23
|
cpu_number = 0
|
24
24
|
current_cpu = nil
|
25
25
|
|
26
|
-
File.open(
|
26
|
+
File.open('/proc/cpuinfo').each do |line|
|
27
27
|
case line
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
28
|
+
when /processor\s+:\s(.+)/
|
29
|
+
cpuinfo[$1] = Mash.new
|
30
|
+
current_cpu = $1
|
31
|
+
cpu_number += 1
|
32
|
+
when /vendor_id\s+:\s(.+)/
|
33
|
+
cpuinfo[current_cpu]['vendor_id'] = $1
|
34
|
+
when /cpu family\s+:\s(.+)/
|
35
|
+
cpuinfo[current_cpu]['family'] = $1
|
36
|
+
when /model\s+:\s(.+)/
|
37
|
+
cpuinfo[current_cpu]['model'] = $1
|
38
|
+
when /stepping\s+:\s(.+)/
|
39
|
+
cpuinfo[current_cpu]['stepping'] = $1
|
40
|
+
when /physical id\s+:\s(.+)/
|
41
|
+
cpuinfo[current_cpu]['physical_id'] = $1
|
42
|
+
real_cpu[$1] = true
|
43
|
+
when /core id\s+:\s(.+)/
|
44
|
+
cpuinfo[current_cpu]['core_id'] = $1
|
45
|
+
when /cpu cores\s+:\s(.+)/
|
46
|
+
cpuinfo[current_cpu]['cores'] = $1
|
47
|
+
when /model name\s+:\s(.+)/
|
48
|
+
cpuinfo[current_cpu]['model_name'] = $1
|
49
|
+
when /cpu MHz\s+:\s(.+)/
|
50
|
+
cpuinfo[current_cpu]['mhz'] = $1
|
51
|
+
when /cache size\s+:\s(.+)/
|
52
|
+
cpuinfo[current_cpu]['cache_size'] = $1
|
53
|
+
when /flags\s+:\s(.+)/
|
54
|
+
cpuinfo[current_cpu]['flags'] = $1.split(' ')
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -16,11 +16,11 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
provides
|
19
|
+
provides 'hostname', 'fqdn'
|
20
20
|
|
21
|
-
hostname from(
|
21
|
+
hostname from('hostname -s')
|
22
22
|
begin
|
23
|
-
fqdn from(
|
23
|
+
fqdn from('hostname --fqdn')
|
24
24
|
rescue
|
25
|
-
Ohai::Log.debug(
|
25
|
+
Ohai::Log.debug('hostname -f returned an error, probably no domain is set')
|
26
26
|
end
|
@@ -17,77 +17,77 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
def get_redhatish_platform(contents)
|
20
|
-
contents[/^Red Hat/i] ?
|
20
|
+
contents[/^Red Hat/i] ? 'redhat' : contents[/(\w+)/i, 1].downcase
|
21
21
|
end
|
22
22
|
|
23
23
|
def get_redhatish_version(contents)
|
24
24
|
contents[/Rawhide/i] ? contents[/((\d+) \(Rawhide\))/i, 1].downcase : contents[/release ([\d\.]+)/, 1]
|
25
25
|
end
|
26
26
|
|
27
|
-
provides
|
27
|
+
provides 'platform', 'platform_version', 'platform_family'
|
28
28
|
|
29
29
|
require_plugin 'linux::lsb'
|
30
30
|
|
31
31
|
# platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching
|
32
|
-
if File.exists?(
|
33
|
-
contents = File.read(
|
34
|
-
platform
|
32
|
+
if File.exists?('/etc/oracle-release')
|
33
|
+
contents = File.read('/etc/oracle-release').chomp
|
34
|
+
platform 'oracle'
|
35
35
|
platform_version get_redhatish_version(contents)
|
36
|
-
elsif File.exists?(
|
37
|
-
contents = File.read(
|
38
|
-
platform
|
36
|
+
elsif File.exists?('/etc/enterprise-release')
|
37
|
+
contents = File.read('/etc/enterprise-release').chomp
|
38
|
+
platform 'oracle'
|
39
39
|
platform_version get_redhatish_version(contents)
|
40
|
-
elsif File.exists?(
|
40
|
+
elsif File.exists?('/etc/debian_version')
|
41
41
|
# Ubuntu and Debian both have /etc/debian_version
|
42
42
|
# Ubuntu should always have a working lsb, debian does not by default
|
43
43
|
if lsb[:id] =~ /Ubuntu/i
|
44
|
-
platform
|
44
|
+
platform 'ubuntu'
|
45
45
|
platform_version lsb[:release]
|
46
46
|
elsif lsb[:id] =~ /LinuxMint/i
|
47
|
-
platform
|
47
|
+
platform 'linuxmint'
|
48
48
|
platform_version lsb[:release]
|
49
|
-
else
|
50
|
-
if File.exists?(
|
51
|
-
platform
|
49
|
+
else
|
50
|
+
if File.exists?('/usr/bin/raspi-config')
|
51
|
+
platform 'raspbian'
|
52
52
|
else
|
53
|
-
platform
|
53
|
+
platform 'debian'
|
54
54
|
end
|
55
|
-
platform_version File.read(
|
55
|
+
platform_version File.read('/etc/debian_version').chomp
|
56
56
|
end
|
57
|
-
elsif File.exists?(
|
58
|
-
contents = File.read(
|
57
|
+
elsif File.exists?('/etc/redhat-release')
|
58
|
+
contents = File.read('/etc/redhat-release').chomp
|
59
59
|
platform get_redhatish_platform(contents)
|
60
60
|
platform_version get_redhatish_version(contents)
|
61
|
-
elsif File.exists?(
|
62
|
-
contents = File.read(
|
61
|
+
elsif File.exists?('/etc/system-release')
|
62
|
+
contents = File.read('/etc/system-release').chomp
|
63
63
|
platform get_redhatish_platform(contents)
|
64
64
|
platform_version get_redhatish_version(contents)
|
65
65
|
elsif File.exists?('/etc/gentoo-release')
|
66
|
-
platform
|
66
|
+
platform 'gentoo'
|
67
67
|
platform_version File.read('/etc/gentoo-release').scan(/(\d+|\.+)/).join
|
68
68
|
elsif File.exists?('/etc/SuSE-release')
|
69
|
-
platform
|
70
|
-
suse_release = File.read(
|
71
|
-
platform_version suse_release.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join(
|
72
|
-
platform_version suse_release.scan(/VERSION = ([\d\.]{2,})/).flatten.join(
|
69
|
+
platform 'suse'
|
70
|
+
suse_release = File.read('/etc/SuSE-release')
|
71
|
+
platform_version suse_release.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join('.')
|
72
|
+
platform_version suse_release.scan(/VERSION = ([\d\.]{2,})/).flatten.join('.') if platform_version == ''
|
73
73
|
elsif File.exists?('/etc/slackware-version')
|
74
|
-
platform
|
75
|
-
platform_version File.read(
|
74
|
+
platform 'slackware'
|
75
|
+
platform_version File.read('/etc/slackware-version').scan(/(\d+|\.+)/).join
|
76
76
|
elsif File.exists?('/etc/arch-release')
|
77
|
-
platform
|
77
|
+
platform 'arch'
|
78
78
|
# no way to determine platform_version in a rolling release distribution
|
79
79
|
# kernel release will be used - ex. 2.6.32-ARCH
|
80
80
|
elsif lsb[:id] =~ /RedHat/i
|
81
|
-
platform
|
81
|
+
platform 'redhat'
|
82
82
|
platform_version lsb[:release]
|
83
83
|
elsif lsb[:id] =~ /Amazon/i
|
84
|
-
platform
|
84
|
+
platform 'amazon'
|
85
85
|
platform_version lsb[:release]
|
86
86
|
elsif lsb[:id] =~ /ScientificSL/i
|
87
|
-
platform
|
87
|
+
platform 'scientific'
|
88
88
|
platform_version lsb[:release]
|
89
89
|
elsif lsb[:id] =~ /XenServer/i
|
90
|
-
platform
|
90
|
+
platform 'xenserver'
|
91
91
|
platform_version lsb[:release]
|
92
92
|
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
|
93
93
|
platform lsb[:id].downcase
|
@@ -97,17 +97,17 @@ end
|
|
97
97
|
|
98
98
|
case platform
|
99
99
|
when /debian/, /ubuntu/, /linuxmint/, /raspbian/
|
100
|
-
platform_family
|
100
|
+
platform_family 'debian'
|
101
101
|
when /fedora/
|
102
|
-
platform_family
|
102
|
+
platform_family 'fedora'
|
103
103
|
when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /amazon/, /xenserver/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
|
104
|
-
platform_family
|
104
|
+
platform_family 'rhel'
|
105
105
|
when /suse/
|
106
|
-
platform_family
|
106
|
+
platform_family 'suse'
|
107
107
|
when /gentoo/
|
108
|
-
platform_family
|
108
|
+
platform_family 'gentoo'
|
109
109
|
when /slackware/
|
110
|
-
platform_family
|
111
|
-
when /arch/
|
112
|
-
platform_family
|
110
|
+
platform_family 'slackware'
|
111
|
+
when /arch/
|
112
|
+
platform_family 'arch'
|
113
113
|
end
|
@@ -16,7 +16,7 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
provides
|
19
|
+
provides 'virtualization'
|
20
20
|
|
21
21
|
virtualization Mash.new
|
22
22
|
|
@@ -25,15 +25,15 @@ virtualization Mash.new
|
|
25
25
|
|
26
26
|
## Xen
|
27
27
|
# /proc/xen is an empty dir for EL6 + Linode Guests
|
28
|
-
if File.exists?(
|
29
|
-
virtualization[:system] =
|
28
|
+
if File.exists?('/proc/xen')
|
29
|
+
virtualization[:system] = 'xen'
|
30
30
|
# Assume guest
|
31
|
-
virtualization[:role] =
|
31
|
+
virtualization[:role] = 'guest'
|
32
32
|
|
33
33
|
# This file should exist on most Xen systems, normally empty for guests
|
34
|
-
if File.exists?(
|
35
|
-
if File.read(
|
36
|
-
virtualization[:role] =
|
34
|
+
if File.exists?('/proc/xen/capabilities')
|
35
|
+
if File.read('/proc/xen/capabilities') =~ /control_d/i
|
36
|
+
virtualization[:role] = 'host'
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -46,17 +46,17 @@ end
|
|
46
46
|
# but rather be additive - btm
|
47
47
|
|
48
48
|
# Detect from kernel module
|
49
|
-
if File.exists?(
|
50
|
-
modules = File.read(
|
49
|
+
if File.exists?('/proc/modules')
|
50
|
+
modules = File.read('/proc/modules')
|
51
51
|
if modules =~ /^kvm/
|
52
|
-
virtualization[:system] =
|
53
|
-
virtualization[:role] =
|
52
|
+
virtualization[:system] = 'kvm'
|
53
|
+
virtualization[:role] = 'host'
|
54
54
|
elsif modules =~ /^vboxdrv/
|
55
|
-
virtualization[:system] =
|
56
|
-
virtualization[:role] =
|
55
|
+
virtualization[:system] = 'vbox'
|
56
|
+
virtualization[:role] = 'host'
|
57
57
|
elsif modules =~ /^vboxguest/
|
58
|
-
virtualization[:system] =
|
59
|
-
virtualization[:role] =
|
58
|
+
virtualization[:system] = 'vbox'
|
59
|
+
virtualization[:role] = 'guest'
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -65,61 +65,61 @@ end
|
|
65
65
|
# 2.6.27-9-server (intrepid) has this / 2.6.18-6-amd64 (etch) does not
|
66
66
|
# It would be great if we could read pv_info in the kernel
|
67
67
|
# Wait for reply to: http://article.gmane.org/gmane.comp.emulators.kvm.devel/27885
|
68
|
-
if File.exists?(
|
69
|
-
if File.read(
|
70
|
-
virtualization[:system] =
|
71
|
-
virtualization[:role] =
|
68
|
+
if File.exists?('/proc/cpuinfo')
|
69
|
+
if File.read('/proc/cpuinfo') =~ /QEMU Virtual CPU/
|
70
|
+
virtualization[:system] = 'kvm'
|
71
|
+
virtualization[:role] = 'guest'
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
# Detect OpenVZ / Virtuozzo.
|
76
76
|
# http://wiki.openvz.org/BC_proc_entries
|
77
|
-
if File.exists?(
|
78
|
-
virtualization[:system] =
|
79
|
-
virtualization[:role] =
|
80
|
-
elsif File.exists?(
|
81
|
-
virtualization[:system] =
|
82
|
-
virtualization[:role] =
|
77
|
+
if File.exists?('/proc/bc/0')
|
78
|
+
virtualization[:system] = 'openvz'
|
79
|
+
virtualization[:role] = 'host'
|
80
|
+
elsif File.exists?('/proc/vz')
|
81
|
+
virtualization[:system] = 'openvz'
|
82
|
+
virtualization[:role] = 'guest'
|
83
83
|
end
|
84
84
|
|
85
85
|
# http://www.dmo.ca/blog/detecting-virtualization-on-linux
|
86
|
-
if File.exists?(
|
87
|
-
popen4(
|
86
|
+
if File.exists?('/usr/sbin/dmidecode')
|
87
|
+
popen4('dmidecode') do |pid, stdin, stdout, stderr|
|
88
88
|
stdin.close
|
89
89
|
dmi_info = stdout.read
|
90
90
|
case dmi_info
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
91
|
+
when /Manufacturer: Microsoft/
|
92
|
+
if dmi_info =~ /Product Name: Virtual Machine/
|
93
|
+
virtualization[:system] = 'virtualpc'
|
94
|
+
virtualization[:role] = 'guest'
|
95
|
+
end
|
96
|
+
when /Manufacturer: VMware/
|
97
|
+
if dmi_info =~ /Product Name: VMware Virtual Platform/
|
98
|
+
virtualization[:system] = 'vmware'
|
99
|
+
virtualization[:role] = 'guest'
|
100
|
+
end
|
101
|
+
when /Manufacturer: Xen/
|
102
|
+
if dmi_info =~ /Product Name: HVM domU/
|
103
|
+
virtualization[:system] = 'xen'
|
104
|
+
virtualization[:role] = 'guest'
|
105
|
+
end
|
106
|
+
else
|
107
|
+
nil
|
108
108
|
end
|
109
109
|
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
113
|
# Detect Linux-VServer
|
114
|
-
if File.exists?(
|
115
|
-
proc_self_status = File.read(
|
114
|
+
if File.exists?('/proc/self/status')
|
115
|
+
proc_self_status = File.read('/proc/self/status')
|
116
116
|
vxid = proc_self_status.match(/^(s_context|VxID): (\d+)$/)
|
117
117
|
if vxid and vxid[2]
|
118
|
-
virtualization[:system] =
|
119
|
-
if vxid[2] ==
|
120
|
-
virtualization[:role] =
|
118
|
+
virtualization[:system] = 'linux-vserver'
|
119
|
+
if vxid[2] == '0'
|
120
|
+
virtualization[:role] = 'host'
|
121
121
|
else
|
122
|
-
virtualization[:role] =
|
123
|
-
|
122
|
+
virtualization[:role] = 'guest'
|
123
|
+
end
|
124
124
|
end
|
125
125
|
end
|