redfish_client 0.1.0 → 0.2.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 +5 -5
- data/.codeclimate.yml +3 -0
- data/.rubocop.yml +4 -0
- data/.travis.yml +19 -0
- data/README.md +14 -8
- data/lib/redfish_client/connector.rb +0 -1
- data/lib/redfish_client/resource.rb +1 -1
- data/lib/redfish_client/root.rb +58 -18
- data/lib/redfish_client/version.rb +1 -1
- data/lib/redfish_client.rb +0 -9
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7927655fca079fcda9d87e9a2b528e747af59e9385a24ad3c59b92c0e0caa6dc
|
4
|
+
data.tar.gz: 7981e1da150898a1b5a084f8277eb7a8cb642182ee1ef109764e3252a3109c42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6687e1bcc7461fef0bfba86dcd9b1436aed911ede07d917d5e28d8bb87aa19bb77eb6d106eb3f8f4fd2c1b75bbe2b566d496d70d884fd9350f5875c5f68b6e18
|
7
|
+
data.tar.gz: 81df752a968d94871a7409bc6a057662c2842848cb8f3f1c2f43fa77bf5e9818f5fe052f6ece86ae3f0a97476dbb16c6c7678d8bda7dcc1106ea8c72abb70a12
|
data/.codeclimate.yml
ADDED
data/.rubocop.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
AllCops:
|
2
|
+
TargetRubyVersion: 2.3
|
2
3
|
Exclude:
|
3
4
|
- redfish_client.gemspec
|
4
5
|
- Gemfile
|
@@ -14,6 +15,9 @@ Style/Documentation:
|
|
14
15
|
Style/BracesAroundHashParameters:
|
15
16
|
EnforcedStyle: context_dependent
|
16
17
|
|
18
|
+
Metrics/AbcSize:
|
19
|
+
Max: 20
|
20
|
+
|
17
21
|
Metrics/BlockLength:
|
18
22
|
Exclude:
|
19
23
|
- spec/**/*.rb
|
data/.travis.yml
CHANGED
@@ -1,8 +1,27 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
cache: bundler
|
4
|
+
|
4
5
|
rvm:
|
5
6
|
- 2.4.3
|
7
|
+
|
8
|
+
env:
|
9
|
+
global:
|
10
|
+
- CC_TEST_REPORTER_ID=5bfd87f6c63155c74a46e37c94800e369d3b791988b2601113d843b1391474af
|
11
|
+
|
12
|
+
before_script:
|
13
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
14
|
+
- chmod +x ./cc-test-reporter
|
15
|
+
- ./cc-test-reporter before-build
|
16
|
+
|
17
|
+
after_script:
|
18
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
19
|
+
|
20
|
+
branches:
|
21
|
+
only:
|
22
|
+
- master
|
23
|
+
- /^\d+\.\d+(\.\d+)?(-\S*)?$/
|
24
|
+
|
6
25
|
deploy:
|
7
26
|
provider: rubygems
|
8
27
|
api_key:
|
data/README.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Redfish Ruby Client
|
2
2
|
|
3
|
+
[](https://travis-ci.org/xlab-si/redfish_client)
|
4
|
+
[](https://codeclimate.com/github/xlab-si/redfish_client/maintainability)
|
5
|
+
[](https://codeclimate.com/github/xlab-si/redfish_client/test_coverage)
|
6
|
+
[](https://beta.gemnasium.com/projects/github.com/xlab-si/redfish_client)
|
7
|
+
[](https://hakiri.io/github/xlab-si/redfish_client/master)
|
8
|
+
|
9
|
+
|
3
10
|
This repository contains source code for redfish_client gem that can be used
|
4
11
|
to connect to Redfish services.
|
5
12
|
|
@@ -37,16 +44,15 @@ Minimal program that uses this gem would look something like this:
|
|
37
44
|
## Development
|
38
45
|
|
39
46
|
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
40
|
-
run `rake spec` to run the tests. You can also run `bin/console`
|
41
|
-
interactive prompt that will allow you to experiment.
|
47
|
+
run `bundle exec rake spec` to run the tests. You can also run `bin/console`
|
48
|
+
for an interactive prompt that will allow you to experiment.
|
42
49
|
|
43
|
-
To
|
44
|
-
|
45
|
-
|
46
|
-
push git commits and tags, and push the `.gem` file to
|
47
|
-
[rubygems.org](https://rubygems.org).
|
50
|
+
To create new release, increment the version number, commit the change, tag
|
51
|
+
the commit and push tag to the GitHub. Travis CI will pick from there on and
|
52
|
+
create new release, publishing it on https://rubygems.org.
|
48
53
|
|
49
54
|
|
50
55
|
## Contributing
|
51
56
|
|
52
|
-
Bug reports and pull requests are welcome on GitHub at
|
57
|
+
Bug reports and pull requests are welcome on GitHub at
|
58
|
+
https://github.com/xlab-si/redfish_client.
|
data/lib/redfish_client/root.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "base64"
|
3
4
|
require "redfish_client/resource"
|
4
5
|
|
5
6
|
module RedfishClient
|
@@ -9,39 +10,36 @@ module RedfishClient
|
|
9
10
|
# AuthError is raised if the user session cannot be created.
|
10
11
|
class AuthError < StandardError; end
|
11
12
|
|
12
|
-
#
|
13
|
-
|
13
|
+
# Basic and token authentication headers.
|
14
|
+
BASIC_AUTH_HEADER = "Authorization"
|
15
|
+
TOKEN_AUTH_HEADER = "X-Auth-Token"
|
14
16
|
|
15
17
|
# Authenticate against the service.
|
16
18
|
#
|
17
19
|
# Calling this method will try to create new session on the service using
|
18
|
-
# provided credentials. If the session creation fails,
|
19
|
-
#
|
20
|
+
# provided credentials. If the session creation fails, basic
|
21
|
+
# authentication will be attempted. If basic authentication fails,
|
22
|
+
# {AuthError} will be raised.
|
20
23
|
#
|
21
24
|
# @param username [String] username
|
22
25
|
# @param password [String] password
|
23
26
|
# @raise [AuthError] if user session could not be created
|
24
27
|
def login(username, password)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
@connector.add_headers(AUTH_HEADER => rdata[:headers][AUTH_HEADER])
|
33
|
-
@session = Resource.new(@connector, content: JSON.parse(rdata[:body]))
|
28
|
+
# Since session auth is more secure, we try it first and use basic auth
|
29
|
+
# only if session auth is not available.
|
30
|
+
if session_login_available?
|
31
|
+
session_login(username, password)
|
32
|
+
else
|
33
|
+
basic_login(username, password)
|
34
|
+
end
|
34
35
|
end
|
35
36
|
|
36
37
|
# Sign out of the service.
|
37
38
|
#
|
38
39
|
# If the session could not be deleted, {AuthError} will be raised.
|
39
40
|
def logout
|
40
|
-
|
41
|
-
|
42
|
-
raise AuthError unless r.status == 204
|
43
|
-
@session = nil
|
44
|
-
@connector.remove_headers([AUTH_HEADER])
|
41
|
+
session_logout
|
42
|
+
basic_logout
|
45
43
|
end
|
46
44
|
|
47
45
|
# Find Redfish service object by OData ID field.
|
@@ -51,5 +49,47 @@ module RedfishClient
|
|
51
49
|
def find(oid)
|
52
50
|
Resource.new(@connector, oid: oid)
|
53
51
|
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def session_login_available?
|
56
|
+
!@content.dig("Links", "Sessions").nil?
|
57
|
+
end
|
58
|
+
|
59
|
+
def session_login(username, password)
|
60
|
+
r = self.Links.Sessions.post(
|
61
|
+
payload: { "UserName" => username, "Password" => password }
|
62
|
+
)
|
63
|
+
raise AuthError, "Invalid credentials" unless r.status == 201
|
64
|
+
|
65
|
+
session_logout
|
66
|
+
|
67
|
+
payload = r.data[:headers][TOKEN_AUTH_HEADER]
|
68
|
+
@connector.add_headers(TOKEN_AUTH_HEADER => payload)
|
69
|
+
@session = Resource.new(@connector, content: JSON.parse(r.data[:body]))
|
70
|
+
end
|
71
|
+
|
72
|
+
def session_logout
|
73
|
+
return unless @session
|
74
|
+
r = @session.delete
|
75
|
+
raise AuthError unless r.status == 204
|
76
|
+
@session = nil
|
77
|
+
@connector.remove_headers([TOKEN_AUTH_HEADER])
|
78
|
+
end
|
79
|
+
|
80
|
+
def auth_test_path
|
81
|
+
@content.values.map { |v| v["@odata.id"] }.compact.first
|
82
|
+
end
|
83
|
+
|
84
|
+
def basic_login(username, password)
|
85
|
+
payload = Base64.encode64("#{username}:#{password}").strip
|
86
|
+
@connector.add_headers(BASIC_AUTH_HEADER => "Basic #{payload}")
|
87
|
+
r = @connector.get(auth_test_path)
|
88
|
+
raise AuthError, "Invalid credentials" unless r.status == 200
|
89
|
+
end
|
90
|
+
|
91
|
+
def basic_logout
|
92
|
+
@connector.remove_headers([BASIC_AUTH_HEADER])
|
93
|
+
end
|
54
94
|
end
|
55
95
|
end
|
data/lib/redfish_client.rb
CHANGED
@@ -1,19 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "redfish_client/connector"
|
4
|
-
require "redfish_client/null_logger"
|
5
4
|
require "redfish_client/root"
|
6
5
|
require "redfish_client/version"
|
7
6
|
|
8
7
|
module RedfishClient
|
9
|
-
def self.logger
|
10
|
-
@logger ||= NullLogger.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.logger=(logger)
|
14
|
-
@logger = logger
|
15
|
-
end
|
16
|
-
|
17
8
|
def self.new(url, prefix: "/redfish/v1", verify: true)
|
18
9
|
con = Connector.new(url, verify)
|
19
10
|
Root.new(con, oid: prefix)
|
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.2.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-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -129,6 +129,7 @@ executables: []
|
|
129
129
|
extensions: []
|
130
130
|
extra_rdoc_files: []
|
131
131
|
files:
|
132
|
+
- ".codeclimate.yml"
|
132
133
|
- ".gitignore"
|
133
134
|
- ".rspec"
|
134
135
|
- ".rubocop.yml"
|
@@ -167,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
168
|
version: '0'
|
168
169
|
requirements: []
|
169
170
|
rubyforge_project:
|
170
|
-
rubygems_version: 2.6
|
171
|
+
rubygems_version: 2.7.6
|
171
172
|
signing_key:
|
172
173
|
specification_version: 4
|
173
174
|
summary: Simple Redfish client library
|