dockly 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,15 +16,14 @@ module Dockly
16
16
  end
17
17
 
18
18
  generate_snippet_for :normalize_for_dockly, []
19
- generate_snippet_for :get_from_s3, [:s3_url, :output_path], { :output_path => "-" }
20
- generate_snippet_for :install_package, [:path]
21
19
  generate_snippet_for :get_and_install_deb, [:s3_url, :deb_path]
22
- generate_snippet_for :docker_import, [:repo, :tag], { :tag => "latest" }
23
- generate_snippet_for :docker_tag_latest, [:repo, :tag]
20
+
24
21
  generate_snippet_for :file_docker_import, [:path, :repo, :tag]
25
22
  generate_snippet_for :file_diff_docker_import, [:base_image, :diff_image, :repo, :tag]
26
23
  generate_snippet_for :s3_docker_import, [:s3_url, :repo, :tag]
27
24
  generate_snippet_for :s3_diff_docker_import, [:base_image, :diff_image, :repo, :tag]
28
25
  generate_snippet_for :registry_import, [:repo, :tag], { :tag => "latest" }
26
+
27
+ generate_snippet_for :docker_tag_latest, [:repo, :tag]
29
28
  end
30
29
  end
@@ -1,3 +1,3 @@
1
1
  module Dockly
2
- VERSION = '1.6.0'
2
+ VERSION = '1.7.0'
3
3
  end
@@ -1,4 +1,20 @@
1
1
  file_diff_docker_import_fn() {
2
- <%= get_from_s3(data[:base_image]) %>
2
+ s3_path="<%= data[:base_image] %>"
3
+ log "fetch: starting to fetch $s3_path"
4
+ s3cmd -f get $s3_path - 2> >(log)
5
+ log "fetch: successfully fetched $s3_path"
3
6
  }
4
- (cat "<%= data[:diff_image] %>"; file_diff_docker_import_fn) | gunzip -c | <%= docker_import(data[:repo], data[:tag]) %>
7
+
8
+ docker_import() {
9
+ repo=<%= data[:repo] %>
10
+ tag=<%= data[:tag] %>
11
+ (cat "<%= data[:diff_image] %>"; file_diff_docker_import_fn) | gunzip -c | docker import - $repo:$tag
12
+ }
13
+
14
+ worked=1
15
+ for attempt in {1..200}; do
16
+ [[ $worked != 0]] || break
17
+ docker_import && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
18
+ done
19
+ [[ $worked != 0 ]] && fatal "fetch: failed to import diff image"
20
+ log "fetch: successfully imported image"
@@ -1 +1,15 @@
1
- cat <%= data[:path] %> | gunzip -c | <%= docker_import(data[:repo], data[:tag]) %>
1
+ docker_import() {
2
+ path=<%= data[:path] %>
3
+ repo=<%= data[:repo] %>
4
+ tag=<%= data[:tag] %>
5
+ cat $path | gunzip -c | docker import - $repo:$tag
6
+ }
7
+
8
+ # Hopefully this isn't ever needed
9
+ worked=1
10
+ for attempt in {1..200}; do
11
+ [[ $worked != 0 ]] || break
12
+ docker_import && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
13
+ done
14
+ [[ $worked != 0 ]] && fatal "fetch: failed to import image"
15
+ log "fetch: successfully imported image"
@@ -1,2 +1,13 @@
1
- <%= get_from_s3(data[:s3_url], data[:deb_path]) %>
2
- <%= install_package(data[:deb_path]) %>
1
+ worked=1
2
+ s3_path="<%= data[:s3_url] %>"
3
+ output_path="<%= data[:deb_path] %>"
4
+ log "fetch: starting to fetch $s3_path"
5
+ for attempt in {1..200}; do
6
+ [[ $worked != 0 ]] || break
7
+ log "fetch: attempt ${attempt} to get $s3_path ..."
8
+ s3cmd -f get $s3_path $output_path 2> >(log) && worked=0 || (log "fetch: attempt failed, sleeping 30"; sleep 30)
9
+ done
10
+ [[ $worked != 0 ]] && fatal "fetch: failed to pull deb from S3"
11
+ log "fetch: successfully fetched $s3_path"
12
+
13
+ dpkg -i "<%= data[:deb_path] %>"
@@ -1 +1,13 @@
1
- docker pull <%= data[:repo] %>:<%= data[:tag] %>
1
+ docker_pull() {
2
+ repo=<%= data[:repo] %>
3
+ tag=<%= data[:tag] %>
4
+ docker pull $repo:$tag
5
+ }
6
+
7
+ worked=1
8
+ for attempt in {1..200}; do
9
+ [[ $worked != 0 ]] || break
10
+ docker_pull && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
11
+ done
12
+ [[ $worked != 0 ]] && fatal "failed to import image"
13
+ log "fetch: successfully imported image"
@@ -3,24 +3,48 @@ base_image = "/opt/dockly/base_image.tar"
3
3
  %>
