rubyipmi 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +5 -5
  2. data/.document +5 -0
  3. data/.gitignore +50 -0
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +66 -0
  6. data/.travis.yml +13 -0
  7. data/Gemfile +3 -3
  8. data/README.md +9 -3
  9. data/RELEASE_NOTES.md +33 -0
  10. data/Rakefile +15 -42
  11. data/lib/rubyipmi/commands/basecommand.rb +17 -23
  12. data/lib/rubyipmi/commands/mixins/power_mixin.rb +50 -0
  13. data/lib/rubyipmi/commands/mixins/sensors_mixin.rb +54 -0
  14. data/lib/rubyipmi/freeipmi/commands/basecommand.rb +26 -35
  15. data/lib/rubyipmi/freeipmi/commands/bmc.rb +4 -7
  16. data/lib/rubyipmi/freeipmi/commands/bmcconfig.rb +7 -17
  17. data/lib/rubyipmi/freeipmi/commands/bmcdevice.rb +2 -9
  18. data/lib/rubyipmi/freeipmi/commands/bmcinfo.rb +4 -10
  19. data/lib/rubyipmi/freeipmi/commands/chassis.rb +27 -45
  20. data/lib/rubyipmi/freeipmi/commands/chassisconfig.rb +23 -38
  21. data/lib/rubyipmi/freeipmi/commands/fru.rb +23 -42
  22. data/lib/rubyipmi/freeipmi/commands/lan.rb +4 -6
  23. data/lib/rubyipmi/freeipmi/commands/power.rb +8 -51
  24. data/lib/rubyipmi/freeipmi/commands/sensors.rb +10 -67
  25. data/lib/rubyipmi/freeipmi/connection.rb +14 -17
  26. data/lib/rubyipmi/freeipmi/errorcodes.rb +11 -17
  27. data/lib/rubyipmi/ipmitool/commands/basecommand.rb +12 -16
  28. data/lib/rubyipmi/ipmitool/commands/bmc.rb +13 -22
  29. data/lib/rubyipmi/ipmitool/commands/chassis.rb +26 -44
  30. data/lib/rubyipmi/ipmitool/commands/chassisconfig.rb +11 -21
  31. data/lib/rubyipmi/ipmitool/commands/fru.rb +35 -48
  32. data/lib/rubyipmi/ipmitool/commands/lan.rb +25 -28
  33. data/lib/rubyipmi/ipmitool/commands/power.rb +7 -58
  34. data/lib/rubyipmi/ipmitool/commands/sensors.rb +10 -68
  35. data/lib/rubyipmi/ipmitool/connection.rb +10 -19
  36. data/lib/rubyipmi/ipmitool/errorcodes.rb +11 -45
  37. data/lib/rubyipmi/observablehash.rb +1 -2
  38. data/lib/rubyipmi/version.rb +5 -0
  39. data/lib/rubyipmi.rb +23 -28
  40. data/rubyipmi.gemspec +17 -128
  41. metadata +18 -101
  42. data/spec/Vagrantfile +0 -45
  43. data/spec/fixtures/freeipmi/bmc_config.txt +0 -317
  44. data/spec/fixtures/freeipmi/bmc_config_lan_conf.txt +0 -19
  45. data/spec/fixtures/freeipmi/bmc_info.txt +0 -32
  46. data/spec/fixtures/freeipmi/errors.txt +0 -3
  47. data/spec/fixtures/freeipmi/fru.txt +0 -13
  48. data/spec/fixtures/freeipmi/sensors.txt +0 -29
  49. data/spec/fixtures/ipmitool/bmc_info.txt +0 -20
  50. data/spec/fixtures/ipmitool/errors.txt +0 -10
  51. data/spec/fixtures/ipmitool/fru.txt +0 -96
  52. data/spec/fixtures/ipmitool/lan.txt +0 -17
  53. data/spec/fixtures/ipmitool/sensors.txt +0 -105
  54. data/spec/integration/bmc_spec.rb +0 -48
  55. data/spec/integration/chassis_config_spec.rb +0 -38
  56. data/spec/integration/chassis_spec.rb +0 -26
  57. data/spec/integration/connection_spec.rb +0 -45
  58. data/spec/integration/fru_spec.rb +0 -38
  59. data/spec/integration/lan_spec.rb +0 -50
  60. data/spec/integration/power_spec.rb +0 -40
  61. data/spec/integration/rubyipmi_spec.rb +0 -114
  62. data/spec/integration/sensor_spec.rb +0 -43
  63. data/spec/manifests/default.pp +0 -50
  64. data/spec/puppetmodules/archive/LICENSE-2.0.txt +0 -202
  65. data/spec/puppetmodules/archive/Modulefile +0 -8
  66. data/spec/puppetmodules/archive/README.md +0 -40
  67. data/spec/puppetmodules/archive/manifests/download.pp +0 -157
  68. data/spec/puppetmodules/archive/manifests/extract.pp +0 -81
  69. data/spec/puppetmodules/archive/manifests/init.pp +0 -70
  70. data/spec/puppetmodules/archive/manifests/tar-gz.pp +0 -7
  71. data/spec/puppetmodules/archive/manifests/zip.pp +0 -7
  72. data/spec/puppetmodules/archive/metadata.json +0 -26
  73. data/spec/spec_helper.rb +0 -47
  74. data/spec/unit/freeipmi/bmc-info_spec.rb +0 -38
  75. data/spec/unit/freeipmi/bmc_spec.rb +0 -43
  76. data/spec/unit/freeipmi/connection_spec.rb +0 -121
  77. data/spec/unit/freeipmi/errorcodes_spec.rb +0 -28
  78. data/spec/unit/freeipmi/fru_spec.rb +0 -76
  79. data/spec/unit/freeipmi/lan_spec.rb +0 -0
  80. data/spec/unit/freeipmi/sensors_spec.rb +0 -85
  81. data/spec/unit/ipmitool/bmc_spec.rb +0 -77
  82. data/spec/unit/ipmitool/connection_spec.rb +0 -122
  83. data/spec/unit/ipmitool/errorcodes_spec.rb +0 -35
  84. data/spec/unit/ipmitool/fru_spec.rb +0 -77
  85. data/spec/unit/ipmitool/lan_spec.rb +0 -94
  86. data/spec/unit/ipmitool/sensors_spec.rb +0 -96
  87. data/spec/unit/rubyipmi_spec.rb +0 -50
  88. data/spec/vagrant +0 -27
  89. data/spec/vagrant.pub +0 -1
