rubyipmi 0.3.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.
Files changed (40) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +33 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +267 -0
  7. data/README.rdoc +18 -0
  8. data/Rakefile +49 -0
  9. data/VERSION +1 -0
  10. data/lib/rubyipmi.rb +80 -0
  11. data/lib/rubyipmi/commands/basecommand.rb +171 -0
  12. data/lib/rubyipmi/freeipmi/commands/basecommand.rb +60 -0
  13. data/lib/rubyipmi/freeipmi/commands/bmc.rb +37 -0
  14. data/lib/rubyipmi/freeipmi/commands/bmcconfig.rb +57 -0
  15. data/lib/rubyipmi/freeipmi/commands/bmcinfo.rb +76 -0
  16. data/lib/rubyipmi/freeipmi/commands/chassis.rb +123 -0
  17. data/lib/rubyipmi/freeipmi/commands/chassisconfig.rb +100 -0
  18. data/lib/rubyipmi/freeipmi/commands/lan.rb +111 -0
  19. data/lib/rubyipmi/freeipmi/commands/power.rb +72 -0
  20. data/lib/rubyipmi/freeipmi/connection.rb +43 -0
  21. data/lib/rubyipmi/freeipmi/errorcodes.rb +15 -0
  22. data/lib/rubyipmi/ipmitool/commands/basecommand.rb +60 -0
  23. data/lib/rubyipmi/ipmitool/commands/bmc.rb +95 -0
  24. data/lib/rubyipmi/ipmitool/commands/chassis.rb +106 -0
  25. data/lib/rubyipmi/ipmitool/commands/chassisconfig.rb +52 -0
  26. data/lib/rubyipmi/ipmitool/commands/lan.rb +162 -0
  27. data/lib/rubyipmi/ipmitool/commands/power.rb +74 -0
  28. data/lib/rubyipmi/ipmitool/connection.rb +46 -0
  29. data/lib/rubyipmi/ipmitool/errorcodes.rb +18 -0
  30. data/lib/rubyipmi/observablehash.rb +20 -0
  31. data/rubyipmi.gemspec +91 -0
  32. data/spec/bmc_spec.rb +35 -0
  33. data/spec/chassis_config_spec.rb +38 -0
  34. data/spec/chassis_spec.rb +24 -0
  35. data/spec/connection_spec.rb +31 -0
  36. data/spec/lan_spec.rb +61 -0
  37. data/spec/power_spec.rb +40 -0
  38. data/spec/rubyipmi_spec.rb +59 -0
  39. data/spec/spec_helper.rb +12 -0
  40. metadata +181 -0
