dockit 1.5.0 → 1.8.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
  SHA1:
3
- metadata.gz: 4c40987081b98c965edfea96bb2a0cc7ab63af9d
4
- data.tar.gz: 0d971302e111c506db391ca58dd645639c026c14
3
+ metadata.gz: ef7365a09071c0358f23ed17ed670b15bd9f3f91
4
+ data.tar.gz: 062246eb13c406ba75125f815d95b45b0bc17268
5
5
  SHA512:
6
- metadata.gz: 8134542caaba7a54ecc86af187e00dcb90961bd7b86c7be612a6f2dd960e1ac6a1a146ea0ad7a1a5117a0d079ce1479bbd9270769810ec5bdc9d3ab66cd16e54
7
- data.tar.gz: 9de444276285f5bea7eb2b10ea85a5d5b6b60585836a2fd53adde70820d3246c84384fdade0b5e37d888d028143c9a6714a51a4eabd3a78f2ef80b475ea7bbeb
6
+ metadata.gz: d71b2c9f2af87dd739037fe54dee9de742b4de441f47f5f83c7e21381a6ce14b60a39f046e855794a825445dc64ddb2e84d134e28eb84a836c84c71ef513578e
7
+ data.tar.gz: 71fdb7a5879d9ec895bfe9f60315d7720d020b11ba76e27d761e9b94738be8624e621152303c0ba52d8adb164f2632ef5abac8a02a28cb752f3eb716b0e2c746
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.0
1
+ 1.8.0
data/lib/dockit.rb CHANGED
@@ -16,6 +16,26 @@ module Dockit
16
16
  def debug(msg)
17
17
  $stderr.puts "DEBUG: " + msg.join(' ')
18
18
  end
19
+
20
+ def self.print_chunk(chunk)
21
+ begin
22
+ chunk = JSON.parse(chunk)
23
+ rescue Docker::Error::UnexpectedResponseError => e
24
+ $stderr.puts "Response parse error:", e.message, chunk
25
+ end
26
+
27
+ progress = chunk['progress']
28
+ id = progress ? '' : chunk['id']
29
+ $stdout.puts(
30
+ if chunk['errorDetail']
31
+ 'ERROR: ' + chunk['errorDetail']['message']
32
+ elsif chunk['stream']
33
+ chunk['stream']
34
+ else
35
+ [chunk['status'], id, progress, progress ? "\r" : "\n"].join(' ')
36
+ end
37
+ )
38
+ end
19
39
  end
20
40
 
21
41
  # This class encapsulates the environment used in the Dockit cli.
data/lib/dockit/cli.rb CHANGED
@@ -42,7 +42,7 @@ class Default < Thor
42
42
  class_option :locals, type: :hash, aliases: ['l'],
43
43
  banner: "key:value [key:value ...]",
44
44
  desc: "variables to pass to yaml file."
45
- class_option :timeout, type: :numeric, desc: 'Timeout for excon', default: 60
45
+ class_option :timeout, type: :numeric, desc: 'Timeout for excon', default: 180
46
46
 
47
47
  def initialize(*args)
48
48
  super
@@ -52,7 +52,7 @@ class Default < Thor
52
52
  Docker.options[:read_timeout] = options.timeout
53
53
 
54
54
  unless @@root_echoed
55
- puts "Project root: #{dockit.root}"
55
+ say "Project root: #{dockit.root}", :red
56
56
  @@root_echoed=true
57
57
  end
58
58
  end
@@ -125,10 +125,16 @@ class Default < Thor
125
125
  option :containers, type: :boolean, default: true , desc: "remove exited containers"
126
126
  option :volumes , type: :boolean, default: true , desc: 'remove dangling volumes'
127
127
  option :force , type: :boolean, default: false, desc: "stop and remove all"
128
+ option 'except-containers', type: :array, desc: "container names to leave if :force", aliases: %[C]
129
+ option 'except-images', type: :array, desc: "image tags (name:version) to leave if :force", aliases: %[I]
130
+
128
131
  def cleanup
129
132
  force = options[:force]
130
- Dockit::Container.clean(force: force) if options[:containers]
131
- Dockit::Image.clean(force: force) if options[:images]
133
+ Dockit::Container.clean(
134
+ force: force, except: options['except-containers']) if options[:containers]
135
+
136
+ Dockit::Image.clean(
137
+ force: force, except: options['except-images']) if options[:images]
132
138
 
133
139
  if options[:volumes] && Docker.version['ApiVersion'].to_f >= 1.21
134
140
  Dockit::Volume.clean
@@ -171,10 +177,30 @@ class Default < Thor
171
177
  desc 'git-build', 'build from git (gem) repository'
172
178
  option :branch, desc: '<tree-ish> git reference', default: 'master'
173
179
  option :gem, type: :boolean, desc: "update Gemfiles export"
180
+ option :package, type: :boolean, desc: "update package config export"
181
+ long_desc <<-LONGDESC
182
+ Dockit.yaml keys used:
183
+ \x5 repos_path: optional treeish path
184
+ \x5 repos: repository location
185
+ \x5 package: optional (default 'Gemfile*')
186
+
187
+ `dockit git-build` will export {branch}:repos_path from the
188
+ repository location specified in the :repos key to 'repos.tar.gz'
189
+
190
+ The '--package' option will export the files in the :package key (or
191
+ Gemfile*) in Dockit.yaml separately to 'package.tar.gz'. This is docker
192
+ best practice for building rails apps.
193
+
194
+ *Note* The default (Gemfile*) will be removed in version 2.0.
195
+
196
+ The deprecated '--gem' option is will export the packages to
197
+ 'gemfile.tar.gz'.
198
+ LONGDESC
199
+
174
200
  def git_build(service=nil)
175
201
  exec(service) do |s|
176
202
  unless repos = s.config.get(:repos)
177
- say "'repos' not defined in config file. Exiting",:red
203
+ say "'repos' not defined in config file. Exiting", :red
178
204
  exit 1
179
205
  end
180
206
  path = s.config.get(:repos_path)
@@ -185,10 +211,12 @@ class Default < Thor
185
211
  end
186
212
  say "Exporting in #{Dir.pwd}", :green
187
213
  say "<- #{repos} #{treeish}", :green
188
- if options.gem
189
- # grab the Gemfiles separately for the bundler Dockerfile hack
190
- say "-> Gemfiles", :green
191
- export(repos, treeish, 'gemfile.tar.gz', 'Gemfile*')
214
+
215
+ if options.gem || options.package
216
+ packages = s.config.get(:package) || 'Gemfile*'
217
+ archive = options.gem ? 'gemfile.tar.gz' : 'package.tar.gz'
218
+ say "-> #{archive}", :green
219
+ export(repos, treeish, archive, packages)
192
220
  end
193
221
 
194
222
  say "-> repos.tar.gz", :green
@@ -7,13 +7,20 @@ module Dockit
7
7
  Docker::Container.all(all: all, filters: JSON.dump(filters))
8
8
  end
9
9
 
10
- def clean(force: false)
10
+ def clean(force: false, except: [])
11
11
  puts "Containers..."
12
+ except = (except||[]).map { |e| "/#{e}"}
13
+
12
14
  list(
13
15
  all: force,
14
16
  filters: force ? nil : {status: [:exited]}
15
17
  ).each do |container|
18
+ names = container.info['Names']
16
19
  puts " #{container.id}"
20
+ if (names & except).count > 0
21
+ puts " ... skipping #{names}"
22
+ next
23
+ end
17
24
  container.delete(force: true, v: force)
18
25
  end
19
26
  end
data/lib/dockit/image.rb CHANGED
@@ -14,16 +14,16 @@ module Dockit
14
14
  end
15
15
  repos = config['t']
16
16
  puts "Building #{repos}"
17
- image = Docker::Image.build_from_dir('.', config) do |chunk|
18
- begin
19
- chunk = JSON.parse(chunk)
20
- progress = chunk['progress']
21
- id = progress ? '' : chunk['id']
22
- print chunk['stream'] ? chunk['stream'] :
23
- [chunk['status'], id, progress, progress ? "\r" : "\n"].join(' ')
24
- rescue
25
- puts chunk
17
+ begin
18
+ image = Docker::Image.build_from_dir('.', config) do |chunk|
19
+ Dockit::Log.print_chunk(chunk)
26
20
  end
21
+ rescue Docker::Error::TimeoutError => e
22
+ $stderr.puts '* Read timeout, try again with a larger "--timeout"'
23
+ exit 1
24
+ rescue Docker::Error::UnexpectedResponseError => e
25
+ $stderr.puts 'Build error, exiting.'
26
+ exit 1
27
27
  end
28
28
 
29
29
  image
@@ -33,13 +33,20 @@ module Dockit
33
33
  Docker::Image.get(name)
34
34
  end
35
35
 
36
- def clean(force: false)
36
+ def clean(force: false, except: [])
37
+ except ||= []
37
38
  puts "Images..."
38
39
  list(
39
40
  all: force,
40
41
  filters: force ? nil : {dangling: ['true']}
41
42
  ).each do |image|
43
+ names = image.info["RepoTags"]
42
44
  puts " #{image.id}"
45
+ if (names & except).count > 0
46
+ puts " ... skipping #{names}"
47
+ next
48
+ end
49
+
43
50
  image.remove(force: true)
44
51
  end
45
52
  end
@@ -61,14 +61,10 @@ module Dockit
61
61
  end
62
62
 
63
63
  name = "#{registry}/#{repo}"
64
- image = Docker::Image.create(
65
- fromImage: name) do |chunk|
66
- chunk = JSON.parse(chunk)
67
- progress = chunk['progress']
68
- id = progress ? '' : chunk['id']
69
- print chunk['stream'] ? chunk['stream'] :
70
- [chunk['status'], id, progress, progress ? "\r" : "\n"].join(' ')
64
+ image = Docker::Image.create(fromImage: name) do |chunk|
65
+ Dockit::Log::print_chunk(chunk)
71
66
  end
67
+
72
68
  puts "Tagging #{name} as #{repo}:#{tag||'latest'}"
73
69
  image.tag(repo: repo, tag: tag, force: force)
74
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rick Frankel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-23 00:00:00.000000000 Z
11
+ date: 2016-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler