train-rest 0.4.0 → 0.4.1

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: 1550899c2f8aad404793b83b1f7700ece96937efc8b78cb1eb7aebb8d6d2a2a2
4
- data.tar.gz: b9251734100cc43233504afbe6e8d6fbd11bec1b07a16db7884720e907a164e2
3
+ metadata.gz: a003dbd0ea47ee7eb23e2173036951f9104493a761a7e1d8d9e1798ce933ddc3
4
+ data.tar.gz: ee585ad7ed98f701e20fe3d48384260073df3f69eb102faa05d79eb118a63f95
5
5
  SHA512:
6
- metadata.gz: 1630381a0f378a7a4a275202fc19a60f71579b99f6b1ae50229c72b67cce2466e5d8b2f4a5b5c3c23f8c1c5c4ccc4817f768fc36cd65c3c8ac9c1b81609b1994
7
- data.tar.gz: 02ed2d874ac736d016fc75f24a1c02e8b9209ec5f43cbb9281bf615106a04d53f4d49d26682e84cb7c2b7ab6a949dc2589823a769e9b87aa3c03aa428c50d919
6
+ metadata.gz: 6440c9ff603fe5af0042cd925c4c3729552fb65cc8a41162e4991e9301149ba3795bbf5fffcff87990d52f784331839ff70f99b20d9fceb230785d4e9cc1ba38
7
+ data.tar.gz: e92001e986dce6ead7361cb6b3e55213a1c17ba517a62ed99ce9b0275dc689857cec05e05d9b58a6039e1971c3ec7773a9622bb271d4d8f5c495d4bb1c6f6306
@@ -1,5 +1,5 @@
1
1
  module TrainPlugins
2
2
  module Rest
3
- VERSION = "0.4.0".freeze
3
+ VERSION = "0.4.1".freeze
4
4
  end
5
5
  end
data/train-rest.gemspec CHANGED
@@ -9,21 +9,21 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ["theinen@tecracer.de"]
10
10
  spec.summary = "Train transport for REST"
11
11
  spec.description = "Provides a transport to communicate easily with RESTful APIs."
12
- spec.homepage = "https://github.com/sgre-chef/train-rest"
12
+ spec.homepage = "https://github.com/tecracer-chef/train-rest"
13
13
  spec.license = "Apache-2.0"
14
14
 