@@ -1,7 +1,5 @@
1
1
  module Rubyipmi::Ipmitool
2
-
3
2
  class Fru < Rubyipmi::Ipmitool::BaseCommand
4
-
5
3
  attr_accessor :list
6
4
 
7
5
  DEFAULT_FRU = 'builtin_fru_device'
@@ -29,22 +27,20 @@ module Rubyipmi::Ipmitool
29
27
 
30
28
  # return the list of fru information in a hash
31
29
  def list
32
- if @list.count < 1
33
- parse(getfrus)
34
- end
30
+ parse(getfrus) if @list.count < 1
35
31
  @list
36
32
  end
37
33
 
38
- # method to retrieve the raw fru data
34
+ # method to retrieve the raw fru data
39
35
  def getfrus
40
36
  command
41
37
  end
42
38
 
43
- private
39
+ private
44
40
 
45
41
  # I use method missing to allow the user to say Fru.<name> which returns a frudata object unless the user
46
42
  # passes a keyname from the default fru device
47
- def method_missing(method, *args, &block)
43
+ def method_missing(method, *_args, &_block)
48
44
  name = method.to_s
49
45
  fru = list.fetch(name, nil)
50
46
  # if the user wanted some data from the default fru, lets show the data for the fru. Otherwise
@@ -63,29 +59,27 @@ module Rubyipmi::Ipmitool
63
59
 
64
60
  # parse the fru information
65
61
  def parse(data)
66
- if ! data.nil?
67
- parsed_data = []
68
- data.lines.each do |line|
69
- if line =~ /^FRU.*/
70
- # this is the either the first line of of the fru or another fru
71
- if parsed_data.count != 0
72
- # we have reached a new fru device so lets record the previous fru
73
- new_fru = FruData.new(parsed_data)
74
- parsed_data = []
75
- @list[new_fru[:name]] = new_fru
76
- end
77
-
62
+ return unless data
63
+ parsed_data = []
64
+ data.lines.each do |line|
65
+ if line =~ /^FRU.*/
66
+ # this is the either the first line of of the fru or another fru
67
+ if parsed_data.count != 0
68
+ # we have reached a new fru device so lets record the previous fru
69
+ new_fru = FruData.new(parsed_data)
70
+ parsed_data = []
71
+ @list[new_fru[:name]] = new_fru
78
72
  end
79
- parsed_data << line
80
- end
81
- # process the last fru
82
- if parsed_data.count != 0
83
- # we have reached a new fru device so lets record the previous fru
84
- new_fru = FruData.new(parsed_data)
85
- parsed_data = []
86
- @list[new_fru[:name]] = new_fru
73
+
87
74
  end
75
+ parsed_data << line
88
76
  end
77
+ # process the last fru
78
+ return if parsed_data.count == 0
79
+ # we have reached a new fru device so lets record the previous fru
80
+ new_fru = FruData.new(parsed_data)
81
+ parsed_data = []
82
+ @list[new_fru[:name]] = new_fru
89
83
  end
90
84
 
91
85
  # run the command and return result
@@ -93,15 +87,11 @@ module Rubyipmi::Ipmitool
93
87
  @options["cmdargs"] = "fru"
94
88
  value = runcmd
95
89
  @options.delete_notify("cmdargs")
96
- if value
97
- return @result
98
- end
90
+ return @result if value
99
91
  end
100
-
101
92
  end
102
93
 
103
94
  class FruData < Hash
104
-
105
95
  def name
106
96
  self[:name]
107
97
  end
@@ -112,27 +102,24 @@ module Rubyipmi::Ipmitool
112
102
 
113
103
  # parse the fru information that should be an array of lines
114
104
  def parse(data)
115
- if ! data.nil?
116
- data.each do |line|
117
- key, value = line.split(':', 2)
118
- if key =~ /^FRU\s+Device.*/
119
- if value =~ /([\w\s]*)\(.*\)/
120
- self[:name] = $~[1].strip.gsub(/\ /, '_').downcase
121
- end
122
- else
123
- key = key.strip.gsub(/\ /, '_').downcase
124
- if ! value.nil?
125
- self[key] = value.strip
126
- end
105
+ return unless data
106
+ data.each do |line|
107
+ key, value = line.split(':', 2)
108
+ if key =~ /^FRU\s+Device.*/
109
+ if value =~ /([\w\s]*)\(.*\)/
110
+ self[:name] = $~[1].strip.gsub(/\ /, '_').downcase
127
111
  end
112
+ else
113
+ key = key.strip.gsub(/\ /, '_').downcase
114
+ self[key] = value.strip unless value.nil?
128
115
  end
129
116
  end
130
117
  end
131
118
 
132
119
  private
133
120
 
134
- def method_missing(method, *args, &block)
135
- self.fetch(method.to_s, nil)
121
+ def method_missing(method, *_args, &_block)
122
+ fetch(method.to_s, nil)
136
123
  end
137
124
  end
138
- end
125
+ end
@@ -1,7 +1,5 @@
1
1
  module Rubyipmi::Ipmitool