4
4
 
5
5
  s3_diff_docker_import_base_fn() {
6
- <%= get_from_s3(data[:base_image]) %>
6
+ s3_path="<%= data[:base_image] %>"
7
+ log "fetch: starting to fetch $s3_path"
8
+ s3cmd -f get $s3_path - 2> >(log)
9
+ log "fetch: successfully fetched $s3_path"
7
10
  }
8
11
 
9
12
  s3_diff_docker_import_diff_fn() {
10
- <%= get_from_s3(data[:diff_image]) %>
13
+ s3_path="<%= data[:diff_image] %>"
14
+ log "fetch: starting to fetch $s3_path"
15
+ s3cmd -f get $s3_path - 2> >(log)
16
+ log "fetch: successfully fetched $s3_path"
17
+ }
18
+
19
+ base_image() {
20
+ s3_diff_docker_import_base_fn | gunzip -vc > "<%= base_image %>" 2> >(log)
11
21
  }
12
22
 
13
23
  stream_image() {
14
- size=$(stat --format "%s" "<%= base_image %>")
15
- head_size=$(($size - 1024))
16
- head -c $head_size "<%= base_image %>"
17
- s3_diff_docker_import_diff_fn | (gunzip -vc 2> >(log) || fatal "tardiff failed to gunzip")
24
+ size=$(stat --format "%s" "<%= base_image %>")
25
+ head_size=$(($size - 1024))
26
+ head -c $head_size "<%= base_image %>"
27
+ s3_diff_docker_import_diff_fn | (gunzip -vc 2> >(log) || fatal "tardiff failed to gunzip")
18
28
  }
19
29
 
20
30
  docker_import() {
21
- <%= docker_import(data[:repo], data[:tag]).to_s.strip %> > >(log) 2>&1 || fatal "docker failed to import"
31
+ repo=<%= data[:repo] %>
32
+ tag=<%= data[:tag] %>
33
+ docker import - $repo:$tag > >(log) 2>&1 || fatal "docker failed to import"
22
34
  }
23
35
 
24
- s3_diff_docker_import_base_fn | gunzip -vc > "<%= base_image %>" 2> >(log)
36
+ worked=1
37
+ for attempt in {1..200}; do
38
+ [[ $worked != 0 ]] || break
39
+ base_image && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
40
+ done
41
+ [[ $worked != 0 ]] && fatal "fetch: failed to pull base image"
42
+ log "fetch: successfully pulled base image"
25
43
 
26
- stream_image | docker_import
44
+ worked=1
45
+ for attempt in {1..200}; do
46
+ [[ $worked != 0 ]] || break
47
+ stream_image | docker_import && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
48
+ done
49
+ [[ $worked != 0 ]] && fatal "fetch: failed to import diff image"
50
+ log "fetch: successfully imported diff image"
@@ -1,4 +1,20 @@
1
1
  s3_docker_import_fn() {
2
- <%= get_from_s3(data[:s3_url]) %>
2
+ s3_path="<%= data[:s3_url] %>"
3
+ log "fetch: starting to fetch $s3_path"
4
+ s3cmd -f get $s3_path - 2> >(log)
5
+ log "fetch: successfully fetched $s3_path"
3
6
  }
