conjur-debify 0.4.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/conjur/debify.rb +58 -37
- data/lib/conjur/debify/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 237173296d36243ddc8ad529b34b370aa2be9d0a
|
4
|
+
data.tar.gz: e0282d3f9c0ae54e2ce1ecd2a96e82cd1f3770a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b3aa38f2accc5fcf7e57a98d5a4c13461f420f7b66c2e546e9d84091ecf410d75d990d0507c652283417f811e3f970e902006359be97557e68c12da1a2a48bc
|
7
|
+
data.tar.gz: 2284cabc731e5e73c4fe50014e51e5d96663ab8a3f9cd896687efb385bd77d20ca77f600bd29f7eb320f821efd320a7be4ec9db602b4c4e80ed7ee654d8ee8fe
|
data/CHANGELOG.md
ADDED
data/lib/conjur/debify.rb
CHANGED
@@ -10,7 +10,7 @@ Docker.options[:read_timeout] = 300
|
|
10
10
|
# This is used to turn on DEBUG notices for the test case operation. For instance,
|
11
11
|
# messages from "evoke configure"
|
12
12
|
module DebugMixin
|
13
|
-
DEBUG = ENV['DEBUG']
|
13
|
+
DEBUG = ENV['DEBUG'].nil? ? true : ENV['DEBUG'].downcase == 'true'
|
14
14
|
|
15
15
|
def debug *a
|
16
16
|
DebugMixin.debug *a
|
@@ -86,6 +86,9 @@ command "package" do |c|
|
|
86
86
|
|
87
87
|
c.desc "Specify the deb version; by default, it's computed from the Git tag"
|
88
88
|
c.flag [ :v, :version ]
|
89
|
+
|
90
|
+
c.desc "Specify a custom Dockerfile.fpm"
|
91
|
+
c.flag [ :dockerfile]
|
89
92
|
|
90
93
|
c.action do |global_options,cmd_options,args|
|
91
94
|
raise "project-name is required" unless project_name = args.shift
|
@@ -105,16 +108,18 @@ command "package" do |c|
|
|
105
108
|
dir = File.expand_path(dir)
|
106
109
|
Dir.chdir dir do
|
107
110
|
version = cmd_options[:version] || detect_version
|
111
|
+
dockerfile_path = cmd_options[:dockerfile] || File.expand_path("debify/Dockerfile.fpm", pwd)
|
112
|
+
dockerfile = File.read(dockerfile_path)
|
108
113
|
|
109
114
|
package_name = "conjur-#{project_name}_#{version}_amd64.deb"
|
110
115
|
|
111
116
|
output = StringIO.new
|
112
117
|
Gem::Package::TarWriter.new(output) do |tar|
|
113
|
-
`git ls-files -z`.split("\x0").each do |fname|
|
118
|
+
(`git ls-files -z`.split("\x0") + ['Gemfile.lock']).uniq.each do |fname|
|
114
119
|
stat = File.stat(fname)
|
115
120
|
tar.add_file(fname, stat.mode) { |tar_file| tar_file.write(File.read(fname)) }
|
116
121
|
end
|
117
|
-
tar.add_file('Dockerfile', 0640) { |tar_file| tar_file.write
|
122
|
+
tar.add_file('Dockerfile', 0640) { |tar_file| tar_file.write dockerfile.gsub("@@image@@", fpm_image.id) }
|
118
123
|
end
|
119
124
|
output.rewind
|
120
125
|
|
@@ -167,9 +172,6 @@ Then the evoke "test-install" command is used to install the test code in the
|
|
167
172
|
/src/<project-name>. Basically, the development bundle is installed and the database
|
168
173
|
configuration (if any) is setup.
|
169
174
|
|
170
|
-
Next, an optional "configure-script" from the project source tree is run, with the
|
171
|
-
container id as the program argument. This command waits for Conjur to be healthy again.
|
172
|
-
|
173
175
|
Finally, a test script from the project source tree is run, again with the container
|
174
176
|
id as the program argument.
|
175
177
|
|
@@ -195,9 +197,6 @@ command "test" do |c|
|
|
195
197
|
c.default_value true
|
196
198
|
c.switch [ :pull ]
|
197
199
|
|
198
|
-
c.desc "Shell script to configure the appliance before testing"
|
199
|
-
c.flag [ :c, "configure-script" ]
|
200
|
-
|
201
200
|
c.action do |global_options,cmd_options,args|
|
202
201
|
raise "project-name is required" unless project_name = args.shift
|
203
202
|
raise "test-script is required" unless test_script = args.shift
|
@@ -212,27 +211,59 @@ command "test" do |c|
|
|
212
211
|
Dir.chdir dir do
|
213
212
|
image_tag = cmd_options["image-tag"] or raise "image-tag is required"
|
214
213
|
appliance_image_id = [ cmd_options[:image], image_tag ].join(":")
|
215
|
-
configure_script = cmd_options["configure-script"]
|
216
214
|
|
217
|
-
raise "#{configure_script} does not exist or is not a file" unless configure_script.nil? || File.file?(configure_script)
|
218
215
|
raise "#{test_script} does not exist or is not a file" unless File.file?(test_script)
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
216
|
+
|
217
|
+
Docker::Image.create 'fromImage' => appliance_image_id, &DebugMixin::DOCKER if cmd_options[:pull]
|
218
|
+
|
219
|
+
def build_test_image(appliance_image_id, project_name)
|
220
|
+
deb = "conjur-#{project_name}_latest_amd64.deb"
|
221
|
+
dockerfile = <<-DOCKERFILE
|
222
|
+
FROM #{appliance_image_id}
|
223
|
+
|
224
|
+
COPY #{deb} /tmp/
|
225
|
+
|
226
|
+
RUN rm -rf /opt/conjur/#{project_name}
|
227
|
+
RUN rm -f /opt/conjur/etc/#{project_name}.conf
|
228
|
+
RUN rm -f /usr/local/bin/conjur-#{project_name}
|
229
|
+
|
230
|
+
RUN dpkg --force all --purge conjur-#{project_name} || true
|
231
|
+
RUN dpkg --install /tmp/#{deb}
|
232
|
+
|
233
|
+
RUN touch /etc/service/conjur/down
|
234
|
+
DOCKERFILE
|
235
|
+
Dir.mktmpdir do |tmpdir|
|
236
|
+
tmpfile = Tempfile.new('Dockerfile', tmpdir)
|
237
|
+
File.write(tmpfile, dockerfile)
|
238
|
+
dockerfile_name = File.basename(tmpfile.path)
|
239
|
+
tar_cmd = "tar -cvzh -C #{tmpdir} #{dockerfile_name} -C #{Dir.pwd} #{deb}"
|
240
|
+
tar = open("| #{tar_cmd}")
|
241
|
+
begin
|
242
|
+
Docker::Image.build_from_tar(tar, :dockerfile => dockerfile_name, &DebugMixin::DOCKER)
|
243
|
+
ensure
|
244
|
+
tar.close
|
245
|
+
end
|
246
|
+
end
|
224
247
|
end
|
248
|
+
|
249
|
+
appliance_image = build_test_image(appliance_image_id, project_name)
|
225
250
|
|
251
|
+
vendor_dir = File.expand_path("tmp/debify/#{project_name}/vendor", ENV['HOME'])
|
252
|
+
dot_bundle_dir = File.expand_path("tmp/debify/#{project_name}/.bundle", ENV['HOME'])
|
253
|
+
FileUtils.mkdir_p vendor_dir
|
254
|
+
FileUtils.mkdir_p dot_bundle_dir
|
226
255
|
options = {
|
227
256
|
'Image' => appliance_image.id,
|
228
257
|
'Env' => [
|
229
258
|
"CONJUR_AUTHN_LOGIN=admin",
|
230
|
-
"CONJUR_ENV=
|
259
|
+
"CONJUR_ENV=appliance",
|
231
260
|
"CONJUR_AUTHN_API_KEY=secret",
|
232
261
|
"CONJUR_ADMIN_PASSWORD=secret",
|
233
262
|
],
|
234
263
|
'Binds' => [
|
235
|
-
[ dir, "/src/#{project_name}" ].join(':')
|
264
|
+
[ dir, "/src/#{project_name}" ].join(':'),
|
265
|
+
[ vendor_dir, "/src/#{project_name}/vendor" ].join(':'),
|
266
|
+
[ dot_bundle_dir, "/src/#{project_name}/.bundle" ].join(':')
|
236
267
|
]
|
237
268
|
}
|
238
269
|
|
@@ -265,6 +296,7 @@ command "test" do |c|
|
|
265
296
|
def command container, *args
|
266
297
|
stdout, stderr, exitcode = container.exec args, &DebugMixin::DOCKER
|
267
298
|
exit_now! "Command failed : #{args.join(' ')}", exitcode unless exitcode == 0
|
299
|
+
stdout
|
268
300
|
end
|
269
301
|
|
270
302
|
begin
|
@@ -275,33 +307,22 @@ command "test" do |c|
|
|
275
307
|
end
|
276
308
|
container.start
|
277
309
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
command container, "rm", "-f", "/opt/conjur/etc/#{project_name}.conf"
|
286
|
-
command container, "rm", "-f", "/usr/local/bin/conjur-#{project_name}"
|
287
|
-
container.exec [ "dpkg", "-P", "conjur-#{project_name}" ], &DebugMixin::DOCKER
|
288
|
-
|
289
|
-
DebugMixin.debug_write "Installing #{project_name}\n"
|
310
|
+
# Wait for pg/main so that migrations can run
|
311
|
+
30.times do
|
312
|
+
stdout, stderr, exitcode = container.exec %w(sv status pg/main), &DebugMixin::DOCKER
|
313
|
+
status = stdout.join
|
314
|
+
break if exitcode == 0 && status =~ /^run\:/
|
315
|
+
sleep 1
|
316
|
+
end
|
290
317
|
|
291
|
-
command container, "dpkg", "-i", "/src/#{project_name}/conjur-#{project_name}_latest_amd64.deb"
|
292
318
|
command container, "/opt/conjur/evoke/bin/test-install", project_name
|
293
319
|
|
294
320
|
DebugMixin.debug_write "Starting conjur\n"
|
295
321
|
|
322
|
+
command container, "rm", "/etc/service/conjur/down"
|
296
323
|
command container, "sv", "start", "conjur"
|
297
324
|
wait_for_conjur appliance_image, container
|
298
325
|
|
299
|
-
if configure_script
|
300
|
-
system "./#{configure_script} #{container.id}"
|
301
|
-
exit_now! "#{configure_script} failed with exit code #{$?.exitstatus}", $?.exitstatus unless $?.exitstatus == 0
|
302
|
-
wait_for_conjur appliance_image, container
|
303
|
-
end
|
304
|
-
|
305
326
|
system "./#{test_script} #{container.id}"
|
306
327
|
exit_now! "#{test_script} failed with exit code #{$?.exitstatus}", $?.exitstatus unless $?.exitstatus == 0
|
307
328
|
ensure
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conjur-debify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Gilpin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -104,6 +104,7 @@ extra_rdoc_files: []
|
|
104
104
|
files:
|
105
105
|
- .gitignore
|
106
106
|
- .project
|
107
|
+
- CHANGELOG.md
|
107
108
|
- Gemfile
|
108
109
|
- LICENSE.txt
|
109
110
|
- README.md
|