henk 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/Gemfile +2 -0
- data/lib/henk/commands.rb +4 -1
- data/lib/henk/instance.rb +17 -0
- data/lib/henk/step.rb +3 -1
- data/lib/henk/version.rb +1 -1
- metadata +10 -12
- data/lib/henk/old.rb +0 -96
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
Nzk0OGFkOWIyYzRhY2ZkN2Q5YTQ4MzhlMjI3YmUyMmI1NTNkYTRlMWI0NWEz
|
10
|
-
NDg1ZjQ4YWE1NTQzNzhmZjFmMzAzMzRmMjk5ZGNhNDU3OGY2MTM4NWFkMjIz
|
11
|
-
OTE1M2I1N2IyNmU5Mzc4MjZkZGM4ZDIxNDRhNWY3OGIyYmUxMTE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NDgzZjQyMTZiYTRmNWQ2M2YwNDhkMTM2ZTVjZjcxYzA4MGU1MTFmNWI5N2Zm
|
14
|
-
MGMzZjI0ZTI4N2YyMGI3ZmYyYmYzZWM0ZWFkZWI3YjZlMmI3NTNkYzIzMjA2
|
15
|
-
OGFhOThlYzIyNzdkY2YyMTZiODRiY2QwMmY0ZDI5MWJiZDZlMTQ=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 676f2827414421809ad632dfced0f94c1fc1b665
|
4
|
+
data.tar.gz: 22513230d990a8a07736055dc66292b441fb1791
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6305f1d4bd9c27dc93af5dbd60e414d236e2570845c258f6e28a1017077c713c94775249e32a0868d0f1e128a14fac99918d7c74d5b440f973131215bd85ec98
|
7
|
+
data.tar.gz: ad8340b7e82509dae6172cea3a4ea977451e7a2ab9fde7b0ddd34cddf9bb574fb45abd9417017198b17e9b1bfda3aff720553bfb70d5781b7feac1f65528f48d
|
data/Gemfile
CHANGED
data/lib/henk/commands.rb
CHANGED
@@ -12,7 +12,6 @@ module Henk
|
|
12
12
|
lines = lines.map { |line| line.split(/ +/) }
|
13
13
|
|
14
14
|
raise "'docker images' output not as expected" unless
|
15
|
-
lines.first.length == 5 &&
|
16
15
|
lines.first[0..1] == %w(REPOSITORY TAG)
|
17
16
|
|
18
17
|
line = lines.find { |l| l[0..1].join(':') == name}
|
@@ -44,5 +43,9 @@ module Henk
|
|
44
43
|
|
45
44
|
execute 'docker', 'tag', *command_options, image, repository, *tag
|
46
45
|
end
|
46
|
+
|
47
|
+
def kill(*containers)
|
48
|
+
execute('docker', 'kill', *containers)
|
49
|
+
end
|
47
50
|
end
|
48
51
|
end
|
data/lib/henk/instance.rb
CHANGED
@@ -6,6 +6,14 @@ module Henk
|
|
6
6
|
class Instance
|
7
7
|
include Commands
|
8
8
|
|
9
|
+
def initialize
|
10
|
+
@running_containers = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def running_containers
|
14
|
+
@running_containers.to_enum
|
15
|
+
end
|
16
|
+
|
9
17
|
# Block is passed exit status object
|
10
18
|
def on_subshell_error(&block)
|
11
19
|
@subshell_error_block = block
|
@@ -63,5 +71,14 @@ module Henk
|
|
63
71
|
sheller_result = execute(*arguments)
|
64
72
|
sheller_result.stdout.chomp.split("\n") if sheller_result.exit_status.success?
|
65
73
|
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def while_container_running(container)
|
78
|
+
@running_containers << container
|
79
|
+
yield
|
80
|
+
ensure
|
81
|
+
@running_containers.delete(container)
|
82
|
+
end
|
66
83
|
end
|
67
84
|
end
|
data/lib/henk/step.rb
CHANGED
@@ -21,7 +21,9 @@ module Henk
|
|
21
21
|
container = @henk.execute_for_word(*@arguments)
|
22
22
|
return unless container
|
23
23
|
|
24
|
-
container_exit = @henk.
|
24
|
+
container_exit = @henk.send(:while_container_running, container) do
|
25
|
+
@henk.wait(container)
|
26
|
+
end
|
25
27
|
|
26
28
|
@after_wait_block.call(container, container_exit) if @after_wait_block
|
27
29
|
|
data/lib/henk/version.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: henk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Stratmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
|
14
|
+
name: sheller
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
|
-
- -
|
17
|
+
- - '>='
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: '0'
|
19
20
|
type: :runtime
|
20
21
|
prerelease: false
|
21
|
-
|
22
|
-
requirement: !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
description: Henk is a ruby wrapper around the docker CLI
|
@@ -40,7 +40,6 @@ files:
|
|
40
40
|
- lib/henk.rb
|
41
41
|
- lib/henk/commands.rb
|
42
42
|
- lib/henk/instance.rb
|
43
|
-
- lib/henk/old.rb
|
44
43
|
- lib/henk/sequence.rb
|
45
44
|
- lib/henk/step.rb
|
46
45
|
- lib/henk/version.rb
|
@@ -53,19 +52,18 @@ require_paths:
|
|
53
52
|
- lib
|
54
53
|
required_ruby_version: !ruby/object:Gem::Requirement
|
55
54
|
requirements:
|
56
|
-
- -
|
55
|
+
- - '>='
|
57
56
|
- !ruby/object:Gem::Version
|
58
57
|
version: '0'
|
59
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
59
|
requirements:
|
61
|
-
- -
|
60
|
+
- - '>='
|
62
61
|
- !ruby/object:Gem::Version
|
63
62
|
version: '0'
|
64
63
|
requirements: []
|
65
64
|
rubyforge_project:
|
66
|
-
rubygems_version: 2.0.
|
65
|
+
rubygems_version: 2.0.14
|
67
66
|
signing_key:
|
68
67
|
specification_version: 4
|
69
68
|
summary: a ruby wrapper around the docker CLI
|
70
69
|
test_files: []
|
71
|
-
has_rdoc:
|
data/lib/henk/old.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
require 'sheller'
|
2
|
-
|
3
|
-
module Henk
|
4
|
-
extend self
|
5
|
-
|
6
|
-
def spawn(*arguments, &block)
|
7
|
-
block ||= method(:default_error_handler)
|
8
|
-
|
9
|
-
result = Sheller.execute(*arguments)
|
10
|
-
|
11
|
-
block.call(arguments, result) unless result.exit_status.success?
|
12
|
-
|
13
|
-
result
|
14
|
-
end
|
15
|
-
|
16
|
-
def spawn_for_id(*arguments, &block)
|
17
|
-
sheller_result = spawn(*arguments, &block)
|
18
|
-
|
19
|
-
sheller_result.stdout.chomp if sheller_result.exit_status.success?
|
20
|
-
end
|
21
|
-
|
22
|
-
def default_error_handler(sheller_arguments, sheller_result)
|
23
|
-
raise "Subshell invocation #{sheller_arguments.join ' '} failed, exit status #{sheller_result.exit_status}"
|
24
|
-
end
|
25
|
-
|
26
|
-
def pull(name, &block)
|
27
|
-
spawn('docker', 'pull', name, &block)
|
28
|
-
end
|
29
|
-
|
30
|
-
# can we make good use of this in Sequence?
|
31
|
-
def wait(container, &block)
|
32
|
-
exit_code_string = spawn_for_id('docker', 'wait', container, &block)
|
33
|
-
|
34
|
-
yield exit_code_string if block_given? && exit_code_string != '0'
|
35
|
-
|
36
|
-
exit_code_string
|
37
|
-
end
|
38
|
-
|
39
|
-
def commit(container, &block)
|
40
|
-
spawn_for_id('docker', 'commit', container, &block)
|
41
|
-
end
|
42
|
-
|
43
|
-
class Sequence
|
44
|
-
include Henk
|
45
|
-
|
46
|
-
attr_reader :image
|
47
|
-
|
48
|
-
def log_spawn(&block)
|
49
|
-
@log_spawn_block = block
|
50
|
-
end
|
51
|
-
|
52
|
-
def on_error(&block)
|
53
|
-
@error_block = block
|
54
|
-
end
|
55
|
-
|
56
|
-
def on_bad_exit(&block)
|
57
|
-
@bad_exit_block = block
|
58
|
-
end
|
59
|
-
|
60
|
-
def after_wait(&block)
|
61
|
-
@after_wait_block = block
|
62
|
-
end
|
63
|
-
|
64
|
-
def spawn(*arguments, &block)
|
65
|
-
@log_spawn_block.call(Sheller.command(*arguments)) if @log_spawn_block
|
66
|
-
super
|
67
|
-
end
|
68
|
-
|
69
|
-
def step(*arguments)
|
70
|
-
@image = nil
|
71
|
-
|
72
|
-
container = spawn_for_id(*arguments, &@error_block)
|
73
|
-
return unless container
|
74
|
-
|
75
|
-
wait_result = spawn('docker', 'wait', container)
|
76
|
-
return unless wait_result.exit_status.success?
|
77
|
-
|
78
|
-
exit_code_string = wait_result.stdout.chomp
|
79
|
-
|
80
|
-
@after_wait_block.call(container, exit_code_string) if @after_wait_block
|
81
|
-
|
82
|
-
unless exit_code_string == '0'
|
83
|
-
bad_exit_block.call(exit_code_string)
|
84
|
-
return
|
85
|
-
end
|
86
|
-
|
87
|
-
@image = commit(container, &@error_block)
|
88
|
-
end
|
89
|
-
|
90
|
-
def bad_exit_block
|
91
|
-
@bad_exit_block ||= Proc.new do |exit_code_string|
|
92
|
-
raise "Container exited with code #{exit_code_string}"
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|