idrac 0.10.3 → 0.10.4
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/lib/idrac/boot.rb +0 -15
- data/lib/idrac/power.rb +21 -11
- data/lib/idrac/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 17491587256894c2ff168665dca777903a2d6b7d7582f745c4c3e81f697889cd
|
|
4
|
+
data.tar.gz: 432ecbfd6df649a69644254dc942e253a8d917f6ce2cd07c30f7f328c3ffee75
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 28cc04b7ec2f246ed29d95ba50481f52dff7893e69fd94dc6f82db81e0d7b988e6d0e21589ae09a75e99c51621f2a6650a1aa0ada2c74c8aa4ff6f2726cadf98
|
|
7
|
+
data.tar.gz: 6981e38fe25c803372a0c09aa3616db6ce7d0670415fbec9f73e143c25e44fff25e24ea650dfe5ebfcc821b14c6d17dd778664e43d11b5fbfd8c6458cacae374
|
data/lib/idrac/boot.rb
CHANGED
|
@@ -323,22 +323,7 @@ module IDRAC
|
|
|
323
323
|
raise Error, "Failed to get BIOS information. Status code: #{response.status}"
|
|
324
324
|
end
|
|
325
325
|
end
|
|
326
|
-
=begin
|
|
327
|
-
# Servers can boot in BIOS mode or in UEFI (modern, extensible BIOS replacement) mode.
|
|
328
|
-
# We use UEFI mode.
|
|
329
|
-
# self.get(path: "Systems/System.Embedded.1/Bios/Settings?$select=BootMode")
|
|
330
|
-
res = self.get(path: "Systems/System.Embedded.1/Bios")
|
|
331
|
-
if res["body"]["Attributes"]["BootMode"] == "Uefi"
|
|
332
|
-
return { status: :success }
|
|
333
|
-
else
|
|
334
|
-
res = self.set_system_configuration_profile(scp_boot_mode_uefi, reboot: true)
|
|
335
|
-
# Then must power cycle the server
|
|
336
|
-
self.power_on!(wait: true)
|
|
337
|
-
self.power_off!(wait: true)
|
|
338
|
-
return res
|
|
339
|
-
end
|
|
340
326
|
|
|
341
|
-
=end
|
|
342
327
|
def scp_boot_mode_uefi(idrac_license_version: 9)
|
|
343
328
|
opts = { "BootMode" => 'Uefi' }
|
|
344
329
|
# If we're iDRAC 9, we need enable a placeholder, otherwise we can't order the
|
data/lib/idrac/power.rb
CHANGED
|
@@ -58,7 +58,15 @@ module IDRAC
|
|
|
58
58
|
return true
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
+
# Reset types that restart the host rather than leave it down. A restart never settles on
|
|
62
|
+
# "Off", so it must never be waited on — or escalated to — as if it were a shutdown.
|
|
63
|
+
RESTART_TYPES = %w[ForceRestart GracefulRestart PowerCycle].freeze
|
|
64
|
+
|
|
61
65
|
def power_off(wait: true, kind: "ForceOff")
|
|
66
|
+
# A restart is not a shutdown. Sent down the power-off path it fails the wait for "Off" and
|
|
67
|
+
# escalates to ForceOff, which leaves the host powered down. Route it to the restart instead.
|
|
68
|
+
return reboot(kind: kind, wait: wait) if RESTART_TYPES.include?(kind)
|
|
69
|
+
|
|
62
70
|
ensure_authenticated!
|
|
63
71
|
|
|
64
72
|
puts "Powering off server...".light_cyan
|
|
@@ -93,37 +101,39 @@ module IDRAC
|
|
|
93
101
|
return true
|
|
94
102
|
end
|
|
95
103
|
|
|
96
|
-
def reboot
|
|
104
|
+
def reboot(kind: "ForceRestart", wait: false)
|
|
97
105
|
ensure_authenticated!
|
|
98
106
|
|
|
99
|
-
puts "Rebooting server...".light_cyan
|
|
107
|
+
puts "Rebooting server (#{kind})...".light_cyan
|
|
100
108
|
|
|
101
109
|
# Check current power state first
|
|
102
110
|
current_state = get_power_state rescue "Unknown"
|
|
103
111
|
if current_state == "Off"
|
|
104
112
|
puts "Server is currently off, powering on instead of rebooting".yellow
|
|
105
|
-
return power_on
|
|
113
|
+
return power_on(wait: wait)
|
|
106
114
|
end
|
|
107
115
|
|
|
108
|
-
# Send reboot command (Reset with ResetType=ForceRestart)
|
|
109
116
|
path = "/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
response = authenticated_request(:post, path, body: payload.to_json)
|
|
117
|
+
response = authenticated_request(:post, path, body: { "ResetType" => kind }.to_json)
|
|
113
118
|
|
|
114
119
|
if response.status >= 200 && response.status < 300
|
|
115
120
|
puts "Server reboot command sent successfully".green
|
|
116
|
-
|
|
117
|
-
elsif response.status == 409
|
|
121
|
+
elsif response.status == 409 && kind != "GracefulRestart"
|
|
118
122
|
error_data = JSON.parse(response.body) rescue nil
|
|
119
123
|
puts "Received conflict (409) error from iDRAC: #{error_data.inspect}"
|
|
120
124
|
# Try gracefulRestart as an alternative
|
|
121
125
|
puts "Trying GracefulRestart instead...".yellow
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
response = authenticated_request(:post, path, body: { "ResetType" => "GracefulRestart" }.to_json)
|
|
127
|
+
raise Error, "Failed to reboot server. Status code: #{response.status}" unless response.status.between?(200, 299)
|
|
124
128
|
else
|
|
125
129
|
raise Error, "Failed to reboot server. Status code: #{response.status}"
|
|
126
130
|
end
|
|
131
|
+
|
|
132
|
+
# "On" is the only terminal state a restart reaches. Never wait for "Off" here: the host may
|
|
133
|
+
# never report it, and treating that as failure is what turned a reboot into a shutdown.
|
|
134
|
+
wait_for_power_state(target_state: "On", tries: 12) if wait
|
|
135
|
+
|
|
136
|
+
return true
|
|
127
137
|
end
|
|
128
138
|
|
|
129
139
|
def get_power_state
|
data/lib/idrac/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: idrac
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.10.
|
|
4
|
+
version: 0.10.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jonathan Siegel
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: bin
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2026-08-29 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: httparty
|
|
@@ -281,6 +282,7 @@ licenses:
|
|
|
281
282
|
metadata:
|
|
282
283
|
homepage_uri: https://github.com/buildio/idrac
|
|
283
284
|
source_code_uri: https://github.com/buildio/idrac
|
|
285
|
+
post_install_message:
|
|
284
286
|
rdoc_options: []
|
|
285
287
|
require_paths:
|
|
286
288
|
- lib
|
|
@@ -295,7 +297,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
295
297
|
- !ruby/object:Gem::Version
|
|
296
298
|
version: '0'
|
|
297
299
|
requirements: []
|
|
298
|
-
rubygems_version: 3.
|
|
300
|
+
rubygems_version: 3.5.16
|
|
301
|
+
signing_key:
|
|
299
302
|
specification_version: 4
|
|
300
303
|
summary: API Client for Dell iDRAC
|
|
301
304
|
test_files: []
|