ilorb 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62653f5b9895874fed33c3809ef3ee0ab36be009
4
- data.tar.gz: cac900742ac25d1bfbff654e0aba7094d1419bb2
3
+ metadata.gz: ef13e4245bd8ab4b335dec77e001da8c498c5353
4
+ data.tar.gz: 285a8b272eba2ae35d1f76aca2a8e2b4082189df
5
5
  SHA512:
6
- metadata.gz: d7cb339ba4da6be19d191aac561538b76324efd1cf205c8cd32b8a3724a12c91000cd2719b8ee47611a98d2ebd88a201c29fb9b58a4fe988e69f988f205e659f
7
- data.tar.gz: 6801e037528efada5421ff2a088e7cd80749c4bf3db80974c6f803c16a93fc2dea9f1cc9bcdba288d555663f1019de2366c017fbde5fe1a48b1adaa7ca83dc36
6
+ metadata.gz: 04e755c6e729b2216288cab7250f028684ef2ab63a183a0110123cb2b0b9c54303338daeb67b4d8b49086b1d68769ed070d3aa40df59c591bd168b89f36307a2
7
+ data.tar.gz: 4d46b5905eca7e3ba167ccf776ae83152e828ddfa8b2a0a031c27db0f58b9a786c5e387966791d24836288cb1dd4483083f0fc82ef7754a3eb7789f2c1dc27d8
@@ -0,0 +1,25 @@
1
+ AllCops:
2
+ DisplayCopNames: true
3
+
4
+ Lint/UnusedBlockArgument:
5
+ Enabled: false
6
+
7
+ Metrics/LineLength:
8
+ Max: 120
9
+
10
+ Metrics/MethodLength:
11
+ Max: 15
12
+ CountComments: false
13
+
14
+ Metrics/ClassLength:
15
+ Max: 150
16
+ CountComments: false
17
+
18
+ Style/StringLiterals:
19
+ EnforcedStyle: double_quotes
20
+
21
+ Style/StringLiteralsInInterpolation:
22
+ EnforcedStyle: double_quotes
23
+
24
+ Style/TrailingComma:
25
+ EnforcedStyleForMultiline: consistent_comma
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
  gemspec
@@ -9,6 +9,9 @@ GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  addressable (2.3.5)
12
+ ast (2.0.0)
13
+ astrolabe (1.3.0)
14
+ parser (>= 2.2.0.pre.3, < 3.0)
12
15
  coderay (1.0.9)
13
16
  crack (0.4.1)
14
17
  safe_yaml (~> 0.9.0)
@@ -18,10 +21,14 @@ GEM
18
21
  nokogiri (1.6.6.2)
19
22
  mini_portile (~> 0.6.0)
20
23
  nori (2.5.0)
24
+ parser (2.2.2.2)
25
+ ast (>= 1.1, < 3.0)
26
+ powerpack (0.1.0)
21
27
  pry (0.9.12.2)
22
28
  coderay (~> 1.0.5)
23
29
  method_source (~> 0.8)
24
30
  slop (~> 3.4)
31
+ rainbow (2.0.0)
25
32
  rspec (2.14.1)
26
33
  rspec-core (~> 2.14.0)
27
34
  rspec-expectations (~> 2.14.0)
@@ -30,6 +37,13 @@ GEM
30
37
  rspec-expectations (2.14.0)
31
38
  diff-lcs (>= 1.1.3, < 2.0)
32
39
  rspec-mocks (2.14.1)
40
+ rubocop (0.30.1)
41
+ astrolabe (~> 1.3)
42
+ parser (>= 2.2.2.1, < 3.0)
43
+ powerpack (~> 0.1)
44
+ rainbow (>= 1.99.1, < 3.0)
45
+ ruby-progressbar (~> 1.4)
46
+ ruby-progressbar (1.7.5)
33
47
  safe_yaml (0.9.4)
34
48
  slop (3.4.5)
35
49
  webmock (1.13.0)
@@ -44,4 +58,5 @@ DEPENDENCIES
44
58
  ilorb!
45
59
  pry
46
60
  rspec (~> 2.14)
61
+ rubocop
47
62
  webmock (~> 1.13)
data/README.md CHANGED
@@ -77,7 +77,6 @@ result:
77
77
 
78
78
  ## TODO
79
79
 
80
- * Tests
81
80
  * Use a custom parser instead of Nori, to avoid one-element-hashes and cast responses to actual objects (e.g Y/N to true/false)
82
81
  * See for mandatory parameters
83
82
  * Add a CLI tool
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require "rubocop/rake_task"
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new(:rubocop)
5
7
 
6
- task default: :spec
8
+ task default: [:spec, :rubocop]
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- require 'ilorb/version'
5
+ require "ilorb/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "ilorb"
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/josqu4red/ilorb"
15
15
  spec.license = "MIT"
16
16
 
