idrac 0.7.4 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5d9f47c5b6977ccd41e8b66160b0ade16acfc79cd02f0f75d297debd907b8cc
4
- data.tar.gz: d0315c204e73a98fbe72343d5f678d240edb39814cd9aecee1dec47485a7c4b5
3
+ metadata.gz: 35af179780aaa39d3e0ecec031f951c09a9d1cbb2da98e28708aca8e603e8da2
4
+ data.tar.gz: 106abac6bd24e51135c62ec299119be92bd75ddd44df8ff460292a464e699ec0
5
5
  SHA512:
6
- metadata.gz: f53dca88f3bebdb95bee03a4447b73a72f6a9022eba6ef0c2db492f417a46812e17bd6f99580af080aefdc84960f2eaa84458ec7a978d16ee74bd6cb51121c69
7
- data.tar.gz: 8e5e9cb9e157fb8f71f05f0efbcf02887c2b09bf7acdaa0cbd416d0acccb80f06b3170c931ec319a9aaf129ef7fadce36a53ee8ca7c52de565d21e891b143023
6
+ metadata.gz: 4bf2ceda937c51d8f0a060a8cecba03465f3823f5032e59c41c94fbf67521e80ae9315ca1925415335e6f332274bf8431bf9f6fb1cd5b996835b301e775587bc
7
+ data.tar.gz: 329d1cc1cc4c8b1ec79c671f12cd273e9cd50f1512548bb083ebbc649a9c448991f6428c4b3646a7ee7fb536c84142c6cc8573ad4c7148ea36572b7f60bb8404
data/README.md CHANGED
@@ -218,6 +218,12 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
218
218
 
219
219
  ## Changelog
220
220
 
221
+ ### Version 0.7.5
222
+ - **Code Cleanup**: Consolidated duplicate methods across the codebase
223
+ - Removed 5 sets of duplicate methods: `base_url`, `get_firmware_version`, `wait_for_task`, `handle_location`, and `extract_identifiers`
224
+ - Simplified method delegation patterns for better maintainability
225
+ - Eliminated ~150+ lines of duplicate code while preserving all functionality
226
+
221
227
  ### Version 0.7.4
222
228
  - Added tolerance fol SSL Timeout errors during iDRAC operations.
223
229
 
@@ -170,7 +170,7 @@ module IDRAC
170
170
  displayed_components.add(firmware_name.downcase)
171
171
 
172
172
  # Extract key identifiers from the firmware name
173
- identifiers = extract_identifiers(firmware_name)
173
+ identifiers = catalog.extract_identifiers(firmware_name)
174
174
 
175
175
  # Try to find a matching update
176
176
  matching_updates = catalog_updates.select do |update|
@@ -255,7 +255,7 @@ module IDRAC
255
255
  # Skip if this update was already matched to a current firmware
256
256
  next if inventory[:firmware].any? do |fw|
257
257
  firmware_name = fw[:name] || ""
258
- identifiers = extract_identifiers(firmware_name)
258
+ identifiers = catalog.extract_identifiers(firmware_name)
259
259
 
260
260
  identifiers.any? { |id| update_name.downcase.include?(id.downcase) } ||
261
261
  update_name.downcase.include?(firmware_name.downcase) ||
@@ -429,23 +429,7 @@ module IDRAC
429
429
  end
430
430
  end
431
431
 
432
- def get_power_state
433
- # Ensure we have a client
434
- raise Error, "Client is required for power management" unless client
435
-
436
- # Login to iDRAC if needed
437
- client.login unless client.instance_variable_get(:@session_id)
438
-
439
- # Get system information
440
- response = client.authenticated_request(:get, "/redfish/v1/Systems/System.Embedded.1")
441
-
442
- if response.status == 200
443
- system_data = JSON.parse(response.body)
444
- return system_data["PowerState"]
445
- else
446
- raise Error, "Failed to get power state. Status code: #{response.status}"
447
- end
448
- end
432
+
449
433
 
450
434
  private
451
435
 
@@ -750,53 +734,6 @@ module IDRAC
750
734
  end
751
735
  end
752
736
 
