redfish_client 0.2.1 → 0.2.2

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: b945c1173e6a2b6e4f11611226c3de63bc3a7d0724ed1f4239cb14a01b115696
4
- data.tar.gz: b38b4f8bef1d460d84bb0bb8d01060a0859cf4590b7c85c7ea92d18ff1da067e
3
+ metadata.gz: a0d5afda19f44e42b56223398478a6542c3001449eaa268a554adf53be44f169
4
+ data.tar.gz: 3a37535bab3af7cc4457c9aed9b9718da7b27922b2a70da58938d376576df10d
5
5
  SHA512:
6
- metadata.gz: a6a95d53daede4e34e470eddf9f63ba08b411f8ad2dacccf4344a311e4aa38bfc5a9f7b00ce00220c114c3b54973eb9bedab30c06c3872a74fb2e7ec3c2059bc
7
- data.tar.gz: d2f584fcf925dccbe82660182625643994b850820f0f81c6e5814745b77c0e19ff08723fd08c82e1c78933fe4f67c85820f6db16ec299346db8cdd5eebd26f30
6
+ metadata.gz: 23cf48798d7952009e20c450f9fcc22aa6116902ef01c6d2446c1c4f35ea2ed2ec4a9db6f817583dec42fb09221ff3764b72577e05fe9327bc92ffc1d4890f37
7
+ data.tar.gz: 83517b7ef8012c483e4b73afbe456e618e0ebf614d5d741ba42f2bf5fbf7ca0cdde35badb3e56512fc0a786503c84df424d97e2d617160105e58eafbeb534d46
@@ -6,6 +6,9 @@ AllCops:
6
6
  - Rakefile