17
- spec.files = `git ls-files`.split($/)
17
+ spec.files = `git ls-files`.split($RS)
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rspec", "~> 2.14"
24
24
  spec.add_development_dependency "webmock", "~> 1.13"
25
25
  spec.add_development_dependency "pry"
26
+ spec.add_development_dependency "rubocop"
26
27
  spec.add_dependency "nokogiri"
27
28
  spec.add_dependency "nori", "~> 2"
28
29
  end
@@ -1,45 +1,45 @@
1
- require 'logger'
2
- require 'socket'
3
- require 'openssl'
4
- require 'net/https'
5
- require 'nokogiri'
6
- require 'nori'
7
- require 'ilorb/ribcl'
8
-
1
+ require "logger"
2
+ require "socket"
3
+ require "openssl"
4
+ require "net/https"
5
+ require "nokogiri"
6
+ require "nori"
7
+ require "ilorb/ribcl"
8
+
9
+ # Main library class
9
10
  class ILORb
10
-
11
11
  def initialize(config = {})
12
12
  @hostname = config[:hostname]
13
- @login = config[:login] || "Administrator"
14
13
  @password = config[:password]
15
- @port = config[:port] || 443
16
- @protocol = config[:protocol] || :http
17
- @verify_ssl = config[:verify_ssl] || false
18
- @ribcl_path = "/ribcl"
14
+ @login = config.fetch(:login, "Administrator")
15
+ @port = config.fetch(:port, 443)
16
+ @protocol = config.fetch(:protocol, :http)
17
+ @verify_ssl = config.fetch(:verify_ssl, false)
18
+ @definitions_path = config.fetch(:definitions_path, File.join(File.dirname(__FILE__), "ilorb/definitions"))
19
+ @ribcl_path = config.fetch(:ribcl_path, "/ribcl")
19
20
 
20
21
  @log = Logger.new(STDOUT)
21
22
  @log.level = config[:debug] ? Logger::DEBUG : Logger::WARN
22
23
 
23
- @nori = Nori.new(:convert_tags_to => lambda{|tag| tag.downcase.to_sym})
24
+ @nori = Nori.new(convert_tags_to: ->(tag) { tag.downcase.to_sym })
24
25
 
25
26
  setup_commands
26
27
  end
27
28
 
28
29
  # args should be empty or contain a hash anytime
29
30
  def method_missing(name, *args, &block)
30
- if @ribcl.has_command?(name)
31
+ if @ribcl.command?(name)
31
32
  command = @ribcl.command(name)
32
33
 
33
- raise RIBCL::NotImplementedError, "#{name} is not supported" unless command.supported?
34
+ fail RIBCL::NotImplementedError, "#{name} is not supported" unless command.supported?
34
35
  @log.info("Calling method #{name}")
35
36
 
36
37
  params = args.first || {}
37
38
  attributes = {}
38
- element_map = nil
39
39
 
40
40
  command.get_attributes.each do |attr|
41
41
  # Attributes are mandatory
42
- error("Attribute #{attr} missing in #{name} call") unless params.has_key?(attr)
42
+ fail "Attribute #{attr} missing in #{name} call" unless params.key?(attr)
43
43
  attributes.store(attr, @ribcl.encode(params.delete(attr)))
44
44
  end
45
45
 
@@ -47,26 +47,26 @@ class ILORb
47
47
  element_map = command.map_elements
48
48
 
49
49
  elements_array = [params].flatten.map do |params_hash|
50
- Hash[params_hash.map{ |k,v| [ k, @ribcl.encode(params_hash.delete(k)) ] if element_map.has_key?(k) }.compact]
50
+ Hash[params_hash.map { |k, _| [k, @ribcl.encode(params_hash.delete(k))] if element_map.key?(k) }.compact]
51
51
  end
52
52
 
53
- #TODO check for CDATA
53
+ # TODO: check for CDATA
54
54
 
55
55
  request = ribcl_request(command, attributes) do |xml|
56
56
  elements_array.each do |elements_hash|
57
57
  elements_hash.each do |key, value|
58
58
  elt = command.get_elements[element_map[key].first]
59
59
  if elt.is_a?(Array)
60
- attrs = Hash[elt.map{|x| [x, elements_hash.delete(element_map.invert[[element_map[key].first, x]])]}]
60
+ attrs = Hash[elt.map { |x| [x, elements_hash.delete(element_map.invert[[element_map[key].first, x]])] }]
61
61
  else
62
- attrs = {element_map[key].last => value}
62
+ attrs = { element_map[key].last => value }
63
63
  end
64
64
  xml.send(element_map[key].first, attrs)
65
65
  end
66
66
  end
67
67
  end
68
68
  elsif !command.get_text.nil?
69
- if text = params[command.get_text]
69
+ if (text = params[command.get_text])
70
70
  request = ribcl_request(command, text, attributes)
71
71
  end
72
72
  else
@@ -74,33 +74,33 @@ class ILORb
74
74
  end
75
75
 
76
76
  response = send_request(request)