753
- # Helper method to extract identifiers from component names
754
- def extract_identifiers(name)
755
- return [] unless name
756
-
757
- identifiers = []
758
-
759
- # Extract model numbers like X520, I350, etc.
760
- model_matches = name.scan(/[IX]\d{3,4}/)
761
- identifiers.concat(model_matches)
762
-
763
- # Extract PERC model like H730
764
- perc_matches = name.scan(/[HP]\d{3,4}/)
765
- identifiers.concat(perc_matches)
766
-
767
- # Extract other common identifiers
768
- if name.include?("NIC") || name.include?("Ethernet") || name.include?("Network")
769
- identifiers << "NIC"
770
- end
771
-
772
- if name.include?("PERC") || name.include?("RAID")
773
- identifiers << "PERC"
774
- # Extract PERC model like H730
775
- perc_match = name.match(/PERC\s+([A-Z]\d{3})/)
776
- identifiers << perc_match[1] if perc_match
777
- end
778
-
779
- if name.include?("BIOS")
780
- identifiers << "BIOS"
781
- end
782
-
783
- if name.include?("iDRAC") || name.include?("IDRAC") || name.include?("Remote Access Controller")
784
- identifiers << "iDRAC"
785
- end
786
-
787
- if name.include?("Power Supply") || name.include?("PSU")
788
- identifiers << "PSU"
789
- end
790
-
791
- if name.include?("Lifecycle Controller")
792
- identifiers << "LC"
793
- end
794
-
795
- if name.include?("CPLD")
796
- identifiers << "CPLD"
797
- end
798
-
799
- identifiers
800
- end
737
+
801
738
  end
802
739
  end
data/lib/idrac/session.rb CHANGED
@@ -282,8 +282,7 @@ module IDRAC
282
282
  private
283
283
 
284
284
  def base_url
285
- protocol = use_ssl ? 'https' : 'http'
286
- "#{protocol}://#{host}:#{port}"
285
+ client.base_url
287
286
  end
288
287
 
289
288
  def print_connection_debug_info
data/lib/idrac/storage.rb CHANGED
@@ -521,33 +521,7 @@ module IDRAC
521
521
  all_seds?(drives) && controller_encryption_capable?(controller) && controller_encryption_enabled?(controller)
522
522
  end
523
523
 
524
- # Get firmware version
525
- def get_firmware_version
526
- response = authenticated_request(:get, "/redfish/v1/Managers/iDRAC.Embedded.1?$select=FirmwareVersion")
527
-
528
- if response.status == 200
529
- begin
530
- data = JSON.parse(response.body)
531
- return data["FirmwareVersion"]
532
- rescue JSON::ParserError
533
- raise Error, "Failed to parse firmware version response: #{response.body}"
534
- end
535
- else
536
- # Try again without the $select parameter for older firmware
537
- response = authenticated_request(:get, "/redfish/v1/Managers/iDRAC.Embedded.1")
538
-
539
- if response.status == 200
540
- begin
541
- data = JSON.parse(response.body)
542
- return data["FirmwareVersion"]
543
- rescue JSON::ParserError
544
- raise Error, "Failed to parse firmware version response: #{response.body}"
545
- end
546
- else
547
- raise Error, "Failed to get firmware version. Status code: #{response.status}"
548
- end
549
- end
550
- end
524
+
551
525
 
552
526
  # Check if the controller is capable of encryption
553
527
  def controller_encryption_capable?(controller)
@@ -77,85 +77,7 @@ module IDRAC
77
77
  return true
78
78
  end
79
79
 
80
- # Wait for a task to complete
81
- def wait_for_task(task_id)
82
- task = nil
83
-
84
- begin
85
- loop do
86
- task_response = authenticated_request(:get, "/redfish/v1/TaskService/Tasks/#{task_id}")
87
-
88
- case task_response.status
89
- # 200-299
90
- when 200..299
91
- task = JSON.parse(task_response.body)
92
80
 