15
15
  spec.files = %w{
16
- README.md train-rest.gemspec Gemfile
16
+ train-rest.gemspec
17
17
  } + Dir.glob(
18
18
  "lib/**/*", File::FNM_DOTMATCH
19
19
  ).reject { |f| File.directory?(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "train", "~> 3.0"
22
+ spec.add_dependency "train-core", "~> 3.0"
23
23
  spec.add_dependency "rest-client", "~> 2.1"
24
24
 
25
25
  spec.add_development_dependency "bump", "~> 0.9"
26
- spec.add_development_dependency "chefstyle", "~> 0.14"
26
+ spec.add_development_dependency "chefstyle", "~> 2.2"
27
27
  spec.add_development_dependency "guard", "~> 2.16"
28
28
  spec.add_development_dependency "mdl", "~> 0.9"
29
29
  spec.add_development_dependency "rake", "~> 13.0"
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: train-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Heinen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-20 00:00:00.000000000 Z
11
+ date: 2022-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: train
14
+ name: train-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.14'
61
+ version: '2.2'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.14'
68
+ version: '2.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -115,8 +115,6 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
- - Gemfile
119
- - README.md
120
118
  - lib/train-rest.rb
121
119
  - lib/train-rest/auth_handler.rb
122
120
  - lib/train-rest/auth_handler/anonymous.rb
@@ -129,7 +127,7 @@ files:
129
127
  - lib/train-rest/transport.rb
130
128
  - lib/train-rest/version.rb
131
129
  - train-rest.gemspec
132
- homepage: https://github.com/sgre-chef/train-rest
130
+ homepage: https://github.com/tecracer-chef/train-rest
133
131
  licenses:
134
132
  - Apache-2.0
135
133
  metadata: {}
@@ -148,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
146
  - !ruby/object:Gem::Version
149
147
  version: '0'
150
148
  requirements: []
151
- rubygems_version: 3.0.3
149
+ rubygems_version: 3.0.3.1
152
150
  signing_key:
153
151
  specification_version: 4
154
152
  summary: Train transport for REST
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec
data/README.md DELETED
@@ -1,280 +0,0 @@
1
- # train-rest - Train transport
2
-
3
- Provides a transport to communicate easily with RESTful APIs.
4
-
5
- ## Requirements
6
-
7
- - Gem `rest-client` in Version 2.1
8
-
9
- ## Installation
10
-
11
- You will have to build this gem yourself to install it as it is not yet on
12
- Rubygems.Org. For this there is a rake task which makes this a one-liner:
13
-
14
- ```bash
15
- rake install:local
16
- ```
17
-
18
- ## Transport parameters
19
-
20
- | Option | Explanation | Default |
21
- | -------------------- | --------------------------------------- | ----------- |
22
- | `endpoint` | Endpoint of the REST API | _required_ |
23
- | `verify_ssl` | Check certificate and chain | true |
24
- | `auth_type` | Authentication type | `anonymous` |
25
- | `debug_rest` | Enable debugging of HTTP traffic | false |
26
- | `logger` | Alternative logging class | |
27
-
28
- ## Authenticators
29
-
30
- ### Anonymous
31
-
32
- Identifier: `auth_type: :anonymous`
33
-
34
- No actions for authentication, logging in/out or session handing are made. This
35
- assumes a public API.
36
-
37
- ### Authtype Apikey
38
-
39
- This will inject a HTTP header `Authorization: Apikey xxxx` with the passed
40
- API key into requests.
41
-
42
- Identifier: `auth_type: :authtype_apikey`
43
-
44
- | Option | Explanation | Default |
45
- | -------------------- | --------------------------------------- | ----------- |
46
- | `apikey` | API Key for authentication | _required_ |
47
-
48
- ### Basic (RFC 2617)
49
-
50
- Identifier: `auth_type: :basic`
51
-
52
- | Option | Explanation | Default |
53
- | -------------------- | --------------------------------------- | ----------- |
54
- | `username` | Username for `basic` authentication | _required_ |
55
- | `password` | Password for `basic` authentication | _required_ |
56
-
57
- If you supply a `username` and a `password`, authentication will automatically
58
- switch to `basic`.
59
-
60
- ### Bearer (RFC 7650)
61
-
62
- This will inject a HTTP header `Authorization: Bearer xxxx` with the passed
63
- token into requests.
64
-
65
- Identifier: `auth_type: :bearer`
66
-
67
- | Option | Explanation | Default |
68
- | -------------------- | --------------------------------------- | ----------- |
69
- | `token` | Tokenb to pass | _required_ |
70
-
71
- ### Header-based
72
-
73
- This will inject an additional HTTP header with the passed value. If no name
74
- for the header is passed, it will default to `X-API-Key`.
75
-
76
- Identifier: `auth_type: :header`
77
-
78
- | Option | Explanation | Default |
79
- | -------------------- | --------------------------------------- | ----------- |
80
- | `apikey` | API Key for authentication | _required_ |
81
- | `header` | Name of the HTTP header to include | `X-API-Key` |
82
-
83
- ### Redfish
84
-
85
- Identifier: `auth_type: :redfish`
86
-
87
- | Option | Explanation | Default |
88
- | -------------------- | --------------------------------------- | ----------- |
89
- | `username` | Username for `redfish` authentication | _required_ |
90
- | `password` | Password for `redfish` authentication | _required_ |
91
-
92
- For access to integrated management controllers on standardized server hardware.
93
- The Redfish standard is defined in <http://www.dmtf.org/standards/redfish> and
94
- this handler does initial login, reuses the received session and logs out when
95
- closing the transport cleanly.
96
-
97
- Known vendors which implement RedFish based management for their systems include
98
- HPE, Dell, IBM, SuperMicro, Lenovo, Huawei and others.
99
-
100
- ## Debugging and use in Chef
101
-
102
- You can activate debugging by setting the `debug_rest` flag to `true'. Please
103
- note, that this will also log any confidential parts of HTTP traffic as well.
104
-
105
- For better integration into Chef custom resources, all REST debug output will
106
- be printed on `info` level. This allows debugging Chef resources without
107
- crawling through all other debug output:
108
-
109
- ```ruby
110
- train = Train.create('rest', {
111
- endpoint: 'https://api.example.com/v1/',
112
- debug_rest: true,
113
- logger: Chef::Log
114
- })
115
- ```
116
-
117
- ## Request Methods
118
-
119
- This transport does not implement the `run_command` method, as there is no
120
- line-based protocol to execute commands against. Instead, it implements its own
121
- custom methods which suit REST interfaces. Trying to call this method will
122
- throw an Exception.
123
-
124
- ### Generic Request
125
-
126
- The `request` methods allows to send free-form requests against any defined or
127
- custom methods.
128
-
129
- `request(path, method = :get, request_parameters: {}, data: nil, headers: {},
130
- json_processing: true)`
131
-
132
- - `path`: The path to request, which will be appended to the `endpoint`
133
- - `method`: The HTTP method in Ruby Symbol syntax
134
- - `request_parameters`: A hash of parameters to the `rest-client` request
135
- method for additional settings
136
- - `data`: Data for actions like `:post` or `:put`. Not all methods accept
137
- a data body.
138
- - `headers`: Additional headers for the request
139
- - `json_processing`: If the response is a JSON and you want to receive a
140
- processed Hash/Array instead of text
141
-
142
- For `request_parameters` and `headers`, there is data mixed in to add
143
- authenticator responses, JSON processing etc. Please check the
144
- implementation in `connection.rb` for details.
145
-
146
- ### Convenience Methods
147
-
148
- Simplified wrappers are generated for the most common request types:
149
-
150
- - `delete(path, request_parameters: {}, headers: {}, json_processing: true)`
151
- - `head(path, request_parameters: {}, headers: {}, json_processing: true)`
152
- - `get(path, request_parameters: {}, headers: {}, json_processing: true)`
153
- - `post(path, request_parameters: {}, data: nil, headers: {}, json_processing: true)`
154
- - `put(path, request_parameters: {}, data: nil, headers: {}, json_processing: true)`
155
- - `patch(path, request_parameters: {}, data: nil, headers: {}, json_processing: true)`
156
-
157
- ## Example use
158
-
159
- ```ruby
160
- require 'train-rest'
161
-
162
- train = Train.create('rest', {
163
- endpoint: 'https://api.example.com/v1/',
164
-
165
- logger: Logger.new($stdout, level: :info)
166
- })
167
- conn = train.connection
168
-
169
- # Get some hypothetical data
170
- data = conn.get('device/1/settings')
171
-
172
- # Modify + Patch
173
- data['disabled'] = false
174
- conn.patch('device/1/settings', data)
175
-
176
- conn.close
177
- ```
178
-
179
- Example for basic authentication:
180
-
181
- ```ruby
182
- require 'train-rest'
183
-
184
- # This will immediately do a login and add headers
185
- train = Train.create('rest', {
186
- endpoint: 'https://api.example.com/v1/',
187
-
188
- auth_type: :basic,
189
- username: 'admin',
190
- password: '*********'
191
- })
192
- conn = train.connection
193
-
194
- # ... do work, each request will resend Basic authentication headers ...
195
-
196
- conn.close
197
- ```
198
-
199
- Example for logging into a RedFish based system. Please note that the RedFish
200
- authentication handler will append `redfish/v1` to the endpoint automatically,
201
- if it is not present.
202
-
203
- Due to this, you can use RedFish systems either with a base URL like in the
204
- example below or with a full one. Your own code needs to match the style
205
- you choose.
206
-
207
- ```ruby
208
- require 'train-rest'
209
-
210
- # This will immediately do a login and add headers
211
- train = Train.create('rest', {
212
- endpoint: 'https://10.20.30.40',
213
- verify_ssl: false,
214
-
215
- auth_type: :redfish,
216
- username: 'iloadmin',
217
- password: '*********'
218
- })
219
- conn = train.connection
220
-
221
- # ... do work ...
222
-
223
- # Handles logout as well
224
- conn.close
225
- ```
226
-
227
- ## Use with Redfish, Your Custom Resources and Chef Target Mode
228
-
229
- 1. Set up a credentials file under `~/.chef/credentials` or `/etc/chef/credentials`:
230
-
231
- ```toml
232
- ['10.0.0.1']
233
- endpoint = 'https://10.0.0.1/redfish/v1/'
234
- username = 'user'
235
- password = 'pass'
236
- verify_ssl = false
237
- auth_type = 'redfish'
238
- ```
239
-
240
- 1. Configure Chef to use the REST transport in `client.rb`:
241
-
242
- ```toml
243
- target_mode.protocol = "rest"
244
- ```
245
-
246
- 1. Write your custom resources for REST APIs
247
- 1. Mark them up using the REST methods for target mode:
248
-
249
- ```ruby
250
- provides :rest_resource, target_mode: true, platform: 'rest'
251
- ```
252
-
253
- 1. Run against the defiend targets via Chef Target Mode:
254
-
255
- ```shell
256
- chef-client --local-mode --target 10.0.0.1 --runlist 'recipe[my-cookbook::setup]'
257
- ```
258
-
259
- ## Use with Prerecorded API responses
260
-
261
- For testing during and after development, not all APIs can be used to verify your solution against.
262
- The VCR gem offers the possibility to hook into web requests and intercept them to play back canned
263
- responses.
264
-
265
- Please read the documentation of the VCR gem on how to record your API and the concepts like
266
- "cassettes", "libraries" and matchers.
267
-
268
- The following options are available in train-rest for this:
269
-
270
- | Option | Explanation | Default |
271
- | -------------------- | --------------------------------------- | ------------ |
272
- | `vcr_cassette` | Name of the response file | nil |
273
- | `vcr_library` | Directory to search responses in | `vcr` |
274
- | `vcr_match_on` | Elements to match request by | `method uri` |
275
- | `vcr_record` | Recording mode | `none` |
276
- | `vcr_hook_into` | Base library for intercepting | `webmock` |
277
-
278
- VCR will only be required as a Gem and activated, if you supply a cassette name.
279
-
280
- You can use all these settings in your Chef Target Mode `credentials` file as well.