77
- parse_response(response, name)
77
+ parse_response(response)
78
78
  else
79
79
  super
80
80
  end
81
81
  end
82
82
 
83
83
  def respond_to(name)
84
- @ribcl.has_command?(name) ? true : super
84
+ @ribcl.command?(name) ? true : super
85
85
  end
86
86
 
87
87
  def supported_commands
88
- @ribcl.select{|name, command| command.supported?}.keys
88
+ @ribcl.select { |_, command| command.supported? }.keys
89
89
  end
90
90
 
91
91
  private
92
92
 
93
- def ribcl_request(command, *args, &block)
93
+ def ribcl_request(command, *args)
94
94
  builder = Nokogiri::XML::Builder.new do |xml|
95
- xml.ribcl(:version => "2.0") {
96
- xml.login(:password => @password, :user_login => @login) {
97
- xml.send(command.context, :mode => command.mode) {
98
- xml.send(command.name, *args) {
95
+ xml.ribcl(version: "2.0") do
96
+ xml.login(password: @password, user_login: @login) do
97
+ xml.send(command.context, mode: command.mode) do
98
+ xml.send(command.name, *args) do
99
99
  yield xml if block_given?
100
- }
101
- }
102
- }
103
- }
100
+ end
101
+ end
102
+ end
103
+ end
104
104
  end
105
105
 
106
106
  builder.to_xml
@@ -145,11 +145,11 @@ class ILORb
145
145
  ssl_sock.sync_close = true
146
146
 
147
147
  @log.info("Connecting to #{@hostname}:#{@port}")
148
- ssl_sock.connect
149
148
  @log.debug("Request:\n#{xml}")
149
+ ssl_sock.connect
150
150
  ssl_sock.puts("#{xml}\r\n")
151
151
  response = ""
152
- while line = ssl_sock.gets
152
+ while (line = ssl_sock.gets)
153
153
  response += line
154
154
  end
155
155
  ssl_sock.close
@@ -157,7 +157,7 @@ class ILORb
157
157
  response
158
158
  end
159
159
 
160
- def parse_response(xml, command)
160
+ def parse_response(xml)
161
161
  @log.debug("Response:\n#{xml}")
162
162
 
163
163
  # ILO sends back multiple XML documents, split by XML header and remove first (empty)
@@ -166,17 +166,15 @@ class ILORb
166
166
  output = {}
167
167
 
168
168
  messages.each do |doc|
169
- xml_doc = Nokogiri::XML(doc){|cfg| cfg.nonet.noblanks}
169
+ xml_doc = Nokogiri::XML(doc) { |cfg| cfg.nonet.noblanks }
170
170
 
171
171
  xml_doc.root.children.each do |node|
172
172
  case node.name
173
173
  when "RESPONSE"
174
174
  code = node.attr("STATUS").to_i(16)
175
175
  message = node.attr("MESSAGE")
176
- if code == 0
177
- output[:status] = { :code => code, :message => message }
178
- else
179
- output[:status] = { :code => code, :message => message }
176
+ output[:status] = { code: code, message: message }
177
+ if code != 0
180
178
  @log.error("#{message} (#{code})")
181
179
  break
182
180
  end
@@ -192,12 +190,7 @@ class ILORb
192
190
  end
193
191
 
194
192
  def setup_commands
195
- @ribcl = ILORb::RIBCL.load(File.join(File.dirname(__FILE__), "ilorb/definitions", "*.rb"))
193
+ @ribcl = ILORb::RIBCL.load(File.join(@definitions_path, "*.rb"))
196
194
  nil
197
195
  end
198
-
199
- def error(message)
200
- @log.error(message)
201
- raise message
202
- end
203
196
  end
@@ -50,22 +50,27 @@ context :rib_info do
50
50
  attributes :device, :image_url
51
51
  end
52
52
  write_cmd :license do
53
- elements :activate => :key
53
+ elements activate: :key
54
54
  end
55
55
  write_cmd :mod_global_settings do
56
- elements :session_timeout, :f8_prompt_enabled, :http_port, :https_port, :remote_console_port, :min_password, :ilo_funct_enabled, :virtual_media_port, :f8_login_required, :enforce_aes, :authentication_failure_logging, :ssh_status, :ssh_port, :serial_cli_status, :serial_cli_speed, :rbsu_post_ip, :snmp_access_enabled, :snmp_port, :snmp_trap_port, :remote_syslog_enable, :remote_syslog_port, :remote_syslog_server_address, :alertmail_enable, :alertmail_email_address, :alertmail_sender_domain, :alertmail_smtp_server, :ipmi_dcmi_over_lan_enabled, :vsp_log_enable
56
+ elements :session_timeout, :f8_prompt_enabled, :http_port, :https_port, :remote_console_port, :min_password,
57
+ :ilo_funct_enabled, :virtual_media_port, :f8_login_required, :enforce_aes, :authentication_failure_logging,
58
+ :ssh_status, :ssh_port, :serial_cli_status, :serial_cli_speed, :rbsu_post_ip, :snmp_access_enabled,
59
+ :snmp_port, :snmp_trap_port, :remote_syslog_enable, :remote_syslog_port, :remote_syslog_server_address,
60
+ :alertmail_enable, :alertmail_email_address, :alertmail_sender_domain, :alertmail_smtp_server,
61
+ :ipmi_dcmi_over_lan_enabled, :vsp_log_enable
57
62
  end