93
- if task["TaskState"] != "Running"
94
- break
95
- end
96
-
97
- # Extract percentage complete if available
98
- percent_complete = nil
99
- if task["Oem"] && task["Oem"]["Dell"] && task["Oem"]["Dell"]["PercentComplete"]
100
- percent_complete = task["Oem"]["Dell"]["PercentComplete"]
101
- debug "Task progress: #{percent_complete}% complete", 1
102
- end
103
-
104
- debug "Waiting for task to complete...: #{task["TaskState"]} #{task["TaskStatus"]}", 1
105
- sleep 5
106
- else
107
- return {
108
- status: :failed,
109
- error: "Failed to check task status: #{task_response.status} - #{task_response.body}"
110
- }
111
- end
112
- end
113
-
114
- # Check final task state
115
- if task["TaskState"] == "Completed" && task["TaskStatus"] == "OK"
116
- debugger
117
- return { status: :success }
118
- elsif task["SystemConfiguration"] # SystemConfigurationProfile requests yield a 202 with a SystemConfiguration key
119
- return task
120
- else
121
- # For debugging purposes
122
- debug task.inspect, 1, :yellow
123
-
124
- # Extract any messages from the response
125
- messages = []
126
- if task["Messages"] && task["Messages"].is_a?(Array)
127
- messages = task["Messages"].map { |m| m["Message"] }.compact
128
- end
129
-
130
- return {
131
- status: :failed,
132
- task_state: task["TaskState"],
133
- task_status: task["TaskStatus"],
134
- messages: messages,
135
- error: messages.first || "Task failed with state: #{task["TaskState"]}"
136
- }
137
- end
138
- rescue => e
139
- debugger
140
- return { status: :error, error: "Exception monitoring task: #{e.message}" }
141
- end
142
- end
143
-
144
- # Handle location header and determine whether to use wait_for_job or wait_for_task
145
- def handle_location(location)
146
- return nil if location.nil? || location.empty?
147
-
148
- # Extract the ID from the location
149
- id = location.split("/").last
150
-
151
- # Determine if it's a task or job based on the URL pattern
152
- if location.include?("/TaskService/Tasks/")
153
- wait_for_task(id)
154
- else
155
- # Assuming it's a job
156
- wait_for_job(id)
157
- end
158
- end
159
81
 
160
82
  # Get the system configuration profile for a given target (e.g. "RAID")
161
83
  def get_system_configuration_profile(target: "RAID")
data/lib/idrac/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IDRAC
4
- VERSION = "0.7.4"
4
+ VERSION = "0.7.5"
5
5
  end
@@ -244,32 +244,6 @@ module IDRAC
244
244
 
245
245
  private
246
246
 
247
- # Get firmware version (helper method for virtual media operations)
248
- def get_firmware_version
249
- response = authenticated_request(:get, "/redfish/v1/Managers/iDRAC.Embedded.1?$select=FirmwareVersion")
250
-
251
- if response.status == 200
252
- begin
253
- data = JSON.parse(response.body)
254
- return data["FirmwareVersion"]
255
- rescue JSON::ParserError
256
- raise Error, "Failed to parse firmware version response: #{response.body}"
257
- end
258
- else
259
- # Try again without the $select parameter for older firmware
260
- response = authenticated_request(:get, "/redfish/v1/Managers/iDRAC.Embedded.1")
261
-
262
- if response.status == 200
263
- begin
264
- data = JSON.parse(response.body)
265
- return data["FirmwareVersion"]
266
- rescue JSON::ParserError
267
- raise Error, "Failed to parse firmware version response: #{response.body}"
268
- end
269
- else
270
- raise Error, "Failed to get firmware version. Status code: #{response.status}"
271
- end
272
- end
273
- end
247
+
274
248
  end
275
249
  end
data/lib/idrac/web.rb CHANGED
@@ -180,8 +180,7 @@ module IDRAC
180
180
  private
181
181
 
182
182
  def base_url
183
- protocol = client.use_ssl ? 'https' : 'http'
184
- "#{protocol}://#{client.host}:#{client.port}"
183
+ client.base_url
185
184
  end
186
185
  end
187
186
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idrac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Siegel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-27 00:00:00.000000000 Z
11
+ date: 2025-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty