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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b16ead61448d8d11b0dd15fac8f02c197e14a82c8ddd0efd99014c11bcd5a5e5
4
- data.tar.gz: 5fc03ff9494334810cce174c2c03811895c17fc8e878cf249b072170cabe2207
3
+ metadata.gz: 8bcdc6793c2627d187d2844a679965abf7903c58b89dc26de88f411feb8d0fd6
4
+ data.tar.gz: 3cc8a8aadeee74ab3ba28b25d147b795dae8aff22e53923a2911f36f7bbc3d5d
5
5
  SHA512:
6
- metadata.gz: 7ad6f151a030805183a2caaa9bab7bc8aea830eb34b05b9a6b12c5912ab5beb7e076a952fe01ff967ab16ebe93ab16d7b6cfb7ef4f58ba6f6a89295e1cd54de0
7
- data.tar.gz: 6087ed904eb661a17cbbce783125b6d0f9874920faba071ff07552fc571567ded896772d4c41c9115b23a13e0bab5734d52cb5eb771cc057c638163f395866ee
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) [![travis-ci](https://travis-ci.org/swipely/docker-api.svg?branch=master)](https://travis-ci.org/swipely/docker-api) [![Code Climate](https://codeclimate.com/github/swipely/docker-api.svg)](https://codeclimate.com/github/swipely/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/swipely/dockly) gem. Dockly provides a simple DSL for describing Docker containers that install as Debian packages and are controlled by upstart scripts.
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
@@ -68,7 +68,7 @@ class Docker::Image
68
68
  name = opts.delete(:name)
69
69
 
70
70
  unless name
71
- if ::Docker.podman?
71
+ if ::Docker.podman?(connection)
72
72
  name = self.id.split(':').last
73
73
  else
74
74
  name = self.id
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 = glob_all_files(File.join(directory, "**/*"))
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
- def glob_all_files(pattern)
263
- Dir.glob(pattern, File::FNM_DOTMATCH) - ['..', '.']
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 remove_ignored_files!(directory, files)
267
- ignore = File.join(directory, '.dockerignore')
268
- return unless files.include?(ignore)
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
@@ -1,4 +1,4 @@
1
1
  module Docker
2
2
  # The version of the docker-api gem.
3
- VERSION = '2.1.0'
3
+ VERSION = '2.3.0'
4
4
  end
@@ -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.1.0
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: 2021-03-03 00:00:00.000000000 Z
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.47.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.47.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/swipely/docker-api
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.0.6
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: []