58
63
  write_cmd :mod_network_settings do
59
64
  elements :enable_nic, :nic_speed, :full_duplex, :speed_autoselect, :ping_gateway,
60
65
  :shared_network_port, :vlan_enabled, :vlan_id,
61
- :dhcp_enable, :dhcp_domain_name, :dhcp_gateway, :dhcp_dns_server, :dhcp_wins_server, :dhcp_static_route, :dhcp_sntp_settings,
62
- :ip_address, :subnet_mask, :gateway_ip_address, :dns_name, :domain_name,
66
+ :dhcp_enable, :dhcp_domain_name, :dhcp_gateway, :dhcp_dns_server, :dhcp_wins_server, :dhcp_static_route,
67
+ :dhcp_sntp_settings, :ip_address, :subnet_mask, :gateway_ip_address, :dns_name, :domain_name,
63
68
  :prim_dns_server, :sec_dns_server, :ter_dns_server, :reg_ddns_server,
64
69
  :prim_wins_server, :sec_wins_server, :reg_wins_server,
65
70
  :sntp_server1, :sntp_server2, :timezone,
66
71
  :enclosure_ip_enable, :web_agent_ip_address
67
72
  end
68
- write_cmd :mod_snmp_im_settings do #TODO
73
+ write_cmd :mod_snmp_im_settings do # TODO
69
74
  not_implemented
70
75
  end
71
76
  write_cmd :profile_apply do
@@ -92,7 +97,7 @@ context :rib_info do
92
97
  end
93
98
  write_cmd :set_security_msg do
94
99
  not_implemented
95
- elements :security_msg, :security_msg_text => :cdata
100
+ elements :security_msg, security_msg_text: :cdata
96
101
  end
97
102
  write_cmd :set_vm_status do
98
103
  attributes :device
@@ -104,7 +109,7 @@ context :rib_info do
104
109
  write_cmd :trigger_test_event do
105
110
  not_implemented
106
111
  end
107
- write_cmd :update_firmware do #TODO
112
+ write_cmd :update_firmware do # TODO
108
113
  not_implemented
109
114
  end
110
115
  end
@@ -10,7 +10,7 @@ context :server_info do
10
10
 
11
11
  read_cmd :get_persistent_boot
12
12
  write_cmd :set_persistent_boot do
13
- elements :device => [ :value ]
13
+ elements device: [:value]
14
14
  end
15
15
 
16
16
  read_cmd :get_one_time_boot
@@ -43,7 +43,7 @@ context :server_info do
43
43
 
44
44
  read_cmd :get_pwreg
45
45
  write_cmd :set_pwreg do
46
- elements :pwralert => :type, :pwralert_settings => [:threshold, :duration]
46
+ elements pwralert: :type, pwralert_settings: [:threshold, :duration]
47
47
  end
48
48
 
49
49
  read_cmd :get_power_cap
@@ -92,4 +92,6 @@ context :server_info do
92
92
 
93
93
  read_cmd :get_server_power_on_time
94
94
  write_cmd :clear_server_power_on_time
95
+
96
+ write_cmd :clear_iml
95
97
  end
@@ -14,7 +14,8 @@ context :user_info do
14
14
 
15
15
  write_cmd :mod_user do
16
16
  attributes :user_login
17
- elements :user_name, :user_login, :password, :admin_priv, :remote_cons_priv, :reset_server_priv, :virtual_media_priv, :config_ilo_priv, :del_users_ssh_key
17
+ elements :user_name, :user_login, :password, :admin_priv, :remote_cons_priv, :reset_server_priv,
18
+ :virtual_media_priv, :config_ilo_priv, :del_users_ssh_key
18
19
  end
19
20
 
20
21
  read_cmd :get_all_users
@@ -1,6 +1,6 @@
1
1
  class ILORb
2
+ # ILO API methods DSL implementation
2
3
  class RIBCL < Hash
3
-
4
4
  class NotImplementedError < StandardError; end
5
5
  class InvalidDefinitionError < StandardError; end
6
6
 
@@ -9,7 +9,7 @@ class ILORb
9
9
  end
10
10
 
11
11
  # meaningful aliases
12
- alias_method :has_command?, :has_key?
12
+ alias_method :command?, :key?
13
13
  alias_method :command, :fetch
14
14
 
15
15
  # mapping between Ruby objects and api format
@@ -31,7 +31,6 @@ class ILORb
31
31
  end
32
32
 
33
33
  private