@@ -0,0 +1,20 @@
1
+ require "observer"
2
+
3
+ module Rubyipmi
4
+ class ObservableHash < Hash
5
+ include Observable
6
+
7
+ # this method will merge the hash and then notify all observers, if any
8
+ def merge_notify!(newhash)
9
+ merge!(newhash)
10
+ changed
11
+ notify_observers(self)
12
+ end
13
+
14
+ def delete_notify(del)
15
+ delete(del)
16
+ notify_observers(self)
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,91 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "rubyipmi"
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Corey Osman"]
12
+ s.date = "2012-08-14"
13
+ s.description = "A ruby wrapper for ipmi command line tools that supports ipmitool and freeipmi"
14
+ s.email = "corey@logicminds.biz"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ ".rspec",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "lib/rubyipmi.rb",
31
+ "lib/rubyipmi/commands/basecommand.rb",
32
+ "lib/rubyipmi/freeipmi/commands/basecommand.rb",
33
+ "lib/rubyipmi/freeipmi/commands/bmc.rb",
34
+ "lib/rubyipmi/freeipmi/commands/bmcconfig.rb",
35
+ "lib/rubyipmi/freeipmi/commands/bmcinfo.rb",
36
+ "lib/rubyipmi/freeipmi/commands/chassis.rb",
37
+ "lib/rubyipmi/freeipmi/commands/chassisconfig.rb",
38
+ "lib/rubyipmi/freeipmi/commands/lan.rb",
39
+ "lib/rubyipmi/freeipmi/commands/power.rb",
40
+ "lib/rubyipmi/freeipmi/connection.rb",
41
+ "lib/rubyipmi/freeipmi/errorcodes.rb",
42
+ "lib/rubyipmi/ipmitool/commands/basecommand.rb",
43
+ "lib/rubyipmi/ipmitool/commands/bmc.rb",
44
+ "lib/rubyipmi/ipmitool/commands/chassis.rb",
45
+ "lib/rubyipmi/ipmitool/commands/chassisconfig.rb",
46
+ "lib/rubyipmi/ipmitool/commands/lan.rb",
47
+ "lib/rubyipmi/ipmitool/commands/power.rb",
48
+ "lib/rubyipmi/ipmitool/connection.rb",
49
+ "lib/rubyipmi/ipmitool/errorcodes.rb",
50
+ "lib/rubyipmi/observablehash.rb",
51
+ "rubyipmi.gemspec",
52
+ "spec/bmc_spec.rb",
53
+ "spec/chassis_config_spec.rb",
54
+ "spec/chassis_spec.rb",
55
+ "spec/connection_spec.rb",
56
+ "spec/lan_spec.rb",
57
+ "spec/power_spec.rb",
58
+ "spec/rubyipmi_spec.rb",
59
+ "spec/spec_helper.rb"
60
+ ]
61
+ s.homepage = "http://github.com/logicminds/rubyipmi"
62
+ s.licenses = ["GPLv3"]
63
+ s.require_paths = ["lib"]
64
+ s.rubygems_version = "1.8.24"
65
+ s.summary = "A ruby wrapper for ipmi command line tools that supports ipmitool and freeipmi"
66
+
67
+ if s.respond_to? :specification_version then
68
+ s.specification_version = 3
69
+
70
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
71
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
72
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
73
+ s.add_development_dependency(%q<bundler>, ["~> 1.1.5"])
74
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
75
+ s.add_development_dependency(%q<rcov>, [">= 0"])
76
+ else
77
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
78
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
79
+ s.add_dependency(%q<bundler>, ["~> 1.1.5"])
80
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
81
+ s.add_dependency(%q<rcov>, [">= 0"])
82
+ end
83
+ else
84
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
85
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
86
+ s.add_dependency(%q<bundler>, ["~> 1.1.5"])
87
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
88
+ s.add_dependency(%q<rcov>, [">= 0"])
89
+ end
90
+ end
91
+
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ describe "Bmc" do
3
+
4
+ before :each do
5
+ user = ENV["ipmiuser"]
6
+ pass = ENV["ipmipass"]
7
+ host = ENV["ipmihost"]
8
+ provider = ENV["ipmiprovider"]
9
+ @conn = Rubyipmi.connect(user, pass, host, provider)
10
+
11
+ end
12
+
13
+ it "creates a bmc object" do
14
+ @conn.bmc.should_not be_nil
15
+
16
+ end
17
+
18
+ #it "options should change after calling info" do
19
+ # info = @conn.bmc.info
20
+ # before = info.options.clone
21
+ # @conn.bmc.info.retrieve
22
+ # after = info.options.clone
23
+ # before.length.should be < after.length
24
+ #end
25
+
26
+
27
+ it "is able to retrieve the bmc info" do
28
+ @conn.bmc.info.should_not be_nil
29
+ end
30
+
31
+ it "is able to retrieve the guid" do
32
+ @conn.bmc.guid.should_not be_nil
33
+ end
34
+
35
+ end
@@ -0,0 +1,38 @@
1
+ describe "Chassis Config" do
2
+
3
+ before :each do
4
+ user = ENV["ipmiuser"]
5
+ pass = ENV["ipmipass"]
6
+ host = ENV["ipmihost"]
7
+ provider = ENV["ipmiprovider"]
8
+ @conn = Rubyipmi.connect(user, pass, host, provider)
9
+
10
+ end
11
+
12
+ it "test to set booting from PXE" do
13
+ @conn.chassis.config.bootpxe.should == true
14
+ end
15
+
16
+ it "test to set booting from Disk" do
17
+ @conn.chassis.config.bootdisk.should == true
18
+ end
19
+
20
+ it "test to set booting from Cdrom" do
21
+ @conn.chassis.config.bootcdrom.should == true
22
+ end
23
+
24
+ it "test to set booting from bios" do
25
+ @conn.chassis.config.bootbios.should == true
26
+ end
27
+
28
+ it "test to set boot persistent value" do
29
+
30
+ end
31
+
32
+ it "test to checkout the entire chassis config" do
33
+
34
+ end
35
+
36
+
37
+
38
+ end
@@ -0,0 +1,24 @@
1
+ describe "Chassis" do
2
+
3
+ before :each do
4
+ user = ENV["ipmiuser"]
5
+ pass = ENV["ipmipass"]
6
+ host = ENV["ipmihost"]
7
+ provider = ENV["ipmiprovider"]
8
+ @conn = Rubyipmi.connect(user, pass, host, provider)
9
+
10
+ end
11
+
12
+ it "test to turn uid light on for 10 seconds" do
13
+ value = @conn.chassis.identify(true, 5)
14
+ sleep(6)
15
+ value.should == true
16
+ end
17
+
18
+ it "test to turn uid light on then off" do
19
+ @conn.chassis.identify(true)
20
+ sleep(2)
21
+ @conn.chassis.identify(false).should == true
22
+ end
23
+
24
+ end
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ describe "Connection" do
3
+
4
+ before :each do
5
+ user = ENV["ipmiuser"]
6
+ pass = ENV["ipmipass"]
7
+ host = ENV["ipmihost"]
8
+ provider = ENV["ipmiprovider"]
9
+ @conn = Rubyipmi.connect(user, pass, host, provider)
10
+
11
+ end
12
+
13
+ it "creates a new object" do
14
+ @conn.should_not be_nil
15
+
16
+ end
17
+
18
+ it 'creates a bmc object' do
19
+ @conn.bmc.should_not be_nil
20
+ end
21
+
22
+ it 'creates a chassis object' do
23
+ @conn.chassis.should_not be_nil
24
+ end
25
+
26
+
27
+ end
28
+ #it "raises an error if host is unreachable" do
29
+ # conn = Freeipmi.connect("admin", "creative", "192.168.1.181")
30
+ #
31
+ #end
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Lan" do
4
+
5
+ before :each do
6
+ user = ENV["ipmiuser"]
7
+ pass = ENV["ipmipass"]
8
+ host = ENV["ipmihost"]
9
+ provider = ENV["ipmiprovider"]
10
+ @conn = Rubyipmi.connect(user, pass, host, provider)
11
+
12
+
13
+
14
+ end
15
+
16
+ it "get ip address" do
17
+ @conn.bmc.lan.ip.should_not be nil
18
+ end
19
+
20
+ it "get subnet" do
21
+ @conn.bmc.lan.subnet.should_not be nil
22
+ end
23
+
24
+ it "get gateway address" do
25
+ @conn.bmc.lan.gateway.should_not be nil
26
+ end
27
+
28
+ it "get mac address" do
29
+ @conn.bmc.lan.mac.should_not be nil
30
+ end
31
+
32
+ it "get static or dhcp" do
33
+ @conn.bmc.lan.dhcp?.should_not be nil
34
+ end
35
+
36
+ it "static should be opposite of dhcp" do
37
+ @conn.bmc.lan.dhcp?.should_not == @conn.bmc.lan.static?
38
+ end
39
+
40
+ it "dhcp should be opposite of static" do
41
+ @conn.bmc.lan.static?.should_not == @conn.bmc.lan.dhcp?
42
+ end
43
+
44
+
45
+ it "should set gateway address" do
46
+ gw = @conn.bmc.lan.gateway
47
+ @conn.bmc.lan.set_gateway(gw).should_not be nil
48
+ end
49
+
50
+ it "should set subnet" do
51
+ netmask = @conn.bmc.lan.subnet
52
+ @conn.bmc.lan.set_subnet(netmask).should_not be nil
53
+ end
54
+
55
+ it "should set ip address" do
56
+ ip = @conn.bmc.lan.ip
57
+ @conn.bmc.lan.set_ip(ip).should_not be nil
58
+ end
59
+
60
+
61
+ end
@@ -0,0 +1,40 @@
1
+ describe "Power" do
2
+
3
+ before :each do
4
+ user = ENV["ipmiuser"]
5
+ pass = ENV["ipmipass"]
6
+ host = ENV["ipmihost"]
7
+ provider = ENV["ipmiprovider"]
8
+ @conn = Rubyipmi.connect(user, pass, host, provider)
9
+
10
+ end
11
+
12
+ it "test to turn power on" do
13
+ @conn.chassis.power.on.should == true
14
+ end
15
+
16
+ it "test to turn power off" do
17
+ @conn.chassis.power.off.should == true
18
+ end
19
+
20
+ it "test power status" do
21
+ @conn.chassis.power.status.should_not be nil
22
+
23
+ end
24
+
25
+ it "test to check that options automatically change" do
26
+ before = @conn.chassis.power.options.clone
27
+ @conn.chassis.power.off
28
+ after = @conn.chassis.power.options.clone
29
+ after.length.should be > before.length
30
+ end
31
+
32
+ it "test to check if power status if off" do
33
+ before = @conn.chassis.power.options.clone
34
+ @conn.chassis.power.off
35
+ after = @conn.chassis.power.options.clone
36
+ sleep(2)
37
+ @conn.chassis.power.off?.should == true
38
+ end
39
+
40
+ end
@@ -0,0 +1,59 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "rubyipmi" do
4
+ before :each do
5
+ @user = ENV["ipmiuser"]
6
+ @pass = ENV["ipmipass"]
7
+ @host = ENV["ipmihost"]
8
+ @provider = ENV["ipmiprovider"]
9
+
10
+ end
11
+ it "creates a connection object" do
12
+ conn = Rubyipmi.connect(@user, @pass, @host, @provider)
13
+ conn.should_not be_nil
14
+ end
15
+
16
+ it "should test if a provider is present" do
17
+ value = Rubyipmi.is_provider_installed?("ipmitool")
18
+ value2 = Rubyipmi.is_provider_installed?("freeipmi")
19
+ (value|value2).should_not be false
20
+
21
+ end
22
+
23
+ it "should create a connection object if freeipmi is present" do
24
+ begin
25
+ conn = Rubyipmi.connect(@user, @pass, @host, "freeipmi")
26
+ conn.kind_of?(Rubyipmi::Freeipmi::Connection).should be_true
27
+ rescue Exception => e
28
+ e.message.match(/freeipmi\ is\ not\ installed/).should be_true
29
+ puts "#{e.message}"
30
+ end
31
+ end
32
+
33
+ it "should create a connection object if ipmitool is present" do
34
+ begin
35
+ conn = Rubyipmi.connect(@user, @pass, @host, "ipmitool")
36
+ rescue Exception => e
37
+ e.message.match(/ipmitool\ is\ not\ installed/).should be_true
38
+ puts "#{e.message}"
39
+ return true
40
+ end
41
+ conn.kind_of?(Rubyipmi::Ipmitool::Connection).should be_true
42
+ end
43
+
44
+ it "should not create a connection object if a provider is not present" do
45
+ begin
46
+ conn = Rubyipmi.connect(@user, @pass, @host, "bogus")
47
+ rescue Exception => e
48
+ e.message.match(/Invalid/).should be_true
49
+ end
50
+ end
51
+
52
+ it "check to find any available installed providers" do
53
+ Rubyipmi.providers_installed?.length.should be > 0
54
+ end
55
+
56
+
57
+
58
+ end
59
+
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'rubyipmi'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyipmi
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
+ platform: ruby
12
+ authors:
13
+ - Corey Osman
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-08-14 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ type: :development
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ hash: 47
28
+ segments:
29
+ - 2
30
+ - 8
31
+ - 0
32
+ version: 2.8.0
33
+ version_requirements: *id001
34
+ name: rspec
35
+ prerelease: false
36
+ - !ruby/object:Gem::Dependency
37
+ type: :development
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 31
44
+ segments:
45
+ - 3
46
+ - 12
47
+ version: "3.12"
48
+ version_requirements: *id002
49
+ name: rdoc
50
+ prerelease: false
51
+ - !ruby/object:Gem::Dependency
52
+ type: :development
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 25
59
+ segments:
60
+ - 1
61
+ - 1
62
+ - 5
63
+ version: 1.1.5
64
+ version_requirements: *id003
65
+ name: bundler
66
+ prerelease: false
67
+ - !ruby/object:Gem::Dependency
68
+ type: :development
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 63
75
+ segments:
76
+ - 1
77
+ - 8
78
+ - 4
79
+ version: 1.8.4
80
+ version_requirements: *id004
81
+ name: jeweler
82
+ prerelease: false
83
+ - !ruby/object:Gem::Dependency
84
+ type: :development
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ version_requirements: *id005
95
+ name: rcov
96
+ prerelease: false
97
+ description: A ruby wrapper for ipmi command line tools that supports ipmitool and freeipmi
98
+ email: corey@logicminds.biz
99
+ executables: []
100
+
101
+ extensions: []
102
+
103
+ extra_rdoc_files:
104
+ - LICENSE.txt
105
+ - README.md
106
+ - README.rdoc
107
+ files:
108
+ - .document
109
+ - .rspec
110
+ - Gemfile
111
+ - Gemfile.lock
112
+ - LICENSE.txt
113
+ - README.md
114
+ - README.rdoc
115
+ - Rakefile
116
+ - VERSION
117
+ - lib/rubyipmi.rb
118
+ - lib/rubyipmi/commands/basecommand.rb
119
+ - lib/rubyipmi/freeipmi/commands/basecommand.rb
120
+ - lib/rubyipmi/freeipmi/commands/bmc.rb
121
+ - lib/rubyipmi/freeipmi/commands/bmcconfig.rb
122
+ - lib/rubyipmi/freeipmi/commands/bmcinfo.rb
123
+ - lib/rubyipmi/freeipmi/commands/chassis.rb
124
+ - lib/rubyipmi/freeipmi/commands/chassisconfig.rb
125
+ - lib/rubyipmi/freeipmi/commands/lan.rb
126
+ - lib/rubyipmi/freeipmi/commands/power.rb
127
+ - lib/rubyipmi/freeipmi/connection.rb
128
+ - lib/rubyipmi/freeipmi/errorcodes.rb
129
+ - lib/rubyipmi/ipmitool/commands/basecommand.rb
130
+ - lib/rubyipmi/ipmitool/commands/bmc.rb
131
+ - lib/rubyipmi/ipmitool/commands/chassis.rb
132
+ - lib/rubyipmi/ipmitool/commands/chassisconfig.rb
133
+ - lib/rubyipmi/ipmitool/commands/lan.rb
134
+ - lib/rubyipmi/ipmitool/commands/power.rb
135
+ - lib/rubyipmi/ipmitool/connection.rb
136
+ - lib/rubyipmi/ipmitool/errorcodes.rb
137
+ - lib/rubyipmi/observablehash.rb
138
+ - rubyipmi.gemspec
139
+ - spec/bmc_spec.rb
140
+ - spec/chassis_config_spec.rb
141
+ - spec/chassis_spec.rb
142
+ - spec/connection_spec.rb
143
+ - spec/lan_spec.rb
144
+ - spec/power_spec.rb
145
+ - spec/rubyipmi_spec.rb
146
+ - spec/spec_helper.rb
147
+ homepage: http://github.com/logicminds/rubyipmi
148
+ licenses:
149
+ - GPLv3
150
+ post_install_message:
151
+ rdoc_options: []
152
+
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: 3
161
+ segments:
162
+ - 0
163
+ version: "0"
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ hash: 3
170
+ segments:
171
+ - 0
172
+ version: "0"
173
+ requirements: []
174
+
175
+ rubyforge_project:
176
+ rubygems_version: 1.8.24
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: A ruby wrapper for ipmi command line tools that supports ipmitool and freeipmi
180
+ test_files: []
181
+