docker-template 0.4.0 → 0.5.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/Rakefile +5 -6
- data/comp/list +0 -1
- data/lib/docker/template.rb +10 -0
- data/lib/docker/template/builder.rb +20 -7
- data/lib/docker/template/cache.rb +26 -18
- data/lib/docker/template/cli.rb +9 -8
- data/lib/docker/template/error.rb +12 -12
- data/lib/docker/template/metadata.rb +24 -3
- data/lib/docker/template/normal.rb +3 -3
- data/lib/docker/template/notify.rb +1 -1
- data/lib/docker/template/parser.rb +25 -6
- data/lib/docker/template/repo.rb +33 -11
- data/lib/docker/template/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b075d40fa03bed4ef57a9a788c53c778a60cb053
|
4
|
+
data.tar.gz: b8183048b12f4547fd711e0e96ac08bc543e3cd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df02551d54168a59d5095d51f0a1f4763a07e4a16c953c40b3b4597c34941b03dc735451e043a30cd434acff0e6184e0cdcd7653b82492ad085bf31df4640f9e
|
7
|
+
data.tar.gz: 0fa1f9443e84aff442fe796df646ab06f44822ebbb1f4397d92b42988539c09b2a3ede58afa8f2bf56e2664cf993d1d51daebc285bc525aa5cc65c70b2827318
|
data/Rakefile
CHANGED
@@ -41,13 +41,13 @@ module CompList
|
|
41
41
|
def normalize_command(command)
|
42
42
|
if command.is_a?(Array)
|
43
43
|
then command.map do |key|
|
44
|
-
key.
|
45
|
-
|
44
|
+
key.tr(
|
45
|
+
"_", "-"
|
46
46
|
)
|
47
47
|
end
|
48
48
|
else
|
49
|
-
command.
|
50
|
-
|
49
|
+
command.tr(
|
50
|
+
"_", "-"
|
51
51
|
)
|
52
52
|
end
|
53
53
|
end
|
@@ -85,8 +85,7 @@ module CompList
|
|
85
85
|
)}"
|
86
86
|
end
|
87
87
|
|
88
|
-
ary
|
89
|
-
opt.aliases
|
88
|
+
ary | opt.aliases
|
90
89
|
end
|
91
90
|
end
|
92
91
|
|
data/comp/list
CHANGED
data/lib/docker/template.rb
CHANGED
@@ -83,3 +83,13 @@ module Docker
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
86
|
+
|
87
|
+
# ----------------------------------------------------------------------------
|
88
|
+
# Trick extras into merging array's into array's for us so users can inherit.
|
89
|
+
# ----------------------------------------------------------------------------
|
90
|
+
|
91
|
+
class Array
|
92
|
+
def deep_merge(new_)
|
93
|
+
self | new_
|
94
|
+
end
|
95
|
+
end
|
@@ -63,10 +63,13 @@ module Docker
|
|
63
63
|
# ----------------------------------------------------------------------
|
64
64
|
|
65
65
|
def aliased_img
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
66
|
+
if alias?
|
67
|
+
then @aliased_img ||= begin
|
68
|
+
Docker::Image.get(
|
69
|
+
aliased_repo ? aliased_repo.to_s : aliased_tag
|
70
|
+
)
|
71
|
+
end
|
72
|
+
end
|
70
73
|
|
71
74
|
rescue Docker::Error::NotFoundError
|
72
75
|
if alias?
|
@@ -137,10 +140,19 @@ module Docker
|
|
137
140
|
alias_setup
|
138
141
|
|
139
142
|
if @repo.buildable?
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
+
if (repo = aliased_repo)
|
144
|
+
aliased = self.class.new(repo)
|
145
|
+
unless aliased_img
|
146
|
+
aliased.build
|
147
|
+
end
|
148
|
+
|
149
|
+
elsif !aliased_img
|
150
|
+
raise(
|
151
|
+
Error::ImageNotFound, aliased_tag
|
152
|
+
)
|
153
|
+
end
|
143
154
|
|
155
|
+
Notify.alias(self)
|
144
156
|
aliased_img.tag(
|
145
157
|
@repo.to_tag_h
|
146
158
|
)
|
@@ -294,6 +306,7 @@ module Docker
|
|
294
306
|
|
295
307
|
# ----------------------------------------------------------------------
|
296
308
|
|
309
|
+
rb_delegate :aliased_tag, :to => "repo.metadata"
|
297
310
|
rb_delegate :aliased_repo, {
|
298
311
|
:to => :repo, :alias_of => :aliased
|
299
312
|
}
|
@@ -14,22 +14,25 @@ module Docker
|
|
14
14
|
# ----------------------------------------------------------------------
|
15
15
|
|
16
16
|
def context(builder, context)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
builder.repo.cache_dir.rm_rf
|
18
|
+
$stderr.puts Simple::Ansi.yellow(format("Copying context for %s", builder.repo))
|
19
|
+
cache_dir = builder.repo.cache_dir
|
20
|
+
cache_dir.parent.mkdir_p
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
22
|
+
readme(builder)
|
23
|
+
context.cp_r(cache_dir.tap(
|
24
|
+
&:rm_rf
|
25
|
+
))
|
26
|
+
end
|
27
|
+
|
28
|
+
# ----------------------------------------------------------------------
|
29
|
+
# rubocop:disable Metrics/LineLength
|
30
|
+
# ----------------------------------------------------------------------
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
def aliased_context(builder)
|
33
|
+
if builder.aliased_repo.cache_dir.exist?
|
34
|
+
$stderr.puts Simple::Ansi.yellow(format("Copying %s context to %s", builder.aliased_repo, builder.repo))
|
35
|
+
builder.aliased_repo.cache_dir.cp_r(builder.repo.cache_dir.tap(
|
33
36
|
&:rm_rf
|
34
37
|
))
|
35
38
|
end
|
@@ -38,13 +41,18 @@ module Docker
|
|
38
41
|
# ----------------------------------------------------------------------
|
39
42
|
# Cleanup the context caches, removing the caches we no longer need.
|
40
43
|
# ----------------------------------------------------------------------
|
44
|
+
# rubocop:enable Metrics/LineLength
|
45
|
+
# ----------------------------------------------------------------------
|
41
46
|
|
42
47
|
def cleanup(repo)
|
43
|
-
repo.cache_dir.parent
|
44
|
-
|
45
|
-
|
48
|
+
cache_dir = repo.cache_dir.parent
|
49
|
+
|
50
|
+
if repo.cacheable? && cache_dir.exist?
|
51
|
+
then cache_dir.children.each do |file|
|
52
|
+
next unless repo.metadata.tags.include?(file.basename)
|
53
|
+
$stdout.puts Simple::Ansi.yellow(format("Removing %s.",
|
46
54
|
file.relative_path_from(Template.root)
|
47
|
-
|
55
|
+
))
|
48
56
|
|
49
57
|
file.rm_rf
|
50
58
|
end
|
data/lib/docker/template/cli.rb
CHANGED
@@ -28,9 +28,9 @@ module Docker
|
|
28
28
|
# ----------------------------------------------------------------------
|
29
29
|
|
30
30
|
def build(*args)
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
with_profiling do
|
32
|
+
Parser.new(args, options).parse.tap { |o| o.map(&:build) } \
|
33
|
+
.uniq(&:name).map(&:clean)
|
34
34
|
end
|
35
35
|
|
36
36
|
rescue Docker::Template::Error::StandardError => e
|
@@ -46,11 +46,13 @@ module Docker
|
|
46
46
|
option :grep, :type => :boolean, :desc => "Make --only a Regexp search."
|
47
47
|
option :only, :type => :string, :desc => "Only a specific repo."
|
48
48
|
|
49
|
+
# ----------------------------------------------------------------------
|
50
|
+
# rubocop:disable Metrics/AbcSize
|
49
51
|
# ----------------------------------------------------------------------
|
50
52
|
|
51
53
|
def list
|
52
54
|
Parser.new([], {}).parse.each do |repo|
|
53
|
-
repo_s =
|
55
|
+
repo_s = repo.to_s.gsub(/^[^\/]+\//, "")
|
54
56
|
next unless (only.is_a?(Regexp) && repo_s =~ only) \
|
55
57
|
|| (only && repo_s == only) || !only
|
56
58
|
|
@@ -58,12 +60,10 @@ module Docker
|
|
58
60
|
$stderr.print " -> ", repo.aliased.to_s, "\n" if repo.alias?
|
59
61
|
$stderr.puts unless repo.alias?
|
60
62
|
end
|
61
|
-
rescue Docker::Template::Error::StandardError => e
|
62
|
-
$stderr.puts Simple::Ansi.red(e.message)
|
63
|
-
exit e.respond_to?(:status) \
|
64
|
-
? e.status : 1
|
65
63
|
end
|
66
64
|
|
65
|
+
# ----------------------------------------------------------------------
|
66
|
+
# rubocop:enable Metrics/AbcSize
|
67
67
|
# ----------------------------------------------------------------------
|
68
68
|
|
69
69
|
no_tasks do
|
@@ -94,6 +94,7 @@ module Docker
|
|
94
94
|
MemoryProfiler.report(:top => 10_240) { yield }.pretty_print({\
|
95
95
|
:to_file => "mem.txt"
|
96
96
|
})
|
97
|
+
|
97
98
|
rescue LoadError
|
98
99
|
$stderr.puts "The gem 'memory_profiler' wasn't found."
|
99
100
|
$stderr.puts "You can install it with `gem install memory_profiler'"
|
@@ -15,8 +15,8 @@ module Docker
|
|
15
15
|
|
16
16
|
class PlaceHolderError < StandardError
|
17
17
|
def initialize(error)
|
18
|
-
super
|
19
|
-
error
|
18
|
+
super format(
|
19
|
+
"PLACEHOLDER ERROR: %s", error
|
20
20
|
)
|
21
21
|
end
|
22
22
|
end
|
@@ -74,16 +74,6 @@ module Docker
|
|
74
74
|
|
75
75
|
# ----------------------------------------------------------------------
|
76
76
|
|
77
|
-
class NoHookExists < StandardError
|
78
|
-
def initialize(base, point)
|
79
|
-
super "Unknown hook base '#{base}' or hook point '#{
|
80
|
-
point
|
81
|
-
}'"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# ----------------------------------------------------------------------
|
86
|
-
|
87
77
|
class NoRootMetadata < StandardError
|
88
78
|
def initialize
|
89
79
|
super "Metadata without the root flag must provide the root_metadata."
|
@@ -124,6 +114,16 @@ module Docker
|
|
124
114
|
}"
|
125
115
|
end
|
126
116
|
end
|
117
|
+
|
118
|
+
# ----------------------------------------------------------------------
|
119
|
+
|
120
|
+
class ImageNotFound < StandardError
|
121
|
+
def initialize(image)
|
122
|
+
super "Unable to find the image #{
|
123
|
+
image
|
124
|
+
}"
|
125
|
+
end
|
126
|
+
end
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
@@ -60,6 +60,8 @@ module Docker
|
|
60
60
|
# })
|
61
61
|
# ```
|
62
62
|
# ----------------------------------------------------------------------
|
63
|
+
# rubocop:disable Metrics/AbcSize
|
64
|
+
# ----------------------------------------------------------------------
|
63
65
|
|
64
66
|
def initialize(overrides, root: nil)
|
65
67
|
if root.is_a?(self.class)
|
@@ -89,6 +91,8 @@ module Docker
|
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
94
|
+
# ----------------------------------------------------------------------
|
95
|
+
# rubocop:enable Metrics/AbcSize
|
92
96
|
# ----------------------------------------------------------------------
|
93
97
|
|
94
98
|
def _shas
|
@@ -128,12 +132,13 @@ module Docker
|
|
128
132
|
end
|
129
133
|
end
|
130
134
|
|
131
|
-
true
|
132
135
|
else
|
133
|
-
@data.include?(
|
136
|
+
return @data.include?(
|
134
137
|
val
|
135
138
|
)
|
136
139
|
end
|
140
|
+
|
141
|
+
true
|
137
142
|
end
|
138
143
|
|
139
144
|
# ----------------------------------------------------------------------
|
@@ -257,6 +262,9 @@ module Docker
|
|
257
262
|
# --------------------------------------------------------------------
|
258
263
|
# Fallback, determining which route is the best. Tag > Group > All.
|
259
264
|
# --------------------------------------------------------------------
|
265
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
266
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
267
|
+
# ----------------------------------------------------------------------
|
260
268
|
|
261
269
|
def fallback(group: current_group, tag: current_tag, query_data: @data)
|
262
270
|
if query_data.is_a?(self.class)
|
@@ -277,6 +285,9 @@ module Docker
|
|
277
285
|
end
|
278
286
|
|
279
287
|
# --------------------------------------------------------------------
|
288
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
289
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
290
|
+
# ----------------------------------------------------------------------
|
280
291
|
|
281
292
|
def for_all(query_data: @data)
|
282
293
|
if query_data.is_a?(self.class)
|
@@ -430,6 +441,9 @@ module Docker
|
|
430
441
|
end
|
431
442
|
end
|
432
443
|
|
444
|
+
# ----------------------------------------------------------------------
|
445
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
446
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
433
447
|
# ----------------------------------------------------------------------
|
434
448
|
|
435
449
|
def to_a(raw: false, shell: false)
|
@@ -450,11 +464,16 @@ module Docker
|
|
450
464
|
end
|
451
465
|
end
|
452
466
|
|
467
|
+
# ----------------------------------------------------------------------
|
468
|
+
# rubocop:eanble Metrics/CyclomaticComplexity
|
469
|
+
# rubocop:eanble Metrics/PerceivedComplexity
|
453
470
|
# ----------------------------------------------------------------------
|
454
471
|
# Convert a `Metadata' into a normal hash. If `self' is queryable then
|
455
472
|
# we go and start merging values smartly. This means that we will merge
|
456
473
|
# all the arrays into one another and we will merge hashes into hashes.
|
457
474
|
# ----------------------------------------------------------------------
|
475
|
+
# rubocop:disable Metrics/AbcSize
|
476
|
+
# ----------------------------------------------------------------------
|
458
477
|
|
459
478
|
def to_h(raw: false)
|
460
479
|
return @data.to_h if raw || !queryable? || !mergeable_hash?
|
@@ -487,6 +506,8 @@ module Docker
|
|
487
506
|
end
|
488
507
|
end
|
489
508
|
|
509
|
+
# ----------------------------------------------------------------------
|
510
|
+
# rubocop:enable Metrics/AbcSize
|
490
511
|
# ----------------------------------------------------------------------
|
491
512
|
|
492
513
|
def mergeable_hash?(key = nil)
|
@@ -564,7 +585,7 @@ module Docker
|
|
564
585
|
|
565
586
|
private
|
566
587
|
def string_wrapper(obj, shell: false)
|
567
|
-
return obj if obj == true
|
588
|
+
return obj if obj == true || obj == false || obj.nil?
|
568
589
|
return obj.to_s(:shell => shell) if obj.is_a?(self.class)
|
569
590
|
!obj.is_a?(Array) ? obj.to_s : obj.join(
|
570
591
|
"\s"
|
@@ -32,6 +32,8 @@ module Docker
|
|
32
32
|
then raise Error::RepoNotFound
|
33
33
|
end
|
34
34
|
|
35
|
+
# ----------------------------------------------------------------------
|
36
|
+
# rubocop:disable Metrics/AbcSize
|
35
37
|
# ----------------------------------------------------------------------
|
36
38
|
|
37
39
|
def parse
|
@@ -42,14 +44,21 @@ module Docker
|
|
42
44
|
}
|
43
45
|
|
44
46
|
all.each do |v|
|
45
|
-
hash = to_repo_hash(
|
47
|
+
hash = self.class.to_repo_hash(
|
48
|
+
v
|
49
|
+
)
|
50
|
+
|
46
51
|
if hash.empty?
|
47
|
-
raise
|
52
|
+
raise(Docker::Template::Error::BadRepoName,
|
53
|
+
v
|
54
|
+
)
|
48
55
|
|
49
56
|
else
|
50
57
|
Repo.new(hash, @argv).to_repos.each do |r|
|
51
|
-
r.alias?? repos[:aliases] << r :
|
52
|
-
|
58
|
+
r.alias?? repos[:aliases] << r : \
|
59
|
+
if r.builder.scratch?
|
60
|
+
repos[:scratch] << r else repos[:simple] << r
|
61
|
+
end
|
53
62
|
end
|
54
63
|
end
|
55
64
|
end
|
@@ -59,10 +68,11 @@ module Docker
|
|
59
68
|
)
|
60
69
|
end
|
61
70
|
|
71
|
+
# ----------------------------------------------------------------------
|
72
|
+
# rubocop:enable Metrics/AbcSize
|
62
73
|
# ----------------------------------------------------------------------
|
63
74
|
|
64
|
-
|
65
|
-
def to_repo_hash(val)
|
75
|
+
def self.to_repo_hash(val)
|
66
76
|
data = val.split(SPLIT_REGEXP)
|
67
77
|
|
68
78
|
return "name" => data[0] if data.one?
|
@@ -72,6 +82,15 @@ module Docker
|
|
72
82
|
|
73
83
|
{}
|
74
84
|
end
|
85
|
+
|
86
|
+
# ----------------------------------------------------------------------
|
87
|
+
|
88
|
+
def self.full_name?(val)
|
89
|
+
parsed = to_repo_hash(val)
|
90
|
+
parsed.key?("name") && (parsed.key?("user") || parsed.key?(
|
91
|
+
"tag"
|
92
|
+
))
|
93
|
+
end
|
75
94
|
end
|
76
95
|
end
|
77
96
|
end
|
data/lib/docker/template/repo.rb
CHANGED
@@ -13,7 +13,12 @@ module Docker
|
|
13
13
|
|
14
14
|
def initialize(*hashes)
|
15
15
|
@base_meta = hashes.compact.reduce(:deep_merge).freeze
|
16
|
-
|
16
|
+
|
17
|
+
unless root.exist?
|
18
|
+
raise(
|
19
|
+
Error::RepoNotFound, name
|
20
|
+
)
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
24
|
# ----------------------------------------------------------------------
|
@@ -21,9 +26,10 @@ module Docker
|
|
21
26
|
# ----------------------------------------------------------------------
|
22
27
|
|
23
28
|
def pushable?
|
24
|
-
(metadata["push"] || metadata["push_only"]) &&
|
25
|
-
"cache_only"
|
26
|
-
|
29
|
+
(metadata["push"] || metadata["push_only"]) &&
|
30
|
+
!metadata["cache_only"] && !metadata[
|
31
|
+
"clean_only"
|
32
|
+
]
|
27
33
|
end
|
28
34
|
|
29
35
|
# ----------------------------------------------------------------------
|
@@ -31,9 +37,10 @@ module Docker
|
|
31
37
|
# ----------------------------------------------------------------------
|
32
38
|
|
33
39
|
def cacheable?
|
34
|
-
(metadata["cache"] || metadata["cache_only"]) &&
|
35
|
-
|
36
|
-
|
40
|
+
(metadata["cache"] || metadata["cache_only"]) &&
|
41
|
+
!metadata[
|
42
|
+
"push_only"
|
43
|
+
]
|
37
44
|
end
|
38
45
|
|
39
46
|
# ----------------------------------------------------------------------
|
@@ -41,9 +48,10 @@ module Docker
|
|
41
48
|
# ----------------------------------------------------------------------
|
42
49
|
|
43
50
|
def buildable?
|
44
|
-
!metadata["push_only"] && !metadata["cache_only"] &&
|
45
|
-
|
46
|
-
|
51
|
+
!metadata["push_only"] && !metadata["cache_only"] &&
|
52
|
+
!metadata[
|
53
|
+
"clean_only"
|
54
|
+
]
|
47
55
|
end
|
48
56
|
|
49
57
|
# ----------------------------------------------------------------------
|
@@ -52,11 +60,25 @@ module Docker
|
|
52
60
|
# ----------------------------------------------------------------------
|
53
61
|
|
54
62
|
def aliased
|
55
|
-
|
63
|
+
full = Parser.full_name?(
|
64
|
+
metadata.aliased_tag
|
65
|
+
)
|
66
|
+
|
67
|
+
if alias? && full
|
68
|
+
self.class.new(to_h.merge(Parser.to_repo_hash(
|
69
|
+
metadata.aliased_tag
|
70
|
+
)))
|
71
|
+
|
72
|
+
elsif alias?
|
56
73
|
self.class.new(to_h.merge({
|
57
74
|
"tag" => metadata.aliased_tag
|
58
75
|
}))
|
59
76
|
end
|
77
|
+
|
78
|
+
rescue Error::RepoNotFound => e
|
79
|
+
unless full
|
80
|
+
raise e
|
81
|
+
end
|
60
82
|
end
|
61
83
|
|
62
84
|
# ----------------------------------------------------------------------
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordon Bedwell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|