dockerapi 0.7.0 → 0.8.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 +4 -4
- data/CHANGELOG.md +19 -0
- data/Gemfile.lock +1 -1
- data/README.md +63 -20
- data/lib/docker/api/base.rb +5 -3
- data/lib/docker/api/node.rb +26 -0
- data/lib/docker/api/swarm.rb +40 -0
- data/lib/docker/api/version.rb +1 -1
- data/lib/dockerapi.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e010cc4d2a5c4aa102ffe7cd9d58e7e4823bf4ba9079f9a622cb021dad8cd0e
|
4
|
+
data.tar.gz: 47163ffb19a35b4a473da7f88f40d5eac418a15638ccc8d91b6b1672a1af09f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b48b06f99c46c936d4458a1908c08fe13f862ce7c63394077f52d8b621b2eb9e0be959682227f9b7ba59946f18b9098f2983a4bf1a781d16218ad66b08c730a3
|
7
|
+
data.tar.gz: ee2cb40d653054ea9bb559b9d39f43dd28556dcc25374033904f5c292403e371176ce1233636209bd5678df06f90436f6214aaafadd255d0b438cc870c318591
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
# 0.8.0
|
2
|
+
|
3
|
+
Add Docker::API::Swarm methods:
|
4
|
+
* init
|
5
|
+
* update
|
6
|
+
* inspect
|
7
|
+
* unlock_key
|
8
|
+
* unlock
|
9
|
+
* join
|
10
|
+
* leave
|
11
|
+
|
12
|
+
Add Docker::API::Node methods:
|
13
|
+
* list
|
14
|
+
* inspect
|
15
|
+
* update
|
16
|
+
* delete
|
17
|
+
|
18
|
+
Query parameters and request body json can now skip the validation step with `:skip_validation => true` option.
|
19
|
+
|
1
20
|
# 0.7.0
|
2
21
|
|
3
22
|
Major changes: Docker::API::Connection is now a regular class intead of a Singleton, allowing multiple connections to be stablished within the same program (replacing the connect_to implementation). To leverage this feature, API-related classes must be initialized and may or may not receive a Docker::API::Connection as parameter, or it'll connect to /var/run/docker.sock by default. For this reason, class methods were replaced with instance methods. Documentation will reflect this changes of implementation.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -249,6 +249,56 @@ print response.data[:stream]
|
|
249
249
|
exe.inspect(id)
|
250
250
|
```
|
251
251
|
|
252
|
+
### Swarm
|
253
|
+
```ruby
|
254
|
+
# Connect to local swarm endpoints
|
255
|
+
swarm = Docker::API::Swarm.new
|
256
|
+
|
257
|
+
# Init swarm
|
258
|
+
swarm.init({AdvertiseAddr: "local-ip-address:2377", ListenAddr: "0.0.0.0:4567"})
|
259
|
+
|
260
|
+
# Inspect swarm
|
261
|
+
swarm.inspect
|
262
|
+
|
263
|
+
# Update swarm
|
264
|
+
swarm.update(version, {rotateWorkerToken: true})
|
265
|
+
swarm.update(version, {rotateManagerToken: true})
|
266
|
+
swarm.update(version, {rotateManagerUnlockKey: true})
|
267
|
+
swarm.update(version, {EncryptionConfig: { AutoLockManagers: true }})
|
268
|
+
|
269
|
+
# Get unlock key
|
270
|
+
swarm.unlock_key
|
271
|
+
|
272
|
+
# Unlock swarm
|
273
|
+
swarm.unlock(UnlockKey: "key-value")
|
274
|
+
|
275
|
+
# Join an existing swarm
|
276
|
+
swarm.join(RemoteAddrs: ["remote-manager-address:2377"], JoinToken: "Join-Token-Here")
|
277
|
+
|
278
|
+
# Leave a swarm
|
279
|
+
swarm.leave(force: true)
|
280
|
+
```
|
281
|
+
|
282
|
+
### Node
|
283
|
+
```ruby
|
284
|
+
# Connect to local node endpoints
|
285
|
+
node = Docker::API::Node.new
|
286
|
+
|
287
|
+
# List nodes
|
288
|
+
node.list
|
289
|
+
|
290
|
+
# Inspect node
|
291
|
+
node.inspect("node-id")
|
292
|
+
|
293
|
+
# Update node (version, Role and Availability must be present)
|
294
|
+
node.update("node-id", {version: "version"}, {Role: "worker", Availability: "pause" })
|
295
|
+
node.update("node-id", {version: "version"}, {Role: "worker", Availability: "active" })
|
296
|
+
node.update("node-id", {version: "version"}, {Role: "manager", Availability: "active" })
|
297
|
+
|
298
|
+
# Delete node
|
299
|
+
node.delete("node-id")
|
300
|
+
```
|
301
|
+
|
252
302
|
### Connection
|
253
303
|
|
254
304
|
By default Docker::API::Connection will connect to local Docker socket at `/var/run/docker.sock`. See examples below to use a different path or connect to a remote address.
|
@@ -311,6 +361,8 @@ response.success?
|
|
311
361
|
|
312
362
|
`Docker::API::InvalidParameter` and `Docker::API::InvalidRequestBody` may be raised when an invalid option is passed as argument (ie: an option not described in Docker API documentation for request query parameters nor request body (json) parameters). Even if no errors were raised, consider validating the status code and/or message of the response to check if the Docker daemon has fulfilled the operation properly.
|
313
363
|
|
364
|
+
To completely skip the validation process, add `:skip_validation => true` in the hash to be validated.
|
365
|
+
|
314
366
|
## Development
|
315
367
|
|
316
368
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -319,28 +371,19 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
319
371
|
|
320
372
|
### Road to 1.0.0
|
321
373
|
|
322
|
-
NS: Not Started
|
323
|
-
|
324
|
-
WIP: Work In Progress
|
325
|
-
|
326
|
-
|
327
374
|
| Class | Tests | Implementation | Refactoring |
|
328
375
|
|---|---|---|---|
|
329
|
-
| Container | Ok | Ok |
|
330
|
-
| Image | Ok | Ok |
|
331
|
-
| Volume | Ok | Ok |
|
332
|
-
| Network | Ok | Ok |
|
333
|
-
| System | Ok | Ok |
|
334
|
-
| Exec | Ok | Ok |
|
335
|
-
| Swarm |
|
336
|
-
| Node |
|
337
|
-
| Service |
|
338
|
-
| Task |
|
339
|
-
| Secret |
|
340
|
-
|
341
|
-
Misc:
|
342
|
-
* ~~Improve response object~~
|
343
|
-
* ~~Improve error objects~~
|
376
|
+
| Container | Ok | Ok | 7/24 |
|
377
|
+
| Image | Ok | Ok | 7/31 |
|
378
|
+
| Volume | Ok | Ok | 8/7 |
|
379
|
+
| Network | Ok | Ok | 8/7 |
|
380
|
+
| System | Ok | Ok | 8/7 |
|
381
|
+
| Exec | Ok | Ok | 8/7 |
|
382
|
+
| Swarm | Ok | Ok | 8/14 |
|
383
|
+
| Node | Ok | Ok | 8/14 |
|
384
|
+
| Service | 7/17 | 7/17 | 8/14 |
|
385
|
+
| Task | 7/17 | 7/17 | 8/14 |
|
386
|
+
| Secret | 7/17 | 7/17 | 8/14 |
|
344
387
|
|
345
388
|
## Contributing
|
346
389
|
|
data/lib/docker/api/base.rb
CHANGED
@@ -3,16 +3,18 @@ module Docker
|
|
3
3
|
class Base
|
4
4
|
|
5
5
|
def initialize connection = nil
|
6
|
+
raise Docker::API::Error.new("Expect connection to be a Docker::API::Connection class") if connection != nil && !connection.is_a?(Docker::API::Connection)
|
6
7
|
@connection = connection || Docker::API::Connection.new
|
7
8
|
end
|
8
9
|
|
9
10
|
private
|
10
11
|
|
11
|
-
def base_path
|
12
|
+
def base_path # TODO: this method to be removed?
|
12
13
|
"/"
|
13
14
|
end
|
14
15
|
|
15
16
|
def validate error, permitted, params
|
17
|
+
return if params[:skip_validation]
|
16
18
|
unpermitted = params.keys.map(&:to_s) - permitted.map(&:to_s)
|
17
19
|
raise error.new(permitted, unpermitted) if unpermitted.size > 0
|
18
20
|
end
|
@@ -22,12 +24,12 @@ module Docker
|
|
22
24
|
## If value is another Hash, it should keep a json syntax {key:value}
|
23
25
|
def hash_to_params h
|
24
26
|
p = []
|
25
|
-
h.each { |k,v| p.push( v.is_a?(Hash) ? "#{k}=#{v.to_json}" : "#{k}=#{v}") }
|
27
|
+
h.delete_if{ | k, v | k.to_s == "skip_validation" }.each { |k,v| p.push( v.is_a?(Hash) ? "#{k}=#{v.to_json}" : "#{k}=#{v}") }
|
26
28
|
p.join("&").gsub(" ","")
|
27
29
|
end
|
28
30
|
|
29
31
|
def build_path path, params = {}
|
30
|
-
p = path.is_a?(Array) ? ([base_path] << path).join("/") : path
|
32
|
+
p = path.is_a?(Array) ? ([base_path] << path).join("/") : path # TODO: this line to be removed?
|
31
33
|
params.size > 0 ? [p, hash_to_params(params)].join("?") : p
|
32
34
|
end
|
33
35
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Docker
|
2
|
+
module API
|
3
|
+
class Node < Docker::API::Base
|
4
|
+
|
5
|
+
def list params = {}
|
6
|
+
validate Docker::API::InvalidParameter, [:filters], params
|
7
|
+
@connection.get(build_path("/nodes", params))
|
8
|
+
end
|
9
|
+
|
10
|
+
def inspect name
|
11
|
+
@connection.get("/nodes/#{name}")
|
12
|
+
end
|
13
|
+
|
14
|
+
def update name, params = {}, body = {}
|
15
|
+
validate Docker::API::InvalidParameter, [:version], params
|
16
|
+
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Role, :Availability], body
|
17
|
+
@connection.request(method: :post, path: build_path("nodes/#{name}/update", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete name, params = {}
|
21
|
+
validate Docker::API::InvalidParameter, [:force], params
|
22
|
+
@connection.delete(build_path("/nodes/#{name}", params))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Docker
|
2
|
+
module API
|
3
|
+
class Swarm < Docker::API::Base
|
4
|
+
|
5
|
+
def init body = {}
|
6
|
+
validate Docker::API::InvalidRequestBody, [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :DataPathPort, :DefaultAddrPool, :ForceNewCluster, :SubnetSize, :Spec], body
|
7
|
+
@connection.request(method: :post, path: build_path("/swarm/init"), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
8
|
+
end
|
9
|
+
|
10
|
+
def update params = {}, body = {}
|
11
|
+
validate Docker::API::InvalidParameter, [:version, :rotateWorkerToken, :rotateManagerToken, :rotateManagerUnlockKey], params
|
12
|
+
validate Docker::API::InvalidRequestBody, [:Name, :Labels, :Orchestration, :Raft, :Dispatcher, :CAConfig, :EncryptionConfig, :TaskDefaults], body
|
13
|
+
@connection.request(method: :post, path: build_path("/swarm/update", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
14
|
+
end
|
15
|
+
|
16
|
+
def inspect
|
17
|
+
@connection.get("/swarm")
|
18
|
+
end
|
19
|
+
|
20
|
+
def unlock_key
|
21
|
+
@connection.get(build_path("/swarm/unlockkey"))
|
22
|
+
end
|
23
|
+
|
24
|
+
def unlock body = {}
|
25
|
+
validate Docker::API::InvalidRequestBody, [:UnlockKey], body
|
26
|
+
@connection.request(method: :post, path: build_path("/swarm/unlock"), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
27
|
+
end
|
28
|
+
|
29
|
+
def join body = {}
|
30
|
+
validate Docker::API::InvalidRequestBody, [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :RemoteAddrs, :JoinToken], body
|
31
|
+
@connection.request(method: :post, path: build_path("/swarm/join"), headers: {"Content-Type": "application/json"}, body: body.to_json)
|
32
|
+
end
|
33
|
+
|
34
|
+
def leave params = {}
|
35
|
+
validate Docker::API::InvalidParameter, [:force], params
|
36
|
+
@connection.post(build_path("/swarm/leave", params))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/docker/api/version.rb
CHANGED
data/lib/dockerapi.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockerapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alysson A. Costa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -50,7 +50,9 @@ files:
|
|
50
50
|
- lib/docker/api/exec.rb
|
51
51
|
- lib/docker/api/image.rb
|
52
52
|
- lib/docker/api/network.rb
|
53
|
+
- lib/docker/api/node.rb
|
53
54
|
- lib/docker/api/response.rb
|
55
|
+
- lib/docker/api/swarm.rb
|
54
56
|
- lib/docker/api/system.rb
|
55
57
|
- lib/docker/api/version.rb
|
56
58
|
- lib/docker/api/volume.rb
|