docker-api 2.1.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/docker/exec.rb +1 -1
- data/lib/docker/image.rb +1 -1
- data/lib/docker/util.rb +45 -16
- data/lib/docker/version.rb +1 -1
- data/lib/excon/middlewares/hijack.rb +4 -2
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bcdc6793c2627d187d2844a679965abf7903c58b89dc26de88f411feb8d0fd6
|
4
|
+
data.tar.gz: 3cc8a8aadeee74ab3ba28b25d147b795dae8aff22e53923a2911f36f7bbc3d5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fb00d23f25120f8341002958a9abedbff05bc27e11d5992308063569a640b9e51c3a492a0fdd00dae15e8f6ddbb62bc8c706b8fbe25d6a7c79719178194b328
|
7
|
+
data.tar.gz: f8fee2e81864164601e6cccd2e3cd3235df383217a2fd0c362a06a9da8448f0ef452306fa6a2d370c02ea95dbe9b9db1669d1ab39cdd4d1b880265fd0e57752d
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
docker-api
|
2
2
|
==========
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/docker-api.svg)](https://badge.fury.io/rb/docker-api) [![
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/docker-api.svg)](https://badge.fury.io/rb/docker-api) [![Code Climate](https://codeclimate.com/github/upserve/docker-api.svg)](https://codeclimate.com/github/upserve/docker-api)
|
4
4
|
|
5
5
|
This gem provides an object-oriented interface to the [Docker Engine API](https://docs.docker.com/develop/sdk/). Every method listed there is implemented. At the time of this writing, docker-api is meant to interface with Docker version 1.4.*
|
6
6
|
|
7
|
-
If you're interested in using Docker to package your apps, we recommend the [dockly](https://github.com/
|
7
|
+
If you're interested in using Docker to package your apps, we recommend the [dockly](https://github.com/upserve/dockly) gem. Dockly provides a simple DSL for describing Docker containers that install as Debian packages and are controlled by upstart scripts.
|
8
8
|
|
9
9
|
Installation
|
10
10
|
------------
|
data/lib/docker/exec.rb
CHANGED
@@ -21,7 +21,7 @@ class Docker::Exec
|
|
21
21
|
container = options.delete('Container')
|
22
22
|
|
23
23
|
# Podman does not attach these by default but does require them to be attached
|
24
|
-
if ::Docker.podman?
|
24
|
+
if ::Docker.podman?(conn)
|
25
25
|
options['AttachStderr'] = true if options['AttachStderr'].nil?
|
26
26
|
options['AttachStdout'] = true if options['AttachStdout'].nil?
|
27
27
|
end
|
data/lib/docker/image.rb
CHANGED
data/lib/docker/util.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
# This module holds shared logic that doesn't really belong anywhere else in the
|
2
4
|
# gem.
|
3
5
|
module Docker::Util
|
4
6
|
# http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm#STANDARD-WILDCARDS
|
5
|
-
GLOB_WILDCARDS = /[\?\*\[\{]/
|
7
|
+
GLOB_WILDCARDS = /[\?\*\[\{\]\}]/
|
6
8
|
|
7
9
|
include Docker::Error
|
8
10
|
|
@@ -142,10 +144,35 @@ module Docker::Util
|
|
142
144
|
File.new(tempfile.path, 'r')
|
143
145
|
end
|
144
146
|
|
147
|
+
|
148
|
+
# return the set of files that form the docker context
|
149
|
+
# implement this logic https://docs.docker.com/engine/reference/builder/#dockerignore-file
|
150
|
+
def docker_context(directory)
|
151
|
+
all_files = glob_all_files(File.join(directory, "**/*"))
|
152
|
+
dockerignore = File.join(directory, '.dockerignore')
|
153
|
+
return all_files unless all_files.include?(dockerignore)
|
154
|
+
|
155
|
+
# Iterate over valid lines, starting with the initial glob as working set
|
156
|
+
File
|
157
|
+
.read(dockerignore) # https://docs.docker.com/engine/reference/builder/#dockerignore-file
|
158
|
+
.each_line # "a newline-separated list of patterns"
|
159
|
+
.map(&:strip) # "A preprocessing step removes leading and trailing whitespace"
|
160
|
+
.reject(&:empty?) # "Lines that are blank after preprocessing are ignored"
|
161
|
+
.reject { |p| p.start_with?('#') } # "if [a line starts with `#`], then this line is considered as a comment"
|
162
|
+
.each_with_object(Set.new(all_files)) do |p, working_set|
|
163
|
+
# determine the pattern (p) and whether it is to be added or removed from context
|
164
|
+
add = p.start_with?("!")
|
165
|
+
# strip leading "!" from pattern p, then prepend the base directory
|
166
|
+
matches = dockerignore_compatible_glob(File.join(directory, add ? p[1..-1] : p))
|
167
|
+
# add or remove the matched items as indicated in the ignore file
|
168
|
+
add ? working_set.merge(matches) : working_set.replace(working_set.difference(matches))
|
169
|
+
end
|
170
|
+
.to_a
|
171
|
+
end
|
172
|
+
|
145
173
|
def create_relative_dir_tar(directory, output)
|
146
174
|
Gem::Package::TarWriter.new(output) do |tar|
|
147
|
-
files =
|
148
|
-
remove_ignored_files!(directory, files)
|
175
|
+
files = docker_context(directory)
|
149
176
|
|
150
177
|
files.each do |prefixed_file_name|
|
151
178
|
stat = File.stat(prefixed_file_name)
|
@@ -259,21 +286,23 @@ module Docker::Util
|
|
259
286
|
}
|
260
287
|
end
|
261
288
|
|
262
|
-
|
263
|
-
|
289
|
+
# do a directory glob that matches .dockerignore behavior
|
290
|
+
# specifically: matched directories are considered a recursive match
|
291
|
+
def dockerignore_compatible_glob(pattern)
|
292
|
+
begin
|
293
|
+
some_dirs, some_files = glob_all_files(pattern).partition { |f| File.directory?(f) }
|
294
|
+
# since all directories will be re-processed with a /**/* glob, we can preemptively
|
295
|
+
# eliminate any whose parent directory is already in this set. This saves significant time.
|
296
|
+
some_files + some_dirs.reject { |d| some_dirs.any? { |pd| d.start_with?(pd) && d != pd } }
|
297
|
+
end.each_with_object(Set.new) do |f, acc|
|
298
|
+
# expand any directories by globbing; flatten results
|
299
|
+
acc.merge(File.directory?(f) ? glob_all_files("#{f}/**/*") : [f])
|
300
|
+
end
|
264
301
|
end
|
265
302
|
|
266
|
-
def
|
267
|
-
|
268
|
-
|
269
|
-
ignored_files(directory, ignore).each { |f| files.delete(f) }
|
303
|
+
def glob_all_files(pattern)
|
304
|
+
# globs of "a_dir/**/*" can return "a_dir/.", so explicitly reject those
|
305
|
+
(Dir.glob(pattern, File::FNM_DOTMATCH) - ['..', '.']).reject { |p| p.end_with?("/.") }
|
270
306
|
end
|
271
307
|
|
272
|
-
def ignored_files(directory, ignore_file)
|
273
|
-
patterns = File.read(ignore_file).split("\n").each(&:strip!)
|
274
|
-
patterns.reject! { |p| p.empty? || p.start_with?('#') }
|
275
|
-
patterns.map! { |p| File.join(directory, p) }
|
276
|
-
patterns.map! { |p| File.directory?(p) ? "#{p}/**/*" : p }
|
277
|
-
patterns.flat_map { |p| p =~ GLOB_WILDCARDS ? glob_all_files(p) : p }
|
278
|
-
end
|
279
308
|
end
|
data/lib/docker/version.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
module Excon
|
2
|
-
VALID_REQUEST_KEYS << :hijack_block
|
3
|
-
|
4
2
|
module Middleware
|
5
3
|
# Hijack is an Excon middleware which parses response headers and then
|
6
4
|
# yields the underlying TCP socket for raw TCP communication (used to
|
7
5
|
# attach to STDIN of containers).
|
8
6
|
class Hijack < Base
|
7
|
+
def self.valid_parameter_keys
|
8
|
+
[:hijack_block].freeze
|
9
|
+
end
|
10
|
+
|
9
11
|
def build_response(status, socket)
|
10
12
|
response = {
|
11
13
|
:body => '',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Swipely, Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.64.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.64.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: multi_json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,11 +175,11 @@ files:
|
|
175
175
|
- lib/docker/version.rb
|
176
176
|
- lib/docker/volume.rb
|
177
177
|
- lib/excon/middlewares/hijack.rb
|
178
|
-
homepage: https://github.com/
|
178
|
+
homepage: https://github.com/upserve/docker-api
|
179
179
|
licenses:
|
180
180
|
- MIT
|
181
181
|
metadata: {}
|
182
|
-
post_install_message:
|
182
|
+
post_install_message:
|
183
183
|
rdoc_options: []
|
184
184
|
require_paths:
|
185
185
|
- lib
|
@@ -194,8 +194,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: '0'
|
196
196
|
requirements: []
|
197
|
-
rubygems_version: 3.
|
198
|
-
signing_key:
|
197
|
+
rubygems_version: 3.1.6
|
198
|
+
signing_key:
|
199
199
|
specification_version: 4
|
200
200
|
summary: A simple REST client for the Docker Remote API
|
201
201
|
test_files: []
|