dockerapi 0.20.1 → 0.22.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/.github/workflows/ci.yml +2 -0
- data/Gemfile.lock +1 -1
- data/README.md +5 -11
- data/lib/docker/api/base.rb +2 -30
- data/lib/docker/api/config.rb +1 -1
- data/lib/docker/api/image.rb +1 -1
- data/lib/docker/api/node.rb +1 -1
- data/lib/docker/api/secret.rb +1 -1
- data/lib/docker/api/service.rb +1 -1
- data/lib/docker/api/version.rb +1 -1
- data/lib/dockerapi.rb +0 -139
- metadata +2 -3
- data/lib/docker/api/error.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2de49c8dede70d8314d0e7a4fea7ccd80ae17efcc0ca2fd88baa1da9b851f48e
|
4
|
+
data.tar.gz: a7b326e2932cbbe926fff006d7776ec861473eb15e56d5b4b1d8f06557e8caf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2930087ae646cb941897126cda7bb89cb1687a0c4a48bf83d3ed6938f12a15aa78ab6350e721d93097a628d2c6e2076671dafe0b6d5ead1fdfe579de640018a5
|
7
|
+
data.tar.gz: 7c3237567b5fa181d54926e1d9e1ef88706227a9dd987ae3aef5ad1e91d56e62bbc2c4fdba0ac833260770e120ef6b87fedb647725a17b1627f07143a7015378
|
data/.github/workflows/ci.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -359,7 +359,7 @@ node.update("node-id", {version: "version"}, {Role: "worker", Availability: "act
|
|
359
359
|
node.update("node-id", {version: "version"}, {Role: "manager", Availability: "active" })
|
360
360
|
|
361
361
|
# Delete node
|
362
|
-
node.
|
362
|
+
node.remove("node-id")
|
363
363
|
```
|
364
364
|
|
365
365
|
### Service
|
@@ -389,7 +389,7 @@ service.logs("nginx-service", stdout: true)
|
|
389
389
|
service.details("nginx-service")
|
390
390
|
|
391
391
|
# Delete service
|
392
|
-
service.
|
392
|
+
service.remove("nginx-service")
|
393
393
|
```
|
394
394
|
|
395
395
|
### Task
|
@@ -427,7 +427,7 @@ spec = secret.details("secret-name").json["Spec"]
|
|
427
427
|
secret.update("secret-name", {version: version}, spec.merge!({ Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" }))
|
428
428
|
|
429
429
|
# Delete secret
|
430
|
-
secret.
|
430
|
+
secret.remove("secret-name")
|
431
431
|
```
|
432
432
|
|
433
433
|
### Config
|
@@ -450,7 +450,7 @@ spec = config.details("config-name").json["Spec"]
|
|
450
450
|
config.update("config-name", {version: version}, spec.merge!({ Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" }))
|
451
451
|
|
452
452
|
# Delete config
|
453
|
-
config.
|
453
|
+
config.remove("config-name")
|
454
454
|
```
|
455
455
|
|
456
456
|
### Plugin
|
@@ -552,12 +552,6 @@ response.success?
|
|
552
552
|
=> true
|
553
553
|
```
|
554
554
|
|
555
|
-
### Error handling
|
556
|
-
|
557
|
-
`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.
|
558
|
-
|
559
|
-
To completely skip the validation process, add `:skip_validation => true` in the hash to be validated.
|
560
|
-
|
561
555
|
### Blocks
|
562
556
|
|
563
557
|
Some methods can receive a block to alter the default execution:
|
@@ -586,7 +580,7 @@ The default blocks can be found in `Docker::API::Base`.
|
|
586
580
|
|
587
581
|
## Development
|
588
582
|
|
589
|
-
Run `
|
583
|
+
Run `rspec` to run the unit tests. Run `rspec --tag e2e` to run End-to-End tests (requires Docker locally).
|
590
584
|
|
591
585
|
Run `bin/console` for an interactive prompt that will allow you to experiment.
|
592
586
|
|
data/lib/docker/api/base.rb
CHANGED
@@ -7,9 +7,8 @@ class Docker::API::Base
|
|
7
7
|
#
|
8
8
|
# @param connection [Docker::API::Connection]: Connection to be used.
|
9
9
|
def initialize connection = nil
|
10
|
-
raise
|
10
|
+
raise StandardError.new("Expected connection to be a Docker::API::Connection class") if connection != nil && !connection.is_a?(Docker::API::Connection)
|
11
11
|
@connection = connection || Docker::API::Connection.new
|
12
|
-
set_automated_validation
|
13
12
|
end
|
14
13
|
|
15
14
|
private
|
@@ -59,18 +58,6 @@ class Docker::API::Base
|
|
59
58
|
Base64.urlsafe_encode64(authentication.to_json.to_s).chomp
|
60
59
|
end
|
61
60
|
|
62
|
-
##
|
63
|
-
# Validate a Hash object comparing its keys with a given Array of permitted values. Raise an error if the validation fail.
|
64
|
-
#
|
65
|
-
# @param error [Error]: Error to be raised of the validation fail.
|
66
|
-
# @param permitted [Array]: List of permitted keys.
|
67
|
-
# @param params [Hash]: Hash object to be validated.
|
68
|
-
def validate error, permitted, params
|
69
|
-
return if params[:skip_validation]
|
70
|
-
unpermitted = params.keys.map(&:to_s) - permitted.map(&:to_s)
|
71
|
-
raise error.new(permitted, unpermitted) if unpermitted.size > 0
|
72
|
-
end
|
73
|
-
|
74
61
|
##
|
75
62
|
# Convert Ruby Hash into URL query parameters.
|
76
63
|
#
|
@@ -79,7 +66,7 @@ class Docker::API::Base
|
|
79
66
|
# @param hash [Hash]: Hash object to be converted in a query parameter-like string.
|
80
67
|
def hash_to_params hash
|
81
68
|
p = []
|
82
|
-
hash.
|
69
|
+
hash.each { |k,v| p.push( v.is_a?(Hash) ? "#{k}=#{v.to_json}" : "#{k}=#{v}") }
|
83
70
|
p.join("&").gsub(" ","")
|
84
71
|
end
|
85
72
|
|
@@ -93,19 +80,4 @@ class Docker::API::Base
|
|
93
80
|
params.size > 0 ? [path, hash_to_params(params)].join("?") : path
|
94
81
|
end
|
95
82
|
|
96
|
-
##
|
97
|
-
# Set the validation to happen automatically when method parameters include "params" or "body".
|
98
|
-
def set_automated_validation
|
99
|
-
(self.methods - Object.methods).each do |method|
|
100
|
-
params_index = method(method).parameters.map{|ar| ar[1]}.index(:params)
|
101
|
-
body_index = method(method).parameters.map{|ar| ar[1]}.index(:body)
|
102
|
-
|
103
|
-
define_singleton_method(method) do |*args, &block|
|
104
|
-
validate Docker::API::InvalidParameter, Docker::API::VALID_PARAMS["#{self.class.name}"]["#{method}"], (args[params_index] || {}) if params_index
|
105
|
-
validate Docker::API::InvalidRequestBody, Docker::API::VALID_BODY["#{self.class.name}"]["#{method}"], (args[body_index] || {}) if body_index
|
106
|
-
super(*args,&block)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
83
|
end
|
data/lib/docker/api/config.rb
CHANGED
@@ -60,7 +60,7 @@ class Docker::API::Config < Docker::API::Base
|
|
60
60
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ConfigDelete
|
61
61
|
#
|
62
62
|
# @param name [String]: The ID or name of the config.
|
63
|
-
def
|
63
|
+
def remove name
|
64
64
|
@connection.delete("/v#{Docker::API::API_VERSION}/configs/#{name}")
|
65
65
|
end
|
66
66
|
end
|
data/lib/docker/api/image.rb
CHANGED
@@ -133,7 +133,7 @@ class Docker::API::Image < Docker::API::Base
|
|
133
133
|
# @param params [Hash]: Parameters that are appended to the URL.
|
134
134
|
# @param authentication [Hash]: Authentication parameters.
|
135
135
|
def push name, params = {}, authentication = {}
|
136
|
-
raise
|
136
|
+
raise StandardError.new("Provide authentication parameters to push an image") unless authentication.any?
|
137
137
|
@connection.request(method: :post, path: build_path("/images/#{name}/push", params), headers: { "X-Registry-Auth" => auth_encoder(authentication) } )
|
138
138
|
end
|
139
139
|
|
data/lib/docker/api/node.rb
CHANGED
@@ -36,7 +36,7 @@ class Docker::API::Node < Docker::API::Base
|
|
36
36
|
#
|
37
37
|
# @param name [String]: The ID or name of the node.
|
38
38
|
# @param params [Hash]: Parameters that are appended to the URL.
|
39
|
-
def
|
39
|
+
def remove name, params = {}
|
40
40
|
@connection.delete(build_path("/nodes/#{name}", params))
|
41
41
|
end
|
42
42
|
|
data/lib/docker/api/secret.rb
CHANGED
@@ -52,7 +52,7 @@ class Docker::API::Secret < Docker::API::Base
|
|
52
52
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/SecretDelete
|
53
53
|
#
|
54
54
|
# @param name [String]: The ID or name of the secret.
|
55
|
-
def
|
55
|
+
def remove name
|
56
56
|
@connection.delete(build_path("/secrets/#{name}"))
|
57
57
|
end
|
58
58
|
end
|
data/lib/docker/api/service.rb
CHANGED
@@ -71,7 +71,7 @@ class Docker::API::Service < Docker::API::Base
|
|
71
71
|
# @see https://docs.docker.com/engine/api/v1.40/#operation/ServiceDelete
|
72
72
|
#
|
73
73
|
# @param name [String]: The ID or name of the service.
|
74
|
-
def
|
74
|
+
def remove name
|
75
75
|
@connection.delete(build_path("/services/#{name}"))
|
76
76
|
end
|
77
77
|
end
|
data/lib/docker/api/version.rb
CHANGED
data/lib/dockerapi.rb
CHANGED
@@ -4,7 +4,6 @@ require "base64"
|
|
4
4
|
require "fileutils"
|
5
5
|
|
6
6
|
require "docker/api/version"
|
7
|
-
require "docker/api/error"
|
8
7
|
require "docker/api/connection"
|
9
8
|
require "docker/api/response"
|
10
9
|
require "docker/api/base"
|
@@ -44,144 +43,6 @@ module Docker
|
|
44
43
|
@@print_response_to_stdout = bool
|
45
44
|
end
|
46
45
|
self.print_response_to_stdout = false
|
47
|
-
|
48
|
-
##
|
49
|
-
# Valid values for parameter validations.
|
50
|
-
VALID_PARAMS = {
|
51
|
-
"Docker::API::Image" => {
|
52
|
-
"build" => [:dockerfile, :t, :extrahosts, :remote, :q, :nocache, :cachefrom, :pull, :rm, :forcerm, :memory, :memswap, :cpushares, :cpusetcpus, :cpuperiod, :cpuquota, :buildargs, :shmsize, :squash, :labels, :networkmode, :platform, :target, :outputs],
|
53
|
-
"prune" => [:filters],
|
54
|
-
"list" => [:all, :filters, "shared-size", :digests],
|
55
|
-
"search" => [:term, :limit, :filters],
|
56
|
-
"tag" => [:repo, :tag],
|
57
|
-
"remove" => [:force, :noprune],
|
58
|
-
"import" => [:quiet],
|
59
|
-
"push" => [:tag],
|
60
|
-
"commit" => [:container, :repo, :tag, :comment, :author, :pause, :changes],
|
61
|
-
"create" => [:fromImage, :fromSrc, :repo, :tag, :message, :changes, :platform],
|
62
|
-
"delete_cache" => [:all, "keep-storage", :filters]
|
63
|
-
},
|
64
|
-
"Docker::API::Container" => {
|
65
|
-
"list" => [:all, :limit, :size, :filters],
|
66
|
-
"details" => [:size],
|
67
|
-
"top" => [:ps_args],
|
68
|
-
"start" => [:detachKeys],
|
69
|
-
"stop" => [:signal, :t],
|
70
|
-
"restart" => [:signal, :t],
|
71
|
-
"kill" => [:signal],
|
72
|
-
"wait" => [:condition],
|
73
|
-
"rename" => [:name],
|
74
|
-
"resize" => [:w, :h],
|
75
|
-
"prune" => [:filters],
|
76
|
-
"remove" => [:v, :force, :link],
|
77
|
-
"logs" => [:follow, :stdout, :stderr, :since, :until, :timestamps, :tail],
|
78
|
-
"attach" => [:detachKeys, :logs, :stream, :stdin, :stdout, :stderr],
|
79
|
-
"stats" => [:stream, "one-shot"],
|
80
|
-
"get_archive" => [:path],
|
81
|
-
"put_archive" => [:path, :noOverwriteDirNonDir, :copyUIDGID],
|
82
|
-
"create" => [:name, :platform]
|
83
|
-
},
|
84
|
-
"Docker::API::Volume" => {
|
85
|
-
"list" => [:filters],
|
86
|
-
"remove" => [:force],
|
87
|
-
"prune" => [:filters]
|
88
|
-
},
|
89
|
-
"Docker::API::Network" => {
|
90
|
-
"list" => [:filters],
|
91
|
-
"details" => [:verbose, :scope],
|
92
|
-
"prune" => [:filters]
|
93
|
-
},
|
94
|
-
"Docker::API::System" => {
|
95
|
-
"events" => [:since, :until, :filters],
|
96
|
-
"df" => [:type]
|
97
|
-
},
|
98
|
-
"Docker::API::Exec" => {
|
99
|
-
"resize" => [:w, :h]
|
100
|
-
},
|
101
|
-
"Docker::API::Swarm" => {
|
102
|
-
"leave" => [:force],
|
103
|
-
"update" => [:version, :rotateWorkerToken, :rotateManagerToken, :rotateManagerUnlockKey]
|
104
|
-
},
|
105
|
-
"Docker::API::Node" => {
|
106
|
-
"list" => [:filters],
|
107
|
-
"update" => [:version],
|
108
|
-
"delete" => [:force]
|
109
|
-
},
|
110
|
-
"Docker::API::Service" => {
|
111
|
-
"list" => [:filters, :status],
|
112
|
-
"update" => [:version, :registryAuthFrom, :rollback],
|
113
|
-
"details" => [:insertDefaults],
|
114
|
-
"logs" => [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail]
|
115
|
-
},
|
116
|
-
"Docker::API::Secret" => {
|
117
|
-
"list" => [:filters],
|
118
|
-
"update" => [:version]
|
119
|
-
},
|
120
|
-
"Docker::API::Task" => {
|
121
|
-
"list" => [:filters],
|
122
|
-
"logs" => [:details, :follow, :stdout, :stderr, :since, :timestamps, :tail]
|
123
|
-
},
|
124
|
-
"Docker::API::Plugin" => {
|
125
|
-
"list" => [:filters],
|
126
|
-
"privileges" => [:remote],
|
127
|
-
"install" => [:remote, :name],
|
128
|
-
"remove" => [:force],
|
129
|
-
"enable" => [:timeout],
|
130
|
-
"upgrade" => [:remote]
|
131
|
-
},
|
132
|
-
"Docker::API::Config" => {
|
133
|
-
"list" => [:filters],
|
134
|
-
"update" => [:version]
|
135
|
-
}
|
136
|
-
}
|
137
|
-
|
138
|
-
##
|
139
|
-
# Valid values for request body validations.
|
140
|
-
VALID_BODY = {
|
141
|
-
"Docker::API::Image" => {
|
142
|
-
"commit" => [:Hostname, :Domainname, :User, :AttachStdin, :AttachStdout, :AttachStderr, :ExposedPorts, :Tty, :OpenStdin, :StdinOnce, :Env, :Cmd, :HealthCheck, :ArgsEscaped, :Image, :Volumes, :WorkingDir, :Entrypoint, :NetworkDisabled, :MacAddress, :OnBuild, :Labels, :StopSignal, :StopTimeout, :Shell]
|
143
|
-
},
|
144
|
-
"Docker::API::Container" => {
|
145
|
-
"create" => [:Hostname,:Domainname,:User,:AttachStdin,:AttachStdout,:AttachStderr,:ExposedPorts,:Tty,:OpenStdin,:StdinOnce,:Env,:Cmd,:HealthCheck,:ArgsEscaped,:Image,:Volumes,:WorkingDir,:Entrypoint,:NetworkDisabled,:MacAddress,:OnBuild,:Labels,:StopSignal,:StopTimeout,:Shell,:HostConfig,:NetworkingConfig],
|
146
|
-
"update" => [:CpuShares, :Memory, :CgroupParent, :BlkioWeight, :BlkioWeightDevice, :BlkioDeviceReadBps, :BlkioDeviceWriteBps, :BlkioDeviceReadIOps, :BlkioDeviceWriteIOps, :CpuPeriod, :CpuQuota, :CpuRealtimePeriod, :CpuRealtimeRuntime, :CpusetCpus, :CpusetMems, :Devices, :DeviceCgroupRules, :DeviceRequest, :Memory, :KernelMemoryTCP, :MemoryReservation, :MemorySwap, :MemorySwappiness, :NanoCPUs, :OomKillDisable, :Init, :PidsLimit, :ULimits, :CpuCount, :CpuPercent, :IOMaximumIOps, :IOMaximumBandwidth, :RestartPolicy]
|
147
|
-
},
|
148
|
-
"Docker::API::Volume" => {
|
149
|
-
"create" => [:Name, :Driver, :DriverOpts, :Labels, :ClusterVolumeSpec]
|
150
|
-
},
|
151
|
-
"Docker::API::Network" => {
|
152
|
-
"create" => [:Name, :CheckDuplicate, :Driver, :Internal, :Attachable, :Ingress, :IPAM, :EnableIPv6, :Options, :Labels],
|
153
|
-
"connect" => [:Container, :EndpointConfig],
|
154
|
-
"disconnect" => [:Container, :Force]
|
155
|
-
},
|
156
|
-
"Docker::API::System" => {
|
157
|
-
"auth" => [:username, :password, :email, :serveraddress, :identitytoken]
|
158
|
-
},
|
159
|
-
"Docker::API::Exec" => {
|
160
|
-
"create" => [:AttachStdin, :AttachStdout, :AttachStderr, :ConsoleSize, :DetachKeys, :Tty, :Env, :Cmd, :Privileged, :User, :WorkingDir],
|
161
|
-
"start" => [:Detach, :Tty, :ConsoleSize]
|
162
|
-
},
|
163
|
-
"Docker::API::Swarm" => {
|
164
|
-
"init" => [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :DataPathPort, :DefaultAddrPool, :ForceNewCluster, :SubnetSize, :Spec],
|
165
|
-
"update" => [:Name, :Labels, :Orchestration, :Raft, :Dispatcher, :CAConfig, :EncryptionConfig, :TaskDefaults],
|
166
|
-
"unlock" => [:UnlockKey],
|
167
|
-
"join" => [:ListenAddr, :AdvertiseAddr, :DataPathAddr, :RemoteAddrs, :JoinToken]
|
168
|
-
},
|
169
|
-
"Docker::API::Node" => {
|
170
|
-
"update" => [:Name, :Labels, :Role, :Availability]
|
171
|
-
},
|
172
|
-
"Docker::API::Service" => {
|
173
|
-
"create" => [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec],
|
174
|
-
"update" => [:Name, :Labels, :TaskTemplate, :Mode, :UpdateConfig, :RollbackConfig, :Networks, :EndpointSpec]
|
175
|
-
},
|
176
|
-
"Docker::API::Secret" => {
|
177
|
-
"create" => [:Name, :Labels, :Data, :Driver, :Templating],
|
178
|
-
"update" => [:Name, :Labels, :Data, :Driver, :Templating]
|
179
|
-
},
|
180
|
-
"Docker::API::Config" => {
|
181
|
-
"create" => [:Name, :Labels, :Data, :Templating],
|
182
|
-
"update" => [:Name, :Labels, :Data, :Templating]
|
183
|
-
}
|
184
|
-
}
|
185
46
|
|
186
47
|
end
|
187
48
|
end
|
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.22.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: 2025-08-
|
11
|
+
date: 2025-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: base64
|
@@ -68,7 +68,6 @@ files:
|
|
68
68
|
- lib/docker/api/config.rb
|
69
69
|
- lib/docker/api/connection.rb
|
70
70
|
- lib/docker/api/container.rb
|
71
|
-
- lib/docker/api/error.rb
|
72
71
|
- lib/docker/api/exec.rb
|
73
72
|
- lib/docker/api/image.rb
|
74
73
|
- lib/docker/api/network.rb
|
data/lib/docker/api/error.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Docker
|
2
|
-
module API
|
3
|
-
|
4
|
-
##
|
5
|
-
# This class represents a validation error.
|
6
|
-
class ValidationError < StandardError
|
7
|
-
|
8
|
-
##
|
9
|
-
# @params permitted [Array]: permitted values.
|
10
|
-
# @params unpermitted [Array]: unpermitted values.
|
11
|
-
def initialize permitted, unpermitted
|
12
|
-
super("Unpermitted options found: #{unpermitted.to_s}. Permitted are #{permitted.to_s}")
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
##
|
17
|
-
# This class represents a parameter validation error.
|
18
|
-
class InvalidParameter < Docker::API::ValidationError; end
|
19
|
-
|
20
|
-
##
|
21
|
-
# This class represents a request body validation error.
|
22
|
-
class InvalidRequestBody < Docker::API::ValidationError; end
|
23
|
-
|
24
|
-
##
|
25
|
-
# This class represents a generic error.
|
26
|
-
class Error < StandardError
|
27
|
-
def initialize msg = "Error without specific message"
|
28
|
-
super(msg)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|