puppet_docker_tools 0.1.4 → 0.1.5
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/README.md +5 -6
- data/bin/puppet-docker +5 -6
- data/lib/puppet_docker_tools/runner.rb +14 -10
- data/lib/puppet_docker_tools/utilities.rb +4 -2
- data/spec/lib/puppet_docker_tools/runner_spec.rb +15 -8
- 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: d9a052ffa04d431161f3d63267430416c2857234
|
4
|
+
data.tar.gz: bad61b2a4a18d434760e620c7dfe3fe531f63a1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab37a2fc5f60e35a88dd59a447c72d45d461083a77edda97a868c6d02abe519565b994e5925f1b3d6cb6599e0d2a0c279e07b166c2919bca6fc07cdf94361ef0
|
7
|
+
data.tar.gz: bc64d63f6cd8bc8285021b1746057a7236c9669217559517044e2016d23ec11fe4ae14faf8355a332b5293c90dd849d3adc57dbd3cf80f17f7c27c510c6a4833
|
data/README.md
CHANGED
@@ -15,11 +15,11 @@ $ puppet-docker help
|
|
15
15
|
Utilities for building and releasing Puppet docker images.
|
16
16
|
|
17
17
|
Usage:
|
18
|
-
puppet-docker build [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--no-cache] [--version=<version] [--build-arg=<buildarg> ...] [--no-latest]
|
18
|
+
puppet-docker build [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--no-cache] [--version=<version>] [--build-arg=<buildarg> ...] [--no-latest]
|
19
19
|
puppet-docker lint [DIRECTORY] [--dockerfile=<dockerfile>]
|
20
20
|
puppet-docker local-lint [DIRECTORY] [--dockerfile=<dockerfile>]
|
21
21
|
puppet-docker pull [IMAGE] [--repository=<repo>]
|
22
|
-
puppet-docker push [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--no-latest]
|
22
|
+
puppet-docker push [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--version=<version>] [--no-latest]
|
23
23
|
puppet-docker rev-labels [DIRECTORY] [--dockerfile=<dockerfile>] [--namespace=<namespace>]
|
24
24
|
puppet-docker spec [DIRECTORY]
|
25
25
|
puppet-docker test [DIRECTORY] [--dockerfile=<dockerfile>]
|
@@ -33,15 +33,14 @@ Arguments:
|
|
33
33
|
TAG Pull latest versions of images at TAG. Defaults to ['ubuntu:16.04', 'centos:7', 'alpine:3.4', 'debian:9', 'postgres:9.6.8']
|
34
34
|
|
35
35
|
Options:
|
36
|
-
--repository=<repo>
|
36
|
+
--repository=<repo> Docker repository containing the image [default: puppet]
|
37
37
|
--no-cache Disable use of layer cache when building this image. Defaults to using the cache.
|
38
38
|
--namespace=<namespace> Namespace for labels on the container [default: org.label-schema]
|
39
39
|
--dockerfile=<dockerfile> File name for your dockerfile [default: Dockerfile]
|
40
40
|
--version=<version> Version to build. This field will be used to determine the label and will be passed as the version build arg.
|
41
41
|
**NOTE** `--build-arg version='<version>'` overrides `--version <version>`
|
42
42
|
--build-arg=<buildarg> Build arg to pass to container build, can be passed multiple times.
|
43
|
-
--no-latest Do not include the 'latest' tag when building and shipping images. By default, the 'latest' tag is built and
|
44
|
-
shipped with the versioned tag.
|
43
|
+
--no-latest Do not include the 'latest' tag when building and shipping images. By default, the 'latest' tag is built and shipped with the versioned tag.
|
45
44
|
```
|
46
45
|
|
47
46
|
### `puppet-docker build`
|
@@ -66,7 +65,7 @@ Pull the specified image, i.e. 'puppet/puppetserver'. *NOTE*: If you don't inclu
|
|
66
65
|
|
67
66
|
### `puppet-docker push`
|
68
67
|
|
69
|
-
Push images built from the dockerfile in DIRECTORY to
|
68
|
+
Push images built from the dockerfile in DIRECTORY to <repo>. This task will fail if you do not have a version specified in your dockerfile. It will push both a versioned and a 'latest' tagged image.
|
70
69
|
|
71
70
|
### `puppet-docker rev-labels`
|
72
71
|
|
data/bin/puppet-docker
CHANGED
@@ -7,11 +7,11 @@ doc = <<DOC
|
|
7
7
|
Utilities for building and releasing Puppet docker images.
|
8
8
|
|
9
9
|
Usage:
|
10
|
-
puppet-docker build [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--no-cache] [--version=<version] [--build-arg=<buildarg> ...] [--no-latest]
|
10
|
+
puppet-docker build [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--no-cache] [--version=<version>] [--build-arg=<buildarg> ...] [--no-latest]
|
11
11
|
puppet-docker lint [DIRECTORY] [--dockerfile=<dockerfile>]
|
12
12
|
puppet-docker local-lint [DIRECTORY] [--dockerfile=<dockerfile>]
|
13
13
|
puppet-docker pull [IMAGE] [--repository=<repo>]
|
14
|
-
puppet-docker push [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--no-latest]
|
14
|
+
puppet-docker push [DIRECTORY] [--dockerfile=<dockerfile>] [--repository=<repo>] [--namespace=<namespace>] [--version=<version>] [--no-latest]
|
15
15
|
puppet-docker rev-labels [DIRECTORY] [--dockerfile=<dockerfile>] [--namespace=<namespace>]
|
16
16
|
puppet-docker spec [DIRECTORY]
|
17
17
|
puppet-docker test [DIRECTORY] [--dockerfile=<dockerfile>]
|
@@ -25,15 +25,14 @@ Arguments:
|
|
25
25
|
TAG Pull latest versions of images at TAG. Defaults to ['ubuntu:16.04', 'centos:7', 'alpine:3.4', 'debian:9', 'postgres:9.6.8']
|
26
26
|
|
27
27
|
Options:
|
28
|
-
--repository=<repo>
|
28
|
+
--repository=<repo> Docker repository containing the image [default: puppet]
|
29
29
|
--no-cache Disable use of layer cache when building this image. Defaults to using the cache.
|
30
30
|
--namespace=<namespace> Namespace for labels on the container [default: org.label-schema]
|
31
31
|
--dockerfile=<dockerfile> File name for your dockerfile [default: Dockerfile]
|
32
32
|
--version=<version> Version to build. This field will be used to determine the label and will be passed as the version build arg.
|
33
33
|
**NOTE** `--build-arg version='<version>'` overrides `--version <version>`
|
34
34
|
--build-arg=<buildarg> Build arg to pass to container build, can be passed multiple times.
|
35
|
-
--no-latest Do not include the 'latest' tag when building and shipping images. By default, the 'latest' tag is built and
|
36
|
-
shipped with the versioned tag.
|
35
|
+
--no-latest Do not include the 'latest' tag when building and shipping images. By default, the 'latest' tag is built and shipped with the versioned tag.
|
37
36
|
DOC
|
38
37
|
|
39
38
|
begin
|
@@ -88,7 +87,7 @@ begin
|
|
88
87
|
elsif options['local-lint']
|
89
88
|
command_runner.local_lint
|
90
89
|
elsif options['push']
|
91
|
-
command_runner.push(latest: latest)
|
90
|
+
command_runner.push(latest: latest, version: options['--version'])
|
92
91
|
elsif options['rev-labels']
|
93
92
|
command_runner.rev_labels
|
94
93
|
elsif options['spec']
|
@@ -114,31 +114,35 @@ class PuppetDockerTools
|
|
114
114
|
fail output unless status == 0
|
115
115
|
end
|
116
116
|
|
117
|
-
# Push an image to
|
117
|
+
# Push an image to $repository
|
118
118
|
#
|
119
119
|
# @param latest Whether or not to push the latest tag along with the
|
120
120
|
# versioned image build.
|
121
|
-
def push(latest: true)
|
121
|
+
def push(latest: true, version: nil)
|
122
122
|
image_name = File.basename(directory)
|
123
123
|
path = "#{repository}/#{image_name}"
|
124
|
-
version = PuppetDockerTools::Utilities.get_value_from_label(path, value: 'version', namespace: namespace)
|
125
124
|
|
126
|
-
#
|
125
|
+
# only check for version from the label if we didn't pass it in
|
126
|
+
if version.nil?
|
127
|
+
version = PuppetDockerTools::Utilities.get_value_from_label(path, value: 'version', namespace: namespace)
|
128
|
+
end
|
129
|
+
|
130
|
+
# We always want to push a versioned container
|
127
131
|
unless version
|
128
132
|
fail "No version specified in #{dockerfile} for #{path}"
|
129
133
|
end
|
130
134
|
|
131
|
-
puts "Pushing #{path}:#{version}
|
132
|
-
exitstatus, _ = PuppetDockerTools::Utilities.
|
135
|
+
puts "Pushing #{path}:#{version}"
|
136
|
+
exitstatus, _ = PuppetDockerTools::Utilities.push_to_docker_repo("#{path}:#{version}")
|
133
137
|
unless exitstatus == 0
|
134
|
-
fail "Pushing #{path}:#{version}
|
138
|
+
fail "Pushing #{path}:#{version} failed!"
|
135
139
|
end
|
136
140
|
|
137
141
|
if latest
|
138
|
-
puts "Pushing #{path}:latest
|
139
|
-
exitstatus, _ = PuppetDockerTools::Utilities.
|
142
|
+
puts "Pushing #{path}:latest"
|
143
|
+
exitstatus, _ = PuppetDockerTools::Utilities.push_to_docker_repo("#{path}:latest")
|
140
144
|
unless exitstatus == 0
|
141
|
-
fail "Pushing #{path}:latest
|
145
|
+
fail "Pushing #{path}:latest failed!"
|
142
146
|
end
|
143
147
|
end
|
144
148
|
end
|
@@ -5,14 +5,16 @@ class PuppetDockerTools
|
|
5
5
|
module Utilities
|
6
6
|
module_function
|
7
7
|
|
8
|
-
# Push an image to
|
8
|
+
# Push an image to a docker repository
|
9
9
|
#
|
10
10
|
# @param image_name The image to push, including the tag e.g., puppet/puppetserver:latest
|
11
|
+
# If pushing to a private repo, the image name should include the repo endpoint,
|
12
|
+
# like my-docker-repo.internal.net/puppet/puppetserver:latest
|
11
13
|
# @param stream_output Whether or not to stream output as it comes in, defaults to true
|
12
14
|
# @return Returns an array containing the integer exitstatus of the push
|
13
15
|
# command and a string containing the combined stdout and stderr
|
14
16
|
# from the push
|
15
|
-
def
|
17
|
+
def push_to_docker_repo(image_name, stream_output=true)
|
16
18
|
Open3.popen2e("docker push #{image_name}") do |stdin, output_stream, wait_thread|
|
17
19
|
output=''
|
18
20
|
while line = output_stream.gets
|
@@ -147,29 +147,36 @@ describe PuppetDockerTools::Runner do
|
|
147
147
|
|
148
148
|
it 'should raise an error if something bad happens pushing the versioned tag' do
|
149
149
|
expect(PuppetDockerTools::Utilities).to receive(:get_value_from_label).with('test/test-image', value: 'version', namespace: runner.namespace).and_return('1.2.3')
|
150
|
-
expect(PuppetDockerTools::Utilities).to receive(:
|
151
|
-
expect { runner.push }.to raise_error(RuntimeError, /1.2.3
|
150
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:1.2.3').and_return([1, nil])
|
151
|
+
expect { runner.push }.to raise_error(RuntimeError, /1.2.3 failed/i)
|
152
152
|
end
|
153
153
|
|
154
154
|
it 'should raise an error if something bad happens pushing the latest tag' do
|
155
155
|
expect(PuppetDockerTools::Utilities).to receive(:get_value_from_label).with('test/test-image', value: 'version', namespace: runner.namespace).and_return('1.2.3')
|
156
|
-
expect(PuppetDockerTools::Utilities).to receive(:
|
157
|
-
expect(PuppetDockerTools::Utilities).to receive(:
|
158
|
-
expect { runner.push }.to raise_error(RuntimeError, /latest
|
156
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:1.2.3').and_return([0, nil])
|
157
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:latest').and_return([1, nil])
|
158
|
+
expect { runner.push }.to raise_error(RuntimeError, /latest failed/i)
|
159
159
|
end
|
160
160
|
|
161
161
|
it 'should push the versioned and latest tags if nothing goes wrong' do
|
162
162
|
expect(PuppetDockerTools::Utilities).to receive(:get_value_from_label).with('test/test-image', value: 'version', namespace: runner.namespace).and_return('1.2.3')
|
163
|
-
expect(PuppetDockerTools::Utilities).to receive(:
|
164
|
-
expect(PuppetDockerTools::Utilities).to receive(:
|
163
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:1.2.3').and_return([0, nil])
|
164
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:latest').and_return([0, nil])
|
165
165
|
runner.push
|
166
166
|
end
|
167
167
|
|
168
168
|
it 'should not push the latest tag if latest is set to false' do
|
169
169
|
expect(PuppetDockerTools::Utilities).to receive(:get_value_from_label).with('test/test-image', value: 'version', namespace: runner.namespace).and_return('1.2.3')
|
170
|
-
expect(PuppetDockerTools::Utilities).to receive(:
|
170
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:1.2.3').and_return([0, nil])
|
171
171
|
runner.push(latest: false)
|
172
172
|
end
|
173
|
+
|
174
|
+
it "shouldn't look for the version if it's passed" do
|
175
|
+
expect(PuppetDockerTools::Utilities).not_to receive(:get_value_from_label)
|
176
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:4.5.6').and_return([0, nil])
|
177
|
+
expect(PuppetDockerTools::Utilities).to receive(:push_to_docker_repo).with('test/test-image:latest').and_return([0, nil])
|
178
|
+
runner.push(version: '4.5.6')
|
179
|
+
end
|
173
180
|
end
|
174
181
|
|
175
182
|
describe '#rev_labels' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet_docker_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docker-api
|