ilo-sdk 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|