2
-
3
2
  class Lan < Rubyipmi::Ipmitool::BaseCommand
4
-
5
3
  attr_accessor :info
6
4
  attr_accessor :channel
7
5
  MAX_RETRY = 1
@@ -10,7 +8,6 @@ module Rubyipmi::Ipmitool
10
8
  super("ipmitool", opts)
11
9
  @info = {}
12
10
  @channel = 2
13
-
14
11
  end
15
12
 
16
13
  # sets the info var to be empty causing the variable to repopulate upon the next call to info
@@ -33,7 +30,11 @@ module Rubyipmi::Ipmitool
33
30
  # wait for error to occur then retry using channel 1
34
31
  if retrycount < MAX_RETRY
35
32
  @channel = 1
33
+ retrycount = retrycount.next
36
34
  retry
35
+ else
36
+ # failed to fetch info, return cached info
37
+ @info
37
38
  end
38
39
  end
39
40
  else
@@ -43,81 +44,79 @@ module Rubyipmi::Ipmitool
43
44
  end
44
45
 
45
46
  def snmp
46
- info.fetch("snmp_community_string",nil)
47
+ info.fetch("snmp_community_string", nil)
47
48
  end
48
49
 
49
50
  def ip
50
- info.fetch("ip_address",nil)
51
+ info.fetch("ip_address", nil)
51
52
  end
52
53
 
53
54
  def mac
54
- info.fetch("mac_address",nil)
55
+ info.fetch("mac_address", nil)
55
56
  end
56
57
 
57
58
  def netmask
58
- info.fetch("subnet_mask",nil)
59
+ info.fetch("subnet_mask", nil)
59
60
  end
60
61
 
61
62
  def gateway
62
- info.fetch("default_gateway_ip",nil)
63
+ info.fetch("default_gateway_ip", nil)
63
64
  end
64
65
 
65
66
  def vlanid
66
- info.fetch("802.1q_vlan_id",nil)
67
+ info.fetch("802.1q_vlan_id", nil)
67
68
  end
68
69
 
69
- # def snmp=(community)
70
- # @options["cmdargs"] = "lan set #{channel} snmp #{community}"
71
- # value = runcmd
72
- # @options.delete_notify("cmdargs")
73
- # return value
74
- # end
70
+ # def snmp=(community)
71
+ # @options["cmdargs"] = "lan set #{channel} snmp #{community}"
72
+ # value = runcmd
73
+ # @options.delete_notify("cmdargs")
74
+ # return value
75
+ # end
75
76
 
76
77
  def ip=(address)
77
78
  @options["cmdargs"] = "lan set #{channel} ipaddr #{address}"
78
79
  value = runcmd
79
80
  @options.delete_notify("cmdargs")
80
- return value
81
+ value
81
82
  end
82
83
 
83
84
  def netmask=(mask)
84
85
  @options["cmdargs"] = "lan set #{channel} netmask #{mask}"
85
86
  value = runcmd
86
87
  @options.delete_notify("cmdargs")
87
- return value
88
+ value
88
89
  end
89
90
 
90
91
  def gateway=(address)
91
92
  @options["cmdargs"] = "lan set #{channel} defgw ipaddr #{address}"
92
93
  value = runcmd
93
94
  @options.delete_notify("cmdargs")
94
- return value
95
+ value
95
96
  end
96
97
 
97
98
  def dhcp?
98
- info.fetch("ip_address_source",nil).match(/dhcp/i) != nil
99
+ info.fetch("ip_address_source", nil).match(/dhcp/i) != nil
99
100
  end
100
101
 
101
102
  def static?
102
- info.fetch("ip_address_source",nil).match(/static/i) != nil
103
+ info.fetch("ip_address_source", nil).match(/static/i) != nil
103
104
  end
104
105
 
105
106
  def vlanid=(vlan)
106
107
  @options["cmdargs"] = "lan set #{channel} vlan id #{vlan}"
107
108
  value = runcmd
108
109
  @options.delete_notify("cmdargs")
109
- return value
110
+ value
110
111
  end
111
112
 
112
- private
113
+ private
113
114
 
114
115
  def print
115
116
  @options["cmdargs"] = "lan print"
116
117
  value = runcmd
117
118
  @options.delete_notify("cmdargs")
118
- if value
119
- @result
120
- end
119
+ @result if value
121
120
  end
122
121
 
123
122
  def parse(landata)
@@ -127,14 +126,12 @@ module Rubyipmi::Ipmitool
127
126
  key = normalize(item.first.strip)
128
127
  value = item.last.strip
129
128
  @info[key] = value
130
-
131
129
  end
132
- return @info
130
+ @info
133
131
  end
134
132
 
135
133
  def normalize(text)
136
134
  text.gsub(/\ /, '_').gsub(/\./, '').downcase
137
135
  end
138
-
139
136
  end
140
137
  end
@@ -1,6 +1,8 @@
1
- module Rubyipmi::Ipmitool
1
+ require 'rubyipmi/commands/mixins/power_mixin'
2
2
 
3
+ module Rubyipmi::Ipmitool
3
4
  class Power < Rubyipmi::Ipmitool::BaseCommand
5
+ include Rubyipmi::PowerMixin
4
6
 
5
7
  def initialize(opts = ObservableHash.new)
6
8
  super("ipmitool", opts)
@@ -11,70 +13,17 @@ module Rubyipmi::Ipmitool
11
13
  @options["cmdargs"] = "power #{opt}"
12
14
  value = runcmd
13
15
  @options.delete_notify("cmdargs")
14
- return value
15
- end
16
-
17
- # Turn on the system
18
- def on
19
- if on?
20
- return true
21
- else
22
- command("on")
23
- end
24
- end
25
-
26
- # Turn off the system
27
- def off
28
- if off?
29
- return true
30
- else
31
- command("off")
32
- end
16
+ value
33
17
  end
34
18
 
35
- # Power cycle the system
36
- def cycle
37
- # if the system is off turn it on
38
- if off?
39
- on
40
- else
41
- command("cycle")
42
- end
43
-
44
- end
45
-
46
- # Perform a power reset on the system
47
- def reset
48
- command("reset")
49
- end
50
-
51
- # Perform a soft shutdown, like briefly pushing the power button
52
- def softShutdown
53
- command("soft")
54
- end
55
-
56
- def powerInterrupt
19
+ def power_interrupt
57
20
  command("diag")
58
21
  end
59
22
 
60
23
  # Get the power status of the system, will show either on or off
61
24
  def status
62
25
  value = command("status")
63
- if value
64
- @result.match(/(off|on)/).to_s
65
- end
26
+ @result.match(/(off|on)/).to_s if value
66
27
  end
67
-
68
- # Test to see if the power is on
69
- def on?
70
- status == "on"
71
-
72
- end
73
-
74
- # Test to see if the power is off
75
- def off?
76
- status == "off"
77
- end
78
-
79
28
  end
80
- end
29
+ end
@@ -1,83 +1,25 @@
1
- module Rubyipmi::Ipmitool
1
+ require 'rubyipmi/commands/mixins/sensors_mixin'
2
2
 
3
+ module Rubyipmi::Ipmitool
3
4
  class Sensors < Rubyipmi::Ipmitool::BaseCommand
5
+ include Rubyipmi::SensorsMixin
4
6
 
5
7
  def initialize(opts = ObservableHash.new)
6
8
  super("ipmitool", opts)
7
9
  end
8
10
 