4
- s3_docker_import_fn | gunzip -c | <%= docker_import(data[:repo], data[:tag]) %>
7
+
8
+ docker_import() {
9
+ repo=<%= data[:repo] %>
10
+ tag=<%= data[:tag] %>
11
+ s3_docker_import_fn | gunzip -c | docker import - $repo:$tag
12
+ }
13
+
14
+ worked=1
15
+ for attempt in {1..200}; do
16
+ [[ $worked != 0 ]] || break
17
+ docker_import && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
18
+ done
19
+ [[ $worked != 0 ]] && fatal "failed to import image"
20
+ log "fetch: successfully imported image"
@@ -10,67 +10,15 @@ describe Dockly::BashBuilder do
10
10
  end
11
11
  end
12
12
 
13
- describe "#get_from_s3" do
14
- let(:s3_url) { "s3://url-for-s3/file.tar.gz" }
15
- context "uses the default output" do
16
- it "polls from s3 and sets the s3_path" do
17
- output = subject.get_from_s3(s3_url)
18
- expect(output).to include("s3cmd -f get $s3_path $output_path")
19
- expect(output).to include("s3_path=\"#{s3_url}\"")
20
- expect(output).to include("output_path=\"-\"")
21
- end
22
- end
23
- context "uses a specific output directory" do
24
- let(:output_dir) { "test" }
25
- it "polls from s3 and sets the s3_path and output_path" do
26
- output = subject.get_from_s3(s3_url, output_dir)
27
- expect(output).to include("s3cmd -f get $s3_path $output_path")
28
- expect(output).to include("s3_path=\"#{s3_url}\"")
29
- expect(output).to include("output_path=\"#{output_dir}\"")
30
- end
31
- end
32
- end
33
-
34
- describe "#install_package" do
35
- let(:path) { "/opt/dockly/deb.deb" }
36
- it "installs from the given path" do
37
- output = subject.install_package(path)
38
- expect(output.strip).to eq("dpkg -i \"#{path}\"")
39
- end
40
- end
41
-
42
13
  describe "#get_and_install_deb" do
43
14
  let(:s3_url) { "s3://bucket/path-to-deb.deb" }
44
15
  let(:deb_path) { "/opt/dockly/deb_path.deb" }
45
16
  it "gets from s3 and installs the package" do
46
- expect(subject).to receive(:get_from_s3).with(s3_url, deb_path)
47
- expect(subject).to receive(:install_package).with(deb_path)
48
- subject.get_and_install_deb(s3_url, deb_path)
49
- end
50
- end
51
-
52
- describe "#docker_import" do
53
- context "when not given a repo" do
54
- it "imports with no tagging" do
55
- output = subject.docker_import
56
- expect(output).to include("docker import -")
57
- end
58
- end
59
-
60
- context "when given a repo" do
61
- let(:repo) { "aRepo" }
62
- it "imports with repo and latest" do
63
- output = subject.docker_import(repo)
64
- expect(output).to include("docker import - #{repo}:latest")
65
- end
66
-
67
- context "and a non-default tag" do
68
- let(:tag) { "aTag" }
69
- it "imports with repo and the tag" do
70
- output = subject.docker_import(repo, tag)
71
- expect(output).to include("docker import - #{repo}:#{tag}")
72
- end
73
- end
17
+ output = subject.get_and_install_deb(s3_url, deb_path)
18
+ expect(output).to include(s3_url)
19
+ expect(output).to include(deb_path)
20
+ expect(output).to include("s3cmd -f get")
21
+ expect(output).to include("dpkg -i")
74
22
  end
75
23
  end
76
24
 
@@ -93,10 +41,10 @@ describe Dockly::BashBuilder do
93
41
  describe "#file_docker_import" do
94
42
  let(:path) { "/opt/dockly/file.tar.gz" }
95
43
  it "cats, gunzips and passes to docker import" do
96
- expect(subject).to receive(:docker_import)
97
44
  output = subject.file_docker_import(path)
98
45
  expect(output).to include("cat")
99
46
  expect(output).to include("gunzip -c")
47
+ expect(output).to include("docker import -")
100
48
  end
101
49
  end
102
50
 
@@ -104,19 +52,23 @@ describe Dockly::BashBuilder do
104
52
  let(:base_image) { "s3://bucket/base_image.tar.gz" }