34
- # private methods are used by DSL
35
34
 
36
35
  def context(name, &block)
37
36
  context = Context.new(name)
@@ -39,6 +38,7 @@ class ILORb
39
38
  merge!(context.commands)
40
39
  end
41
40
 
41
+ # Implements contexts matching categories in ILO API (Server, RIB, User, etc.)
42
42
  class Context
43
43
  attr_reader :commands
44
44
 
@@ -47,9 +47,6 @@ class ILORb
47
47
  @commands = {}
48
48
  end
49
49
 
50
- private
51
- # private methods are used by DSL
52
-
53
50
  [:read, :write].each do |mode|
54
51
  define_method "#{mode}_cmd" do |name, &block|
55
52
  command = Command.new(name, @name, mode)
@@ -59,6 +56,7 @@ class ILORb
59
56
  end
60
57
  end
61
58
 
59
+ # Implements ILO API commands with their parameters
62
60
  class Command
63
61
  attr_reader :name, :context, :mode
64
62
 
@@ -97,7 +95,6 @@ class ILORb
97
95
  end
98
96
 
99
97
  private
100
- # private methods are used by DSL
101
98
 
102
99
  def attributes(*params)
103
100
  @attributes += params
@@ -115,7 +112,7 @@ class ILORb
115
112
  end
116
113
  @elements.merge!(hash)
117
114
  else
118
- raise InvalidDefinitionError, "no elements and text"
115
+ fail InvalidDefinitionError, "no elements and text"
119
116
  end
120
117
  end
121
118
 
@@ -123,7 +120,7 @@ class ILORb
123
120
  if @elements.empty?
124
121
  @text = param
125
122
  else
126
- raise InvalidDefinitionError, "no text and elements"
123
+ fail InvalidDefinitionError, "no text and elements"
127
124
  end
128
125
  end
129
126
 
@@ -1,3 +1,4 @@
1
+ # just version
1
2
  class ILORb
2
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
3
4
  end
