redfish_client 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/redfish_client.rb +13 -2
- data/lib/redfish_client/caching_connector.rb +38 -0
- data/lib/redfish_client/resource.rb +7 -23
- data/lib/redfish_client/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45295e03b5e8ec0dda4fd0d7401f95516c92d48eba415337d25d3d2ef210a869
|
4
|
+
data.tar.gz: bfe94afbb669fdd6bb4b407b8ddacfaf17695b49f4bdd2d83645290f97f7b5b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c99e489c2328e9a1fb3ada71d3c62f0a3ce9d75e93bf78206e56490a4153d60a20601bc5d7fee351485ede848a6c640310f7df3b29c3c73c138ac4b466f62b3d
|
7
|
+
data.tar.gz: 20b278901afbfaa467ec1bd72056f6fbf7420d6ab62f9352193023a46a9e44b7712a37ebb495db1016d6b77a8ca1a7eb729c06ab56c7e8061150e894b64a22f2
|
data/lib/redfish_client.rb
CHANGED
@@ -1,12 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "redfish_client/caching_connector"
|
3
4
|
require "redfish_client/connector"
|
4
5
|
require "redfish_client/root"
|
5
6
|
require "redfish_client/version"
|
6
7
|
|
7
8
|
module RedfishClient
|
8
|
-
|
9
|
-
|
9
|
+
# Create new Redfish API client.
|
10
|
+
#
|
11
|
+
# @param url [String] base URL of Redfish API
|
12
|
+
# @param prefix [String] Redfish API prefix
|
13
|
+
# @param verify [Boolean] verify certificates for https connections
|
14
|
+
# @param use_cache [Boolean] cache API responses
|
15
|
+
def self.new(url, prefix: "/redfish/v1", verify: true, use_cache: true)
|
16
|
+
con = if use_cache
|
17
|
+
CachingConnector.new(url, verify)
|
18
|
+
else
|
19
|
+
Connector.new(url, verify)
|
20
|
+
end
|
10
21
|
Root.new(con, oid: prefix)
|
11
22
|
end
|
12
23
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "redfish_client/connector"
|
4
|
+
|
5
|
+
module RedfishClient
|
6
|
+
# Variant of {RedfishClient::Connector} that caches GET responses.
|
7
|
+
class CachingConnector < Connector
|
8
|
+
# Create new caching connector.
|
9
|
+
#
|
10
|
+
# @param url [String] base url of the Redfish service
|
11
|
+
# @param verify [Boolean] verify SSL certificate of the service
|
12
|
+
def initialize(url, verify = true)
|
13
|
+
super
|
14
|
+
@cache = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
# Issue GET request to service.
|
18
|
+
#
|
19
|
+
# Request is only issued if there is no cache entry for the existing path.
|
20
|
+
#
|
21
|
+
# @param path [String] path to the resource, relative to the base url
|
22
|
+
# @return [Excon::Response] response object
|
23
|
+
def get(path)
|
24
|
+
@cache[path] ||= super
|
25
|
+
end
|
26
|
+
|
27
|
+
# Clear the cached responses.
|
28
|
+
#
|
29
|
+
# Next GET request will repopulate the cache.
|
30
|
+
def reset(path: nil)
|
31
|
+
if path.nil?
|
32
|
+
@cache = {}
|
33
|
+
else
|
34
|
+
@cache.delete(path)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -16,7 +16,7 @@ module RedfishClient
|
|
16
16
|
# resource from the API.
|
17
17
|
#
|
18
18
|
# In order to reduce the amount of requests being sent to the service,
|
19
|
-
# resource also
|
19
|
+
# resource can also utilise caching connector. If we would like to get
|
20
20
|
# fresh values from the service, {#reset} call will flush the cache,
|
21
21
|
# causing next access to retrieve fresh data.
|
22
22
|
class Resource
|
@@ -44,7 +44,6 @@ module RedfishClient
|
|
44
44
|
# @param content [Hash] content to populate resource with
|
45
45
|
# @raise [NoResource] resource cannot be retrieved from the service
|
46
46
|
def initialize(connector, oid: nil, content: nil)
|
47
|
-
@cache = {}
|
48
47
|
@connector = connector
|
49
48
|
|
50
49
|
if oid
|
@@ -59,22 +58,10 @@ module RedfishClient
|
|
59
58
|
# This function offers a way of accessing resource data in the same way
|
60
59
|
# that hash exposes its content.
|
61
60
|
#
|
62
|
-
#
|
63
|
-
# also be used to access members of collection by directly indexing into
|
64
|
-
# Members array. This means that `res["Members"][3]` can be shortened into
|
65
|
-
# `res[3]`.
|
66
|
-
#
|
67
|
-
# Indexing non-collection resource key will # raise `KeyError`.
|
68
|
-
#
|
69
|
-
# @param attr [String, Integer] key or index for accessing data
|
61
|
+
# @param attr [String] key for accessing data
|
70
62
|
# @return associated value or `nil` if attr is missing
|
71
63
|
def [](attr)
|
72
|
-
|
73
|
-
raise(KeyError, "Not a collection.") unless key?("Members")
|
74
|
-
cache("Members")[attr]
|
75
|
-
else
|
76
|
-
cache(attr)
|
77
|
-
end
|
64
|
+
build_resource(@content[attr])
|
78
65
|
end
|
79
66
|
|
80
67
|
# Safely access nested resource content.
|
@@ -109,10 +96,11 @@ module RedfishClient
|
|
109
96
|
key?(symbol.to_s) || super
|
110
97
|
end
|
111
98
|
|
112
|
-
# Clear the cached sub-resources.
|
113
|
-
#
|
99
|
+
# Clear the cached sub-resources.
|
100
|
+
#
|
101
|
+
# This method is a no-op if connector in use does not support caching.
|
114
102
|
def reset
|
115
|
-
@
|
103
|
+
@connector.reset if @connector.respond_to?(:reset)
|
116
104
|
end
|
117
105
|
|
118
106
|
# Access raw JSON data that resource wraps.
|
@@ -195,10 +183,6 @@ module RedfishClient
|
|
195
183
|
path || @content[field]
|
196
184
|
end
|
197
185
|
|
198
|
-
def cache(name)
|
199
|
-
@cache[name] ||= build_resource(@content[name])
|
200
|
-
end
|
201
|
-
|
202
186
|
def build_resource(data)
|
203
187
|
return nil if data.nil?
|
204
188
|
|
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.
|
4
|
+
version: 0.3.0
|
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-
|
11
|
+
date: 2018-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- bin/console
|
143
143
|
- bin/setup
|
144
144
|
- lib/redfish_client.rb
|
145
|
+
- lib/redfish_client/caching_connector.rb
|
145
146
|
- lib/redfish_client/connector.rb
|
146
147
|
- lib/redfish_client/resource.rb
|
147
148
|
- lib/redfish_client/root.rb
|