ilo-sdk 1.0.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.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/.rubocop.yml +57 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +2 -0
- data/LICENSE +201 -0
- data/README.md +346 -0
- data/Rakefile +23 -0
- data/ilo-sdk.gemspec +29 -0
- data/lib/ilo-sdk.rb +15 -0
- data/lib/ilo-sdk/client.rb +65 -0
- data/lib/ilo-sdk/helpers/account_service_helper.rb +70 -0
- data/lib/ilo-sdk/helpers/bios_helper.rb +146 -0
- data/lib/ilo-sdk/helpers/boot_settings_helper.rb +74 -0
- data/lib/ilo-sdk/helpers/chassis_helper.rb +67 -0
- data/lib/ilo-sdk/helpers/computer_details_helper.rb +158 -0
- data/lib/ilo-sdk/helpers/computer_system_helper.rb +51 -0
- data/lib/ilo-sdk/helpers/date_time_helper.rb +72 -0
- data/lib/ilo-sdk/helpers/firmware_update.rb +32 -0
- data/lib/ilo-sdk/helpers/log_entry_helper.rb +53 -0
- data/lib/ilo-sdk/helpers/manager_network_protocol_helper.rb +32 -0
- data/lib/ilo-sdk/helpers/power_helper.rb +42 -0
- data/lib/ilo-sdk/helpers/secure_boot_helper.rb +32 -0
- data/lib/ilo-sdk/helpers/service_root_helper.rb +48 -0
- data/lib/ilo-sdk/helpers/snmp_service_helper.rb +41 -0
- data/lib/ilo-sdk/helpers/virtual_media_helper.rb +66 -0
- data/lib/ilo-sdk/rest.rb +165 -0
- data/lib/ilo-sdk/version.rb +13 -0
- metadata +162 -0
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
6
|
+
|
7
|
+
task default: :spec
|
8
|
+
spec_pattern = 'spec/**/*_spec.rb'
|
9
|
+
def_spec_options = '--color '
|
10
|
+
|
11
|
+
desc 'Run unit tests only'
|
12
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
13
|
+
spec.pattern = spec_pattern
|
14
|
+
spec.rspec_opts = def_spec_options
|
15
|
+
end
|
16
|
+
|
17
|
+
RuboCop::RakeTask.new
|
18
|
+
|
19
|
+
desc 'Runs rubocop and unit tests'
|
20
|
+
task :test do
|
21
|
+
Rake::Task[:rubocop].invoke
|
22
|
+
Rake::Task[:spec].invoke
|
23
|
+
end
|
data/ilo-sdk.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# http://guides.rubygems.org/specification-reference
|
3
|
+
|
4
|
+
require_relative './lib/ilo-sdk/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'ilo-sdk'
|
8
|
+
spec.version = ILO_SDK::VERSION
|
9
|
+
spec.authors = ['Anirudh Gupta', 'Bik Bajwa', 'Jared Smartt', 'Vivek Bhatia']
|
10
|
+
spec.email = ['anirudhg@hpe.com', 'bik.bajwa@hpe.com', 'jared.smartt@hpe.com', 'vivek.bhatia@hpe.com']
|
11
|
+
spec.summary = 'Gem to interact with iLO API'
|
12
|
+
spec.description = 'Gem to interact with iLO API'
|
13
|
+
spec.license = 'Apache-2.0'
|
14
|
+
spec.homepage = 'https://github.com/HewlettPackard/ilo-sdk-ruby'
|
15
|
+
|
16
|
+
all_files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.files = all_files.reject { |f| f.match(%r{^(examples\/)|(spec\/)}) }
|
18
|
+
spec.executables = all_files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'pry'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'rspec'
|
25
|
+
spec.add_development_dependency 'rake'
|
26
|
+
spec.add_development_dependency 'simplecov'
|
27
|
+
spec.add_development_dependency 'rubocop', '= 0.39.0'
|
28
|
+
|
29
|
+
end
|
data/lib/ilo-sdk.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
4
|
+
#
|
5
|
+
# Unless required by applicable law or agreed to in writing,
|
6
|
+
# software distributed under the License is distributed on an "AS IS" BASIS,
|
7
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
require_relative 'ilo-sdk/version'
|
11
|
+
require_relative 'ilo-sdk/client'
|
12
|
+
|
13
|
+
# Module for interracting with the HPE iLO API
|
14
|
+
module ILO_SDK
|
15
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
4
|
+
#
|
5
|
+
# Unless required by applicable law or agreed to in writing,
|
6
|
+
# software distributed under the License is distributed on an "AS IS" BASIS,
|
7
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
require 'logger'
|
11
|
+
require_relative 'rest'
|
12
|
+
# Load all helpers:
|
13
|
+
Dir[File.join(File.dirname(__FILE__), '/helpers/*.rb')].each { |file| require file }
|
14
|
+
|
15
|
+
module ILO_SDK
|
16
|
+
# The client defines the connection to the iLO and handles communication with it
|
17
|
+
class Client
|
18
|
+
attr_accessor :host, :user, :password, :ssl_enabled, :logger, :log_level
|
19
|
+
|
20
|
+
# Create a client object
|
21
|
+
# @param [Hash] options the options to configure the client
|
22
|
+
# @option options [String] :host URL, hostname, or IP address of the iLO
|
23
|
+
# @option options [String] :user ('Administrator') Username to use for authentication with the iLO
|
24
|
+
# @option options [String] :password Password to use for authentication with the iLO
|
25
|
+
# @option options [Logger] :logger (Logger.new(STDOUT)) Logger object to use.
|
26
|
+
# Must implement debug(String), info(String), warn(String), error(String), & level=
|
27
|
+
# @option options [Symbol] :log_level (:info) Log level. Logger must define a constant with this name. ie Logger::INFO
|
28
|
+
# @option options [Boolean] :ssl_enabled (true) Use ssl for requests?
|
29
|
+
def initialize(options = {})
|
30
|
+
options = Hash[options.map { |k, v| [k.to_sym, v] }] # Convert string hash keys to symbols
|
31
|
+
@logger = options[:logger] || Logger.new(STDOUT)
|
32
|
+
[:debug, :info, :warn, :error, :level=].each { |m| raise "Logger must respond to #{m} method " unless @logger.respond_to?(m) }
|
33
|
+
@log_level = options[:log_level] || :info
|
34
|
+
@logger.level = @logger.class.const_get(@log_level.upcase) rescue @log_level
|
35
|
+
@host = options[:host]
|
36
|
+
raise 'Must set the host option' unless @host
|
37
|
+
@host = 'https://' + @host unless @host.start_with?('http://', 'https://')
|
38
|
+
@ssl_enabled = options[:ssl_enabled].nil? ? true : options[:ssl_enabled]
|
39
|
+
raise 'ssl_enabled option must be either true or false' unless [true, false].include?(@ssl_enabled)
|
40
|
+
@logger.warn 'User option not set. Using default (Administrator)' unless options[:user]
|
41
|
+
@user = options[:user] || 'Administrator'
|
42
|
+
@password = options[:password]
|
43
|
+
raise 'Must set the password option' unless @password
|
44
|
+
end
|
45
|
+
|
46
|
+
include Rest
|
47
|
+
|
48
|
+
# Include helper modules:
|
49
|
+
include ManagerNetworkProtocolHelper
|
50
|
+
include DateTimeHelper
|
51
|
+
include ComputerDetailsHelper
|
52
|
+
include SNMPServiceHelper
|
53
|
+
include PowerHelper
|
54
|
+
include AccountServiceHelper
|
55
|
+
include LogEntryHelper
|
56
|
+
include SecureBootHelper
|
57
|
+
include BiosHelper
|
58
|
+
include BootSettingsHelper
|
59
|
+
include FirmwareUpdateHelper
|
60
|
+
include VirtualMediaHelper
|
61
|
+
include ComputerSystemHelper
|
62
|
+
include ChassisHelper
|
63
|
+
include ServiceRootHelper
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
4
|
+
#
|
5
|
+
# Unless required by applicable law or agreed to in writing,
|
6
|
+
# software distributed under the License is distributed on an "AS IS" BASIS,
|
7
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
module ILO_SDK
|
11
|
+
# Contains helper methods for Account Service actions
|
12
|
+
module AccountServiceHelper
|
13
|
+
# Get the HREF for a user with a specific username
|
14
|
+
# @param [String, Symbol] uri
|
15
|
+
# @param [String, Symbol] username
|
16
|
+
# @raise [RuntimeError] if the request failed
|
17
|
+
# @return [String] userhref
|
18
|
+
def userhref(uri, username)
|
19
|
+
response = rest_get(uri)
|
20
|
+
items = response_handler(response)['Items']
|
21
|
+
items.each do |it|
|
22
|
+
return it['links']['self']['href'] if it['UserName'] == username
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get the users
|
27
|
+
# @raise [RuntimeError] if the request failed
|
28
|
+
# @return [String[]] users
|
29
|
+
def get_users
|
30
|
+
response = rest_get('/redfish/v1/AccountService/Accounts/')
|
31
|
+
response_handler(response)['Items'].collect { |user| user['UserName'] }
|
32
|
+
end
|
33
|
+
|
34
|
+
# Create a user
|
35
|
+
# @param [String, Symbol] username
|
36
|
+
# @param [String, Symbol] password
|
37
|
+
# @raise [RuntimeError] if the request failed
|
38
|
+
# @return true
|
39
|
+
def create_user(username, password)
|
40
|
+
new_action = { 'UserName' => username, 'Password' => password, 'Oem' => { 'Hp' => { 'LoginName' => username } } }
|
41
|
+
response = rest_post('/redfish/v1/AccountService/Accounts/', body: new_action)
|
42
|
+
response_handler(response)
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
# Change the password for a user
|
47
|
+
# @param [String, Symbol] username
|
48
|
+
# @param [String, Symbol] password
|
49
|
+
# @raise [RuntimeError] if the request failed
|
50
|
+
# @return true
|
51
|
+
def change_password(username, password)
|
52
|
+
new_action = { 'Password' => password }
|
53
|
+
userhref = userhref('/redfish/v1/AccountService/Accounts/', username)
|
54
|
+
response = rest_patch(userhref, body: new_action)
|
55
|
+
response_handler(response)
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
59
|
+
# Delete a specific user
|
60
|
+
# @param [String, Symbol] username
|
61
|
+
# @raise [RuntimeError] if the request failed
|
62
|
+
# @return true
|
63
|
+
def delete_user(username)
|
64
|
+
userhref = userhref('/redfish/v1/AccountService/Accounts/', username)
|
65
|
+
response = rest_delete(userhref)
|
66
|
+
response_handler(response)
|
67
|
+
true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
4
|
+
#
|
5
|
+
# Unless required by applicable law or agreed to in writing,
|
6
|
+
# software distributed under the License is distributed on an "AS IS" BASIS,
|
7
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
module ILO_SDK
|
11
|
+
# Contains helper methods for Bios actions
|
12
|
+
module BiosHelper
|
13
|
+
# Get the bios base config
|
14
|
+
# @raise [RuntimeError] if the request failed
|
15
|
+
# @return [Fixnum] bios_baseconfig
|
16
|
+
def get_bios_baseconfig
|
17
|
+
response = rest_get('/redfish/v1/Systems/1/bios/Settings/')
|
18
|
+
response_handler(response)['BaseConfig']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Revert the BIOS
|
22
|
+
# @raise [RuntimeError] if the request failed
|
23
|
+
# @return true
|
24
|
+
def revert_bios
|
25
|
+
new_action = { 'BaseConfig' => 'default' }
|
26
|
+
response = rest_patch('/redfish/v1/systems/1/bios/Settings/', body: new_action)
|
27
|
+
response_handler(response)
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get the UEFI shell start up
|
32
|
+
# @raise [RuntimeError] if the request failed
|
33
|
+
# @return [String] uefi_shell_startup
|
34
|
+
def get_uefi_shell_startup
|
35
|
+
response = rest_get('/redfish/v1/Systems/1/bios/Settings/')
|
36
|
+
bios = response_handler(response)
|
37
|
+
{
|
38
|
+
'UefiShellStartup' => bios['UefiShellStartup'],
|
39
|
+
'UefiShellStartupLocation' => bios['UefiShellStartupLocation'],
|
40
|
+
'UefiShellStartupUrl' => bios['UefiShellStartupUrl']
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
# Set the UEFI shell start up
|
45
|
+
# @param [String, Symbol] uefi_shell_startup
|
46
|
+
# @param [String, Symbol] uefi_shell_startup_location
|
47
|
+
# @param [String, Symbol] uefi_shell_startup_url
|
48
|
+
# @raise [RuntimeError] if the request failed
|
49
|
+
# @return true
|
50
|
+
def set_uefi_shell_startup(uefi_shell_startup, uefi_shell_startup_location, uefi_shell_startup_url)
|
51
|
+
new_action = {
|
52
|
+
'UefiShellStartup' => uefi_shell_startup,
|
53
|
+
'UefiShellStartupLocation' => uefi_shell_startup_location,
|
54
|
+
'UefiShellStartupUrl' => uefi_shell_startup_url
|
55
|
+
}
|
56
|
+
response = rest_patch('/redfish/v1/Systems/1/bios/Settings/', body: new_action)
|
57
|
+
response_handler(response)
|
58
|
+
true
|
59
|
+
end
|
60
|
+
|
61
|
+
# Get the BIOS DHCP
|
62
|
+
# @raise [RuntimeError] if the request failed
|
63
|
+
# @return [String] bios_dhcp
|
64
|
+
def get_bios_dhcp
|
65
|
+
response = rest_get('/redfish/v1/Systems/1/bios/Settings/')
|
66
|
+
bios = response_handler(response)
|
67
|
+
{
|
68
|
+
'Dhcpv4' => bios['Dhcpv4'],
|
69
|
+
'Ipv4Address' => bios['Ipv4Address'],
|
70
|
+
'Ipv4Gateway' => bios['Ipv4Gateway'],
|
71
|
+
'Ipv4PrimaryDNS' => bios['Ipv4PrimaryDNS'],
|
72
|
+
'Ipv4SecondaryDNS' => bios['Ipv4SecondaryDNS'],
|
73
|
+
'Ipv4SubnetMask' => bios['Ipv4SubnetMask']
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
# Set the BIOS DHCP
|
78
|
+
# @param [String, Symbol] dhcpv4
|
79
|
+
# @param [String, Symbol] ipv4_address
|
80
|
+
# @param [String, Symbol] ipv4_gateway
|
81
|
+
# @param [String, Symbol] ipv4_primary_dns
|
82
|
+
# @param [String, Symbol] ipv4_secondary_dns
|
83
|
+
# @param [String, Symbol] ipv4_subnet_mask
|
84
|
+
# @raise [RuntimeError] if the request failed
|
85
|
+
# @return true
|
86
|
+
def set_bios_dhcp(dhcpv4, ipv4_address = '', ipv4_gateway = '', ipv4_primary_dns = '', ipv4_secondary_dns = '', ipv4_subnet_mask = '')
|
87
|
+
new_action = {
|
88
|
+
'Dhcpv4' => dhcpv4,
|
89
|
+
'Ipv4Address' => ipv4_address,
|
90
|
+
'Ipv4Gateway' => ipv4_gateway,
|
91
|
+
'Ipv4PrimaryDNS' => ipv4_primary_dns,
|
92
|
+
'Ipv4SecondaryDNS' => ipv4_secondary_dns,
|
93
|
+
'Ipv4SubnetMask' => ipv4_subnet_mask
|
94
|
+
}
|
95
|
+
response = rest_patch('/redfish/v1/Systems/1/bios/Settings/', body: new_action)
|
96
|
+
response_handler(response)
|
97
|
+
true
|
98
|
+
end
|
99
|
+
|
100
|
+
# Get the URL boot file
|
101
|
+
# @raise [RuntimeError] if the request failed
|
102
|
+
# @return [String] url_boot_file
|
103
|
+
def get_url_boot_file
|
104
|
+
response = rest_get('/redfish/v1/Systems/1/bios/Settings/')
|
105
|
+
response_handler(response)['UrlBootFile']
|
106
|
+
end
|
107
|
+
|
108
|
+
# Set the URL boot file
|
109
|
+
# @param [String, Symbol] url_boot_file
|
110
|
+
# @raise [RuntimeError] if the request failed
|
111
|
+
# @return true
|
112
|
+
def set_url_boot_file(url_boot_file)
|
113
|
+
new_action = { 'UrlBootFile' => url_boot_file }
|
114
|
+
response = rest_patch('/redfish/v1/Systems/1/bios/Settings/', body: new_action)
|
115
|
+
response_handler(response)
|
116
|
+
true
|
117
|
+
end
|
118
|
+
|
119
|
+
# Get the BIOS service
|
120
|
+
# @raise [RuntimeError] if the request failed
|
121
|
+
# @return [String] bios_service
|
122
|
+
def get_bios_service
|
123
|
+
response = rest_get('/redfish/v1/Systems/1/bios/Settings/')
|
124
|
+
bios = response_handler(response)
|
125
|
+
{
|
126
|
+
'ServiceName' => bios['ServiceName'],
|
127
|
+
'ServiceEmail' => bios['ServiceEmail']
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
# Set the BIOS service
|
132
|
+
# @param [String, Symbol] name
|
133
|
+
# @param [String, Symbol] email
|
134
|
+
# @raise [RuntimeError] if the request failed
|
135
|
+
# @return true
|
136
|
+
def set_bios_service(name, email)
|
137
|
+
new_action = {
|
138
|
+
'ServiceName' => name,
|
139
|
+
'ServiceEmail' => email
|
140
|
+
}
|
141
|
+
response = rest_patch('/redfish/v1/Systems/1/bios/Settings/', body: new_action)
|
142
|
+
response_handler(response)
|
143
|
+
true
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
4
|
+
#
|
5
|
+
# Unless required by applicable law or agreed to in writing,
|
6
|
+
# software distributed under the License is distributed on an "AS IS" BASIS,
|
7
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
module ILO_SDK
|
11
|
+
# Contains helper methods for Boot Settings actions
|
12
|
+
module BootSettingsHelper
|
13
|
+
# Get the boot base config
|
14
|
+
# @raise [RuntimeError] if the request failed
|
15
|
+
# @return [Fixnum] boot_baseconfig
|
16
|
+
def get_boot_baseconfig
|
17
|
+
response = rest_get('/redfish/v1/Systems/1/bios/Boot/Settings/')
|
18
|
+
response_handler(response)['BaseConfig']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Revert the boot
|
22
|
+
# @raise [RuntimeError] if the request failed
|
23
|
+
# @return true
|
24
|
+
def revert_boot
|
25
|
+
new_action = { 'BaseConfig' => 'default' }
|
26
|
+
response = rest_patch('/redfish/v1/systems/1/bios/Boot/Settings/', body: new_action)
|
27
|
+
response_handler(response)
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get the boot order
|
32
|
+
# @raise [RuntimeError] if the request failed
|
33
|
+
# @return [Fixnum] boot_order
|
34
|
+
def get_boot_order
|
35
|
+
response = rest_get('/redfish/v1/systems/1/bios/Boot/Settings/')
|
36
|
+
response_handler(response)['PersistentBootConfigOrder']
|
37
|
+
end
|
38
|
+
|
39
|
+
# Set the boot order
|
40
|
+
# @param [Fixnum] boot_order
|
41
|
+
# @raise [RuntimeError] if the request failed
|
42
|
+
# @return true
|
43
|
+
def set_boot_order(boot_order)
|
44
|
+
new_action = { 'PersistentBootConfigOrder' => boot_order }
|
45
|
+
response = rest_patch('/redfish/v1/systems/1/bios/Boot/Settings/', body: new_action)
|
46
|
+
response_handler(response)
|
47
|
+
true
|
48
|
+
end
|
49
|
+
|
50
|
+
# Get the temporary boot order
|
51
|
+
# @raise [RuntimeError] if the request failed
|
52
|
+
# @return [Fixnum] temporary_boot_order
|
53
|
+
def get_temporary_boot_order
|
54
|
+
response = rest_get('/redfish/v1/Systems/1/')
|
55
|
+
response_handler(response)['Boot']['BootSourceOverrideTarget']
|
56
|
+
end
|
57
|
+
|
58
|
+
# Set the temporary boot order
|
59
|
+
# @param [Fixnum] boot_target
|
60
|
+
# @raise [RuntimeError] if the request failed
|
61
|
+
# @return true
|
62
|
+
def set_temporary_boot_order(boot_target)
|
63
|
+
response = rest_get('/redfish/v1/Systems/1/')
|
64
|
+
boottargets = response_handler(response)['Boot']['BootSourceOverrideSupported']
|
65
|
+
unless boottargets.include? boot_target
|
66
|
+
raise "BootSourceOverrideTarget value - #{boot_target} is not supported. Valid values are: #{boottargets}"
|
67
|
+
end
|
68
|
+
new_action = { 'Boot' => { 'BootSourceOverrideTarget' => boot_target } }
|
69
|
+
response = rest_patch('/redfish/v1/Systems/1/', body: new_action)
|
70
|
+
response_handler(response)
|
71
|
+
true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
4
|
+
#
|
5
|
+
# Unless required by applicable law or agreed to in writing,
|
6
|
+
# software distributed under the License is distributed on an "AS IS" BASIS,
|
7
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
module ILO_SDK
|
11
|
+
# Contains helper methods for Chassis actions
|
12
|
+
module ChassisHelper
|
13
|
+
# Get the power metrics
|
14
|
+
# @raise [RuntimeError] if the request failed
|
15
|
+
# @return [Hash] power_metrics
|
16
|
+
def get_power_metrics
|
17
|
+
chassis = rest_get('/redfish/v1/Chassis/')
|
18
|
+
chassis_uri = response_handler(chassis)['links']['Member'][0]['href']
|
19
|
+
power_metrics_uri = response_handler(rest_get(chassis_uri))['links']['PowerMetrics']['href']
|
20
|
+
response = rest_get(power_metrics_uri)
|
21
|
+
metrics = response_handler(response)
|
22
|
+
power_supplies = []
|
23
|
+
metrics['PowerSupplies'].each do |ps|
|
24
|
+
power_supply = {
|
25
|
+
'LineInputVoltage' => ps['LineInputVoltage'],
|
26
|
+
'LineInputVoltageType' => ps['LineInputVoltageType'],
|
27
|
+
'PowerCapacityWatts' => ps['PowerCapacityWatts'],
|
28
|
+
'PowerSupplyType' => ps['PowerSupplyType'],
|
29
|
+
'Health' => ps['Status']['Health'],
|
30
|
+
'State' => ps['Status']['State']
|
31
|
+
}
|
32
|
+
power_supplies.push(power_supply)
|
33
|
+
end
|
34
|
+
{
|
35
|
+
@host => {
|
36
|
+
'PowerCapacityWatts' => metrics['PowerCapacityWatts'],
|
37
|
+
'PowerConsumedWatts' => metrics['PowerConsumedWatts'],
|
38
|
+
'PowerSupplies' => power_supplies
|
39
|
+
}
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
# Get the thermal metrics
|
44
|
+
# @raise [RuntimeError] if the request failed
|
45
|
+
# @return [Hash] thermal_metrics
|
46
|
+
def get_thermal_metrics
|
47
|
+
chassis = rest_get('/redfish/v1/Chassis/')
|
48
|
+
chassis_uri = response_handler(chassis)['links']['Member'][0]['href']
|
49
|
+
thermal_metrics_uri = response_handler(rest_get(chassis_uri))['links']['ThermalMetrics']['href']
|
50
|
+
response = rest_get(thermal_metrics_uri)
|
51
|
+
temperatures = response_handler(response)['Temperatures']
|
52
|
+
temp_details = []
|
53
|
+
temperatures.each do |temp|
|
54
|
+
temp_detail = {
|
55
|
+
'PhysicalContext' => temp['PhysicalContext'],
|
56
|
+
'Name' => temp['Name'],
|
57
|
+
'CurrentReading' => temp['ReadingCelsius'],
|
58
|
+
'CriticalThreshold' => temp['LowerThresholdCritical'],
|
59
|
+
'Health' => temp['Status']['Health'],
|
60
|
+
'State' => temp['Status']['State']
|
61
|
+
}
|
62
|
+
temp_details.push(temp_detail)
|
63
|
+
end
|
64
|
+
{ @host => temp_details }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|