105
53
  let(:diff_image) { "/opt/dockly/diff_image.tar.gz" }
106
54
  it "gets the base file from S3 and cats that with the diff image and imports to docker" do
107
- expect(subject).to receive(:get_from_s3).with(base_image)
108
- expect(subject).to receive(:docker_import)
109
- expect(subject.file_diff_docker_import(base_image, diff_image)).to include("cat \"#{diff_image}\"")
55
+ output = subject.file_diff_docker_import(base_image, diff_image)
56
+ expect(output).to include(base_image)
57
+ expect(output).to include(diff_image)
58
+ expect(output).to include("cat \"#{diff_image}\"")
59
+ expect(output).to include("s3cmd -f get")
60
+ expect(output).to include("docker import -")
110
61
  end
111
62
  end
112
63
 
113
64
  describe "#s3_docker_import" do
114
65
  let(:s3_url) { "s3://bucket/image.tar.gz" }
115
66
  it "pulls, gunzips and passes to docker import" do
116
- expect(subject).to receive(:get_from_s3)
117
- expect(subject).to receive(:docker_import)
118
67
  output = subject.s3_docker_import(s3_url)
68
+ expect(output).to include(s3_url)
119
69
  expect(output).to include("gunzip -c")
70
+ expect(output).to include("s3cmd -f get")
71
+ expect(output).to include("docker import -")
120
72
  end
121
73
  end
122
74
 
@@ -124,13 +76,15 @@ describe Dockly::BashBuilder do
124
76
  let(:base_image) { "s3://bucket/base_image.tar.gz" }
125
77
  let(:diff_image) { "s3://bucket/diff_image.tar.gz" }
126
78
  it "makes two functions for getting from s3, finds the size, and imports both to docker" do
127
- expect(subject).to receive(:get_from_s3).twice
128
- expect(subject).to receive(:docker_import)
129
79
  output = subject.s3_diff_docker_import(base_image, diff_image)
80
+ expect(output).to include(base_image)
81
+ expect(output).to include(diff_image)
130
82
  expect(output).to include("stat --format \"%s\"") # get file size
131
83
  expect(output).to include("$(($size - 1024))") # compute file size
132
84
  expect(output).to include("head -c $head_size")
133
85
  expect(output).to include("gunzip")
86
+ expect(output).to include("s3cmd -f get")
87
+ expect(output).to include("docker import -")
134
88
  end
135
89
  end
136
90
 
@@ -139,7 +93,9 @@ describe Dockly::BashBuilder do
139
93
  context "not given a tag" do
140
94
  it "pulls the latest" do
141
95
  output = subject.registry_import(repo)
142
- expect(output).to include("docker pull #{repo}:latest")
96
+ expect(output).to include("docker pull $repo:$tag")
97
+ expect(output).to include("repo=#{repo}")
98
+ expect(output).to include("tag=latest")
143
99
  end
144
100
  end
145
101
 
@@ -147,7 +103,9 @@ describe Dockly::BashBuilder do
147
103
  let(:tag) { "aTag" }
148
104
  it "pulls to specified tag" do
149
105
  output = subject.registry_import(repo, tag)
150
- expect(output).to include("docker pull #{repo}:#{tag}")
106
+ expect(output).to include("docker pull $repo:$tag")
107
+ expect(output).to include("repo=#{repo}")
108
+ expect(output).to include("tag=#{tag}")
151
109
  end
152
110
  end
153
111
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockly
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-16 00:00:00.000000000 Z
12
+ date: 2015-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clamp
@@ -278,7 +278,6 @@ files:
278
278
  - lib/dockly/version.rb
279
279
  - lib/foreman/cli_fix.rb
280
280
  - lib/foreman/export/base_fix.rb
281
- - snippets/docker_import.erb
282
281
  - snippets/docker_tag_latest.erb
283
282
  - snippets/file_diff_docker_import.erb
284
283
  - snippets/file_docker_import.erb
@@ -1 +0,0 @@
1
- docker import - <% if data[:repo] %><%= data[:repo] %>:<%= data[:tag] %><% end %>