9
- def refresh
10
- @sensors = nil
11
- list
12
- end
13
-
14
- def list
15
- @sensors ||= parse(getsensors)
16
- end
17
-
18
- def count
19
- list.count
20
- end
21
-
22
- def names
23
- list.keys
24
- end
25
-
26
- # returns a hash of fan sensors where the key is fan name and value is the sensor
27
- def fanlist(refreshdata=false)
28
- refresh if refreshdata
29
- flist = {}
30
- list.each do | name,sensor |
31
- if name =~ /.*fan.*/
32
- flist[name] = sensor
33
- end
34
- end
35
- return flist
36
- end
37
-
38
- # returns a hash of sensors where each key is the name of the sensor and the value is the sensor
39
- def templist(refreshdata=false)
40
- refresh if refreshdata
41
- tlist = {}
42
- list.each do | name , sensor |
43
- if sensor[:unit] =~ /.*degree.*/ || name =~ /.*temp.*/
44
- tlist[name] = sensor
45
- end
46
- end
47
- return tlist
48
- end
49
-
50
11
  def getsensors
51
12
  options["cmdargs"] = "sensor"
52
- value = runcmd
13
+ runcmd
53
14
  options.delete_notify("cmdargs")
54
15
  @result
55
16
  end
56
17
 
57
- private
58
-
59
- def method_missing(method, *args, &block)
60
- if not list.has_key?(method.to_s)
61
- raise NoMethodError
62
- else
63
- list[method.to_s]
64
- end
65
- end
66
-
67
- def parse(data)
68
- sensorlist = {}
69
- if ! data.nil?
70
- data.lines.each do | line|
71
- # skip the header
72
- sensor = Sensor.new(line)
73
- sensorlist[sensor[:name]] = sensor
74
- end
75
- end
76
- return sensorlist
18
+ def sensor_class
19
+ Sensor
77
20
  end
78
21
  end
79
22
 
80
-
81
23
  class Sensor < Hash
82
24
  def initialize(line)
83
25
  parse(line)
@@ -85,6 +27,7 @@ module Rubyipmi::Ipmitool
85
27
  end
86
28
 
87
29
  private
30
+
88
31
  def normalize(text)
89
32
  text.gsub(/\ /, '_').gsub(/\./, '').downcase
90
33
  end
@@ -93,17 +36,16 @@ module Rubyipmi::Ipmitool
93
36
  # Note: not all fields will exist on every server
94
37
  def parse(line)
95
38
  fields = [:name, :value, :unit, :status, :type, :state, :lower_nonrec,
96
- :lower_crit,:lower_noncrit, :upper_crit, :upper_nonrec, :asserts_enabled, :deasserts_enabled ]
39
+ :lower_crit, :lower_noncrit, :upper_crit, :upper_nonrec, :asserts_enabled, :deasserts_enabled]
97
40
  # skip the header
98
41
  data = line.split(/\|/)
99
42
  # should we ever encounter a field not in the fields list, just use a counter based fieldname
100
43
  i = 0
101
- data.each do | value |
44
+ data.each do |value|
102
45
  field ||= fields.shift || "field#{i}"
103
46
  self[field] = value.strip
104
47
  i = i.next
105
48
  end
106
49
  end
107
50
  end
108
-
109
- end
51
+ end
@@ -9,11 +9,14 @@ end
9
9
 
10
10
  module Rubyipmi
11
11
  module Ipmitool
12
-
13
12
  class Connection
14
-
15
13
  attr_accessor :options
16
14
 
15
+ DRIVERS_MAP = {
16
+ 'lan15' => 'lan',
17
+ 'lan20' => 'lanplus',
18
+ 'open' => 'open'
19
+ }
17
20
 
18
21
  def initialize(user, pass, host, opts)
19
22
  @options = Rubyipmi::ObservableHash.new
@@ -23,29 +26,17 @@ module Rubyipmi
23
26
  # So they are not required
24
27
  @options["U"] = user if user
25
28
  @options["P"] = pass if pass
26
- if opts.has_key?(:privilege)
27
- @options["L"] = opts[:privilege]
28
- end
29
+ @options["L"] = opts[:privilege] if opts.key?(:privilege)
29
30
  # Note: rubyipmi should auto detect which driver to use so its unnecessary to specify the driver unless
30
31
  # the user really wants to.
31
- @options['I'] = drivers_map[opts[:driver]] unless drivers_map[opts[:driver]].nil?
32
+ @options['I'] = DRIVERS_MAP[opts[:driver]] unless DRIVERS_MAP[opts[:driver]].nil?
32
33
  end
33
34
 
34
35
  # test the connection to ensure we can at least make a single call
35
36
  def connection_works?
36
- begin
37
- ! (bmc.info.nil? || bmc.info.empty? )
38
- rescue
39
- false
40
- end
41
- end
42
-
43
- def drivers_map
44
- {
45
- 'lan15' => 'lan',
46
- 'lan20' => 'lanplus',
47
- 'open' => 'open'
48
- }
37
+ ! (bmc.info.nil? || bmc.info.empty?)
38
+ rescue
39
+ false
49
40
  end
50
41
 
51
42
  def fru
@@ -1,67 +1,33 @@
1
1
  module Rubyipmi
2
2
  module Ipmitool
3
3
  class ErrorCodes
4
-
5
- @@codes = {
6
- "Authentication type NONE not supported\nAuthentication type NONE not supported\n" +
7
- "Error: Unable to establish LAN session\nGet Device ID command failed\n" => {"I" => "lanplus"},
8
- "Authentication type NONE not supported" => {"I" => "lanplus"},
9
- "Error: Unable to establish LAN session\nGet Device ID command failed\n" => {"I" => "lanplus"}
10
-
11
-
4
+ CODES = {
5
+ "Authentication type NONE not supported\nAuthentication type NONE not supported\n" \
6
+ "Error: Unable to establish LAN session\nGet Device ID command failed\n" => {"I" => "lanplus"},
7
+ "Authentication type NONE not supported" => {"I" => "lanplus"},
8
+ "Error: Unable to establish LAN session\nGet Device ID command failed\n" => {"I" => "lanplus"}
12
9
  }
10
+
13
11
  def self.length
14
- @@codes.length
12
+ CODES.length
15
13
  end
16
14
 
17
15
  def self.code
18
- @@codes
16
+ CODES
19
17
  end
20
18
 
21
19
  def self.search(code)
22
- fix = @@codes.fetch(code,nil)
20
+ fix = CODES.fetch(code, nil)
23
21
  if fix.nil?
24
- @@codes.each do | error, result |
22
+ CODES.each do |error, result|
25
23
  # the error should be a subset of the actual erorr
26
- if code =~ /.*#{error}.*/i
27
- return result
28
- end
24
+ return result if code =~ /.*#{error}.*/i
29
25
  end
30
26
  else
31
27
  return fix
32
28
  end
33
29
  raise "No Fix found" if fix.nil?
34
30
  end
35
-
36
-
37
- def throwError
38
- # Find out what kind of error is happening, parse results
39
- # Check for authentication or connection issue
40
-
41
- if @result =~ /timeout|timed\ out/
42
- code = "ipmi call: #{@lastcall} timed out"
43
- raise code
44
- else
45
- code = @result.split(":").last.chomp.strip if not @result.empty?
46
- end
47
- case code
48
- when "invalid hostname"
49
- raise code
50
- when "password invalid"
51
- raise code
52
- when "username invalid"
53
- raise code
54
- else
55
- raise :ipmierror, code
56
- end
57
- end
58
-
59
-
60
31
  end
61
-
62
-
63
-
64
-
65
32
  end
66
33
  end
67
-
@@ -15,6 +15,5 @@ module Rubyipmi
15
15
  delete(del)
16
16
  notify_observers(self)
17
17
  end
18
-
19
18
  end
20
- end
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubyipmi
4
+ VERSION = '0.11.0'.freeze
5
+ end