@@ -0,0 +1,31 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 0000000000000000000000000000000000000000000000000000000000000000
3
+ 0000000000000000000000000000000000000000000000000000000000000000
4
+ 0000000000000000000000000000000000000000000000000000000000000000
5
+ 0000000000000000000000000000000000000000000000000000000000000000
6
+ 0000000000000000000000000000000000000000000000000000000000000000
7
+ 0000000000000000000000000000000000000000000000000000000000000000
8
+ 0000000000000000000000000000000000000000000000000000000000000000
9
+ 0000000000000000000000000000000000000000000000000000000000000000
10
+ 0000000000000000000000000000000000000000000000000000000000000000
11
+ 0000000000000000000000000000000000000000000000000000000000000000
12
+ 0000000000000000000000000000000000000000000000000000000000000000
13
+ 0000000000000000000000000000000000000000000000000000000000000000
14
+ 0000000000000000000000000000000000000000000000000000000000000000
15
+ 0000000000000000000000000000000000000000000000000000000000000000
16
+ 0000000000000000000000000000000000000000000000000000000000000000
17
+ 0000000000000000000000000000000000000000000000000000000000000000
18
+ 0000000000000000000000000000000000000000000000000000000000000000
19
+ 0000000000000000000000000000000000000000000000000000000000000000
20
+ 0000000000000000000000000000000000000000000000000000000000000000
21
+ 0000000000000000000000000000000000000000000000000000000000000000
22
+ 0000000000000000000000000000000000000000000000000000000000000000
23
+ 0000000000000000000000000000000000000000000000000000000000000000
24
+ 0000000000000000000000000000000000000000000000000000000000000000
25
+ 0000000000000000000000000000000000000000000000000000000000000000
26
+ 0000000000000000000000000000000000000000000000000000000000000000
27
+ 0000000000000000000000000000000000000000000000000000000000000000
28
+ 0000000000000000000000000000000000000000000000000000000000000000
29
+ 0000000000000000000000000000000000000000000000000000000000000000
30
+ 000000000000000000000000000000000000
31
+ -----END CERTIFICATE-----
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <rib_info mode="write">
5
+ <certificate_signing_request>
6
+ <csr_state value="state"/>
7
+ <csr_country value="country"/>
8
+ <csr_locality value="locality"/>
9
+ <csr_organization value="organization"/>
10
+ <csr_organizational_unit value="organizational_unit"/>
11
+ <csr_common_name value="common_name"/>
12
+ </certificate_signing_request>
13
+ </rib_info>
14
+ </login>
15
+ </ribcl>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <rib_info mode="read">
5
+ <get_network_settings/>
6
+ </rib_info>
7
+ </login>
8
+ </ribcl>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <rib_info mode="write">
5
+ <import_certificate>-----BEGIN CERTIFICATE-----
6
+ 0000000000000000000000000000000000000000000000000000000000000000
7
+ 0000000000000000000000000000000000000000000000000000000000000000
8
+ 0000000000000000000000000000000000000000000000000000000000000000
9
+ 0000000000000000000000000000000000000000000000000000000000000000
10
+ 0000000000000000000000000000000000000000000000000000000000000000
11
+ 0000000000000000000000000000000000000000000000000000000000000000
12
+ 0000000000000000000000000000000000000000000000000000000000000000
13
+ 0000000000000000000000000000000000000000000000000000000000000000
14
+ 0000000000000000000000000000000000000000000000000000000000000000
15
+ 0000000000000000000000000000000000000000000000000000000000000000
16
+ 0000000000000000000000000000000000000000000000000000000000000000
17
+ 0000000000000000000000000000000000000000000000000000000000000000
18
+ 0000000000000000000000000000000000000000000000000000000000000000
19
+ 0000000000000000000000000000000000000000000000000000000000000000
20
+ 0000000000000000000000000000000000000000000000000000000000000000
21
+ 0000000000000000000000000000000000000000000000000000000000000000
22
+ 0000000000000000000000000000000000000000000000000000000000000000
23
+ 0000000000000000000000000000000000000000000000000000000000000000
24
+ 0000000000000000000000000000000000000000000000000000000000000000
25
+ 0000000000000000000000000000000000000000000000000000000000000000
26
+ 0000000000000000000000000000000000000000000000000000000000000000
27
+ 0000000000000000000000000000000000000000000000000000000000000000
28
+ 0000000000000000000000000000000000000000000000000000000000000000
29
+ 0000000000000000000000000000000000000000000000000000000000000000
30
+ 0000000000000000000000000000000000000000000000000000000000000000
31
+ 0000000000000000000000000000000000000000000000000000000000000000
32
+ 0000000000000000000000000000000000000000000000000000000000000000
33
+ 0000000000000000000000000000000000000000000000000000000000000000
34
+ 000000000000000000000000000000000000
35
+ -----END CERTIFICATE-----
36
+ </import_certificate>
37
+ </rib_info>
38
+ </login>
39
+ </ribcl>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <server_info mode="write">
5
+ <server_auto_pwr value="On"/>
6
+ </server_info>
7
+ </login>
8
+ </ribcl>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <server_info mode="write">
5
+ <set_one_time_boot value="FLOPPY"/>
6
+ </server_info>
7
+ </login>
8
+ </ribcl>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <server_info mode="write">
5
+ <set_persistent_boot>
6
+ <device value="FLOPPY"/>
7
+ <device value="CDROM"/>
8
+ </set_persistent_boot>
9
+ </server_info>
10
+ </login>
11
+ </ribcl>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0"?>
2
+ <ribcl version="2.0">
3
+ <login password="SECRET" user_login="Admin">
4
+ <server_info mode="write">
5
+ <set_pwreg>
6
+ <pwralert type="PEAK"/>
7
+ <pwralert_settings threshold="200" duration="35"/>
8
+ </set_pwreg>
9
+ </server_info>
10
+ </login>
11
+ </ribcl>
@@ -0,0 +1,33 @@
1
+ context :rib_info do
2
+ read_cmd :get_network_settings
3
+
4
+ write_cmd :certificate_signing_request do
5
+ elements :csr_state, :csr_country, :csr_locality, :csr_organization, :csr_organizational_unit, :csr_common_name
6
+ end
7
+
8
+ write_cmd :import_certificate do
9
+ text :certificate
10
+ end
11
+
12
+ write_cmd :license do
13
+ elements activate: :key
14
+ end
15
+ end
16
+
17
+ context :server_info do
18
+ write_cmd :set_persistent_boot do
19
+ elements device: [:value]
20
+ end
21
+
22
+ write_cmd :set_one_time_boot do
23
+ attributes :value
24
+ end
25
+
26
+ write_cmd :set_pwreg do
27
+ elements pwralert: :type, pwralert_settings: [:threshold, :duration]
28
+ end
29
+
30
+ write_cmd :server_auto_pwr do
31
+ attributes :value
32
+ end
33
+ end
@@ -1,79 +1,113 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ILORb do
4
4
  let(:hostname) { "10.200.0.1" }
5
5
  let(:login) { "Admin" }
6
6
  let(:password) { "SECRET" }
7
- let(:ilo) { ILORb.new(hostname: hostname, login: login, password: password) }
7
+ let(:definitions_path) { File.join(File.dirname(__FILE__), "definitions") }
8
+ let(:ilo) { ILORb.new(hostname: hostname, login: login, password: password, definitions_path: definitions_path) }
8
9
 
9
10
  describe "#get_network_settings" do
10
11
  before do
11
- stub_request(:post, "https://10.200.0.1/ribcl").
12
- with(:body => "<?xml version=\"1.0\"?>\n<ribcl version=\"2.0\">\n <login password=\"SECRET\" user_login=\"Admin\">\n <rib_info mode=\"read\">\n <get_network_settings/>\n </rib_info>\n </login>\n</ribcl>\n").
13
- to_return(:status => 200, :body => asset_file('get_network_settings_response.xml'))
12
+ stub_request(:post, "https://10.200.0.1/ribcl")
13
+ .with(body: asset_file("get_network_settings_request.xml"))
14
+ .to_return(status: 200, body: asset_file("get_network_settings_response.xml"))
14
15
  end
15
16
 
16
17
  subject { ilo.get_network_settings }
17
18
 
18
- its([:status]) { should include(code: 0, message: 'No error') }
19
+ its([:status]) { should include(code: 0, message: "No error") }
19
20
  its([:get_network_settings]) { should_not be_empty }
20
21
  end
21
22
 
22
23
  describe "#set_one_time_boot" do
23
24
  before do
24
- stub_request(:post, "https://10.200.0.1/ribcl").
25
- with(:body => "<?xml version=\"1.0\"?>\n<ribcl version=\"2.0\">\n <login password=\"SECRET\" user_login=\"Admin\">\n <server_info mode=\"write\">\n <set_one_time_boot value=\"FLOPPY\"/>\n </server_info>\n </login>\n</ribcl>\n").
26
- to_return(:status => 200, :body => asset_file('basic_response.xml'))
25
+ stub_request(:post, "https://10.200.0.1/ribcl")
26
+ .with(body: asset_file("set_one_time_boot_request.xml"))
27
+ .to_return(status: 200, body: asset_file("basic_response.xml"))
27
28
  end
28
29
 
29
30
  subject { ilo.set_one_time_boot(value: "FLOPPY") }
30
31
 
31
- its([:status]) { should include(code: 0, message: 'No error') }
32
+ its([:status]) { should include(code: 0, message: "No error") }
32
33
  end
33
34
 
34
35
  describe "#set_pwreg" do
35
36
  before do
36
- stub_request(:post, "https://10.200.0.1/ribcl").
37
- with(:body => "<?xml version=\"1.0\"?>\n<ribcl version=\"2.0\">\n <login password=\"SECRET\" user_login=\"Admin\">\n <server_info mode=\"write\">\n <set_pwreg>\n <pwralert type=\"PEAK\"/>\n <pwralert_settings threshold=\"200\" duration=\"35\"/>\n </set_pwreg>\n </server_info>\n </login>\n</ribcl>\n").
38
- to_return(:status => 200, :body => asset_file('basic_response.xml'))
37
+ stub_request(:post, "https://10.200.0.1/ribcl")
38
+ .with(body: asset_file("set_pwreg_request.xml"))
39
+ .to_return(status: 200, body: asset_file("basic_response.xml"))
39
40
  end
40
41
 
41
- subject { ilo.set_pwreg pwralert_type: "PEAK",
42
- pwralert_settings_threshold: 200,
43
- pwralert_settings_duration: 35 }
42
+ subject { ilo.set_pwreg(pwralert_type: "PEAK", pwralert_settings_threshold: 200, pwralert_settings_duration: 35) }
44
43
 
45
- its([:status]) { should include(code: 0, message: 'No error') }
44
+ its([:status]) { should include(code: 0, message: "No error") }
46
45
  end
47
46
 
48
- describe "#set_one_time_boot" do
47
+ describe "#set_persistent_boot" do
49
48
  before do
50
- stub_request(:post, "https://10.200.0.1/ribcl").
51
- with(:body => "<?xml version=\"1.0\"?>\n<ribcl version=\"2.0\">\n <login password=\"SECRET\" user_login=\"Admin\">\n <server_info mode=\"write\">\n <set_one_time_boot value=\"FLOPPY\"/>\n </server_info>\n </login>\n</ribcl>\n").
52
- to_return(:status => 200, :body => asset_file('basic_response.xml'))
49
+ stub_request(:post, "https://10.200.0.1/ribcl")
50
+ .with(body: asset_file("set_persistent_boot_request.xml"))
51
+ .to_return(status: 200, body: asset_file("basic_response.xml"))
53
52
  end
54
53
 
55
- subject { ilo.set_one_time_boot(value: "FLOPPY") }
54
+ subject { ilo.set_persistent_boot([{ device_value: "FLOPPY" }, { device_value: "CDROM" }]) }
56
55
 
57
- its([:status]) { should include(code: 0, message: 'No error') }
56
+ its([:status]) { should include(code: 0, message: "No error") }
58
57
  end
59
58
 
60
- describe "#set_persistent_boot" do
59
+ describe "#certificate_signing_request" do
61
60
  before do
