dctl_rb 0.6.2 → 0.7.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/Gemfile.lock +2 -2
- data/exe/dctl +41 -6
- data/lib/dctl/main.rb +11 -2
- data/lib/dctl/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 119ea41f3d1d29e0442e04bb4dc05bec0a100ca85cd990ea8b57a2bb389437d4
|
4
|
+
data.tar.gz: 1be5b2cc464cdced2b932e8b06821bb7202453749e0bc5fa7049b1623e064d06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 352e33ad3787e18c7ac195ab4403766c5423eeba52c0613c24c651e2eff6ff4266123a97f0708bf2c5552dece773cd6d2ba9c45eb5c0ac2452ff407ccaab233e
|
7
|
+
data.tar.gz: 31cbffda220c6eee2d8e38ac7137a15ce48e761d979bb5c1dfef984bc930d4c5a924642fe60fd9664a137229cd97a45bcbdb27a5b2882c4bbb55fc11371a269f
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dctl_rb (0.
|
4
|
+
dctl_rb (0.7.0)
|
5
5
|
config (>= 1, < 2)
|
6
6
|
rainbow (>= 2.2, < 3)
|
7
7
|
thor (~> 0.17, >= 0.17.0)
|
@@ -27,7 +27,7 @@ GEM
|
|
27
27
|
dry-container (0.6.0)
|
28
28
|
concurrent-ruby (~> 1.0)
|
29
29
|
dry-configurable (~> 0.1, >= 0.1.3)
|
30
|
-
dry-core (0.4.
|
30
|
+
dry-core (0.4.2)
|
31
31
|
concurrent-ruby (~> 1.0)
|
32
32
|
dry-equalizer (0.2.0)
|
33
33
|
dry-logic (0.4.2)
|
data/exe/dctl
CHANGED
@@ -5,9 +5,15 @@ require "thor"
|
|
5
5
|
require "pty"
|
6
6
|
require "rainbow"
|
7
7
|
require "config"
|
8
|
+
require "open3"
|
8
9
|
|
9
10
|
module Dctl
|
10
11
|
class Cli < Thor
|
12
|
+
|
13
|
+
ERROR_COLOR = :red
|
14
|
+
SUCCESS_COLOR = :green
|
15
|
+
CMD_COLOR = :dimgray
|
16
|
+
|
11
17
|
class_option :env, default: "dev", type: :string
|
12
18
|
|
13
19
|
desc "build", "Build images. Pass image name to build a specific one; otherwise builds all"
|
@@ -150,15 +156,44 @@ module Dctl
|
|
150
156
|
end
|
151
157
|
|
152
158
|
desc "cleanup", "cleans up dangling docker images"
|
159
|
+
option :keep, type: :numeric, default: -1, desc: "How many old images to keep around, e.g. \"3\" will keep the current version plus the three next most recent. Use -1 to keep all."
|
153
160
|
def cleanup
|
154
|
-
|
161
|
+
to_remove = []
|
162
|
+
to_remove += `#{sudo}docker images --filter dangling=true -q`.split("\n")
|
163
|
+
|
164
|
+
if options[:keep] != -1
|
165
|
+
keep_last = options[:keep]
|
166
|
+
dctl = Dctl::Main.new env: options[:env]
|
167
|
+
dctl.expand_images.each do |image|
|
168
|
+
current_version = dctl.current_version_for_image(image).to_i
|
169
|
+
keep_after_tag = current_version - keep_last
|
170
|
+
|
171
|
+
next if keep_after_tag < 0
|
172
|
+
|
173
|
+
cmd = "#{sudo}docker images #{dctl.image_tag(image, version: nil)} --filter before=#{dctl.image_tag(image, version: keep_after_tag)} -q"
|
174
|
+
puts Rainbow(cmd).fg CMD_COLOR
|
175
|
+
stdout, stderr, status = Open3.capture3(cmd)
|
176
|
+
if status.success?
|
177
|
+
to_remove += stdout.split("\n")
|
178
|
+
elsif stderr.include? "No such image"
|
179
|
+
# Specified before filter did not exist on current machine. Loop
|
180
|
+
# through all old images to manually reconstruct.
|
181
|
+
Array(0..keep_after_tag).each do |version|
|
182
|
+
cmd = "#{sudo}docker images #{dctl.image_tag(image, version: version)} -q"
|
183
|
+
puts Rainbow(cmd).fg CMD_COLOR
|
184
|
+
image_id = `#{cmd}`.strip
|
185
|
+
to_remove << image_id unless image_id.empty?
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
155
190
|
|
156
|
-
if
|
157
|
-
puts "No images to cleanup. Yay!"
|
191
|
+
if to_remove.none?
|
192
|
+
puts Rainbow("No images to cleanup. Yay!").fg SUCCESS_COLOR
|
158
193
|
exit 0
|
159
194
|
end
|
160
195
|
|
161
|
-
stream_output "#{sudo}docker rmi -f #{
|
196
|
+
stream_output "#{sudo}docker rmi -f #{to_remove.join(" ")}", exec: true
|
162
197
|
end
|
163
198
|
|
164
199
|
desc "bash CONTAINER", "Create a new instance of the given image with a bash prompt"
|
@@ -186,7 +221,7 @@ module Dctl
|
|
186
221
|
container = `#{cmd}`.chomp
|
187
222
|
|
188
223
|
if container.empty?
|
189
|
-
puts Rainbow("No running containers for image #{image}").
|
224
|
+
puts Rainbow("No running containers for image #{image}").fg ERROR_COLOR
|
190
225
|
exit 1
|
191
226
|
end
|
192
227
|
|
@@ -200,7 +235,7 @@ module Dctl
|
|
200
235
|
|
201
236
|
no_commands do
|
202
237
|
def stream_output(string, print_command: true, exec: false)
|
203
|
-
puts string if print_command
|
238
|
+
puts Rainbow(string).fg(CMD_COLOR) if print_command
|
204
239
|
if exec
|
205
240
|
exec string
|
206
241
|
else
|
data/lib/dctl/main.rb
CHANGED
@@ -11,13 +11,22 @@ module Dctl
|
|
11
11
|
# Generate the full tag for the given image, concatenating the org,
|
12
12
|
# project, env, image name, and version.
|
13
13
|
#
|
14
|
+
# Pass `version: nil` to exclude the version portion.
|
15
|
+
#
|
14
16
|
# @example
|
15
17
|
# image_tag("app") # => jutonz/dctl-dev-app:1
|
16
|
-
def image_tag(image, version:
|
18
|
+
def image_tag(image, version: current_version_for_image(image))
|
17
19
|
org = settings.org
|
18
20
|
project = settings.project
|
19
21
|
|
20
|
-
"#{org}/#{project}-#{env}-#{image}
|
22
|
+
tag = "#{org}/#{project}-#{env}-#{image}"
|
23
|
+
tag += ":#{version}" if !version.nil?
|
24
|
+
|
25
|
+
tag
|
26
|
+
end
|
27
|
+
|
28
|
+
def current_version_for_image(image)
|
29
|
+
versions[image]
|
21
30
|
end
|
22
31
|
|
23
32
|
##
|
data/lib/dctl/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dctl_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Toniazzo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|