7
7
  - bin/**
8
8
 
9
+ Layout/MultilineOperationIndentation:
10
+ EnforcedStyle: indented
11
+
9
12
  Style/StringLiterals:
10
13
  EnforcedStyle: double_quotes
11
14
 
@@ -25,9 +25,12 @@ module RedfishClient
25
25
  # @param verify [Boolean] verify SSL certificate of the service
26
26
  def initialize(url, verify = true)
27
27
  @url = url
28
- @verify = verify
29
28
  @headers = DEFAULT_HEADERS.dup
30
- @connection = create_connection
29
+ middlewares = Excon.defaults[:middlewares] +
30
+ [Excon::Middleware::RedirectFollower]
31
+ @connection = Excon.new(@url,
32
+ ssl_verify_peer: verify,
33
+ middlewares: middlewares)
31
34
  end
32
35
 
33
36
  # Add HTTP headers to the requests made by the connector.
@@ -35,7 +38,6 @@ module RedfishClient
35
38
  # @param headers [Hash<String, String>] headers to be added
36
39
  def add_headers(headers)
37
40
  @headers.merge!(headers)
38
- @connection = create_connection
39
41
  end
40
42
 
41
43
  # Remove HTTP headers from requests made by the connector.
@@ -46,7 +48,6 @@ module RedfishClient
46
48
  # @param headers [List<String>] headers to remove
47
49
  def remove_headers(headers)
48
50
  headers.each { |h| @headers.delete(h) }
49
- @connection = create_connection
50
51
  end
51
52
 
52
53
  # Issue GET request to service.
@@ -54,29 +55,25 @@ module RedfishClient
54
55
  # @param path [String] path to the resource, relative to the base url
55
56
  # @return [Excon::Response] response object
56
57
  def get(path)
57
- @connection.get(path: path)
58
+ @connection.get(path: path, headers: @headers)
58
59
  end
59
60
 
60
61
  # Issue POST requests to the service.
61
62
  #
62
63
  # @param path [String] path to the resource, relative to the base
63
- # @param body [String] data to be sent over the socket
64
+ # @param data [Hash] data to be sent over the socket, JSON encoded
64
65
  # @return [Excon::Response] response object
65
- def post(path, body = nil)
66
- params = { path: path }
67
- params[:body] = body if body
68
- @connection.post(params)
66
+ def post(path, data = nil)
67
+ @connection.post(prepare_request_params(path, data))
69
68
  end
70
69
 
71
70
  # Issue PATCH requests to the service.
72
71
  #
73
72
  # @param path [String] path to the resource, relative to the base
74
- # @param body [String] data to be sent over the socket
73
+ # @param data [Hash] data to be sent over the socket
75
74
  # @return [Excon::Response] response object
76
- def patch(path, body = nil)
77
- params = { path: path }
78
- params[:body] = body if body
79
- @connection.patch(params)
75
+ def patch(path, data = nil)
76
+ @connection.patch(prepare_request_params(path, data))
80
77
  end
81
78
 
82
79
  # Issue DELETE requests to the service.
@@ -84,13 +81,20 @@ module RedfishClient
84
81
  # @param path [String] path to the resource, relative to the base
85
82
  # @return [Excon::Response] response object
86
83
  def delete(path)
87
- @connection.delete(path: path)
84
+ @connection.delete(path: path, headers: @headers)
88
85
  end
89
86
 
90
87
  private
91
88
 
92
- def create_connection
93
- Excon.new(@url, headers: @headers, ssl_verify_peer: @verify)
89
+ def prepare_request_params(path, data)
90
+ params = { path: path }
91
+ if data
92
+ params[:body] = data.to_json
93
+ params[:headers] = @headers.merge("Content-Type" => "application/json")
94
+ else
95
+ params[:headers] = @headers
96
+ end
97
+ params
94
98
  end
95
99
  end
96
100
  end
@@ -24,6 +24,13 @@ module RedfishClient
24
24
  # resource to accomplish the task a hand.
25
25
  class NoODataId < StandardError; end
26
26
 
27
+ # NoResource error is raised if the service cannot find requested
28
+ # resource.
29
+ class NoResource < StandardError; end
30
+
31
+ # Headers, returned from the service when resource has been constructed.
32
+ attr_reader :headers
33
+
27
34
  # Create new resource.
28
35
  #
29
36
  # Resource can be created either by passing in OpenData identifier or
@@ -34,19 +41,17 @@ module RedfishClient
34
41
  # @param connector [RedfishClient::Connector] connector that will be used
35
42
  # to fetch the resources
36
43
  # @param oid [String] OpenData id of the resource
37
- # @param content [Hash]
44
+ # @param content [Hash] content to populate resource with
45
+ # @raise [NoResource] resource cannot be retrieved from the service
38
46
  def initialize(connector, oid: nil, content: nil)
47
+ @cache = {}
48
+ @connector = connector
49
+
39
50
  if oid
40
- resp = connector.get(oid)
41
- @content = JSON.parse(resp.data[:body])
42
- @content["@odata.id"] = oid
43
- @headers = resp.data[:headers]
51
+ initialize_from_service(oid)
44
52
  else
45
53
  @content = content
46
54
  end
47
-
48
- @cache = {}
49
- @connector = connector
50
55
  end
51
56
 
52
57
  # Access resource content.
@@ -136,7 +141,7 @@ module RedfishClient
136
141
  # @return [Excon::Response] response
137
142
  # @raise [NoODataId] resource has no OpenData id
138
143
  def post(field: "@odata.id", path: nil, payload: nil)
139
- @connector.post(get_path(field, path), payload ? payload.to_json : "")
144
+ @connector.post(get_path(field, path), payload)
140
145
  end
141
146
 
142
147
  # Issue a PATCH requests to the selected endpoint.
@@ -150,7 +155,7 @@ module RedfishClient
150
155
  # @return [Excon::Response] response
151
156
  # @raise [NoODataId] resource has no OpenData id
152
157
  def patch(field: "@odata.id", path: nil, payload: nil)
153
- @connector.patch(get_path(field, path), payload ? payload.to_json : "")
158
+ @connector.patch(get_path(field, path), payload)
154
159
  end
155
160
 
156
161
  # Issue a DELETE requests to the endpoint of the resource.
@@ -167,6 +172,15 @@ module RedfishClient
167
172
 
168
173
  private
169
174
 
175
+ def initialize_from_service(oid)
176
+ resp = @connector.get(oid)
177
+ raise NoResource unless resp.status == 200
178
+
179
+ @content = JSON.parse(resp.data[:body])
180
+ @content["@odata.id"] = oid
181
+ @headers = resp.data[:headers]
182
+ end
183
+
170
184
  def get_path(field, path)
171
185
  raise NoODataId if path.nil? && !key?(field)
172
186
  path || @content[field]
@@ -46,8 +46,19 @@ module RedfishClient
46
46
  # Find Redfish service object by OData ID field.
47
47
  #
48
48
  # @param oid [String] Odata id of the resource
49
- # @return [Resource] new resource
49
+ # @return [Resource, nil] new resource or nil if resource cannot be found
50
50
  def find(oid)
51
+ find!(oid)
52
+ rescue NoResource
53
+ nil
54
+ end
55
+
56
+ # Find Redfish service object by OData ID field.
57
+ #
58
+ # @param oid [String] Odata id of the resource
59
+ # @return [Resource] new resource
60
+ # @raise [NoResource] resource cannot be fetched
61
+ def find!(oid)
51
62
  Resource.new(@connector, oid: oid)
52
63
  end
53
64
 
@@ -60,7 +71,7 @@ module RedfishClient
60
71
  def session_login(username, password)
61
72
  r = @connector.post(
62
73
  @content["Links"]["Sessions"]["@odata.id"],
63
- { "UserName" => username, "Password" => password }.to_json
74
+ "UserName" => username, "Password" => password
64
75
  )
65
76
  raise AuthError, "Invalid credentials" unless r.status == 201
66
77
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RedfishClient
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redfish_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tadej Borovšak
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-08 00:00:00.000000000 Z
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: excon
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  version: '0'
169
169
  requirements: []
170
170
  rubyforge_project:
171
- rubygems_version: 2.7.6
171
+ rubygems_version: 2.7.7
172
172
  signing_key:
173
173
  specification_version: 4
174
174
  summary: Simple Redfish client library