62
- stub_request(:post, "https://10.200.0.1/ribcl").
63
- with(:body => "<?xml version=\"1.0\"?>\n<ribcl version=\"2.0\">\n <login password=\"SECRET\" user_login=\"Admin\">\n <server_info mode=\"write\">\n <set_persistent_boot>\n <device value=\"FLOPPY\"/>\n <device value=\"CDROM\"/>\n </set_persistent_boot>\n </server_info>\n </login>\n</ribcl>\n").
64
- to_return(:status => 200, :body => asset_file('basic_response.xml'))
61
+ stub_request(:post, "https://10.200.0.1/ribcl")
62
+ .with(body: asset_file("certificate_signing_request_request.xml"))
63
+ .to_return(status: 200, body: asset_file("basic_response.xml"))
64
+ end
65
+
66
+ subject do
67
+ ilo.certificate_signing_request(
68
+ csr_state: "state",
69
+ csr_country: "country",
70
+ csr_locality: "locality",
71
+ csr_organization: "organization",
72
+ csr_organizational_unit: "organizational_unit",
73
+ csr_common_name: "common_name"
74
+ )
65
75
  end
66
76
 
67
- subject { ilo.set_persistent_boot([{ device_value: "FLOPPY" },
68
- { device_value: "CDROM" }]) }
77
+ its([:status]) { should include(code: 0, message: "No error") }
78
+ end
79
+
80
+ describe "#import_certificate" do
81
+ before do
82
+ stub_request(:post, "https://10.200.0.1/ribcl")
83
+ .with(body: asset_file("import_certificate_request.xml"))
84
+ .to_return(status: 200, body: asset_file("basic_response.xml"))
85
+ end
86
+
87
+ subject do
88
+ ilo.import_certificate(certificate: asset_file("certificate.crt"))
89
+ end
90
+
91
+ its([:status]) { should include(code: 0, message: "No error") }
92
+ end
93
+
94
+ describe "#server_auto_pwr" do
95
+ before do
96
+ stub_request(:post, "https://10.200.0.1/ribcl")
97
+ .with(body: asset_file("server_auto_pwr_request.xml"))
98
+ .to_return(status: 200, body: asset_file("basic_response.xml"))
99
+ end
100
+
101
+ subject do
102
+ ilo.server_auto_pwr(value: "On")
103
+ end
69
104
 
70
- its([:status]) { should include(code: 0, message: 'No error') }
105
+ its([:status]) { should include(code: 0, message: "No error") }
71
106
  end
72
107
 
73
108
  private
74
109
 
75
110
  def asset_file(asset)
76
- path = File.join(File.dirname(__FILE__), 'assets', asset)
77
- File.new(path)
111
+ File.open(File.join(File.dirname(__FILE__), "assets", asset)).read
78
112
  end
79
113
  end
@@ -1,8 +1,8 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'ilorb'
4
- require 'webmock/rspec'
5
- require 'pry'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+ require "ilorb"
4
+ require "webmock/rspec"
5
+ require "pry"
6
6
 
7
7
  RSpec.configure do |config|
8
8
  config.order = "random"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ilorb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Amiez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
11
+ date: 2016-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: nokogiri
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +116,7 @@ extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
104
118
  - ".gitignore"
119
+ - ".rubocop.yml"
105
120
  - ".ruby-gemset"
106
121
  - Gemfile
107
122
  - Gemfile.lock
@@ -115,7 +130,16 @@ files:
115
130
  - lib/ilorb/ribcl.rb
116
131
  - lib/ilorb/version.rb
117
132
  - spec/assets/basic_response.xml
133
+ - spec/assets/certificate.crt
134
+ - spec/assets/certificate_signing_request_request.xml
135
+ - spec/assets/get_network_settings_request.xml
118
136
  - spec/assets/get_network_settings_response.xml
137
+ - spec/assets/import_certificate_request.xml
138
+ - spec/assets/server_auto_pwr_request.xml
139
+ - spec/assets/set_one_time_boot_request.xml
140
+ - spec/assets/set_persistent_boot_request.xml
141
+ - spec/assets/set_pwreg_request.xml
142
+ - spec/definitions/test.rb
119
143
  - spec/ilo_spec.rb
120
144
  - spec/spec_helper.rb
121
145
  homepage: https://github.com/josqu4red/ilorb
@@ -138,12 +162,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
162
  version: '0'
139
163
  requirements: []
140
164
  rubyforge_project:
141
- rubygems_version: 2.4.5
165
+ rubygems_version: 2.5.1
142
166
  signing_key:
143
167
  specification_version: 4
144
168
  summary: Configure and retrieve data from server's ILO management card
145
169
  test_files:
146
170
  - spec/assets/basic_response.xml
171
+ - spec/assets/certificate.crt
172
+ - spec/assets/certificate_signing_request_request.xml
173
+ - spec/assets/get_network_settings_request.xml
147
174
  - spec/assets/get_network_settings_response.xml
175
+ - spec/assets/import_certificate_request.xml
176
+ - spec/assets/server_auto_pwr_request.xml
177
+ - spec/assets/set_one_time_boot_request.xml
178
+ - spec/assets/set_persistent_boot_request.xml
179
+ - spec/assets/set_pwreg_request.xml
180
+ - spec/definitions/test.rb
148
181
  - spec/ilo_spec.rb
149
182
  - spec/spec_helper.rb