construi 0.40.0 → 0.41.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.
- data/lib/construi/config.rb +13 -1
- data/lib/construi/console.rb +24 -0
- data/lib/construi/container.rb +5 -2
- data/lib/construi/options.rb +17 -0
- data/lib/construi/runner.rb +12 -4
- data/lib/construi/target.rb +26 -5
- data/lib/construi/version.rb +1 -1
- data/spec/lib/construi/container_spec.rb +2 -1
- data/spec/lib/construi/runner_spec.rb +13 -1
- metadata +4 -3
data/lib/construi/config.rb
CHANGED
@@ -93,9 +93,19 @@ module Construi
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
module Volumes
|
97
|
+
def volumes
|
98
|
+
with_parent([], &:volumes).concat get(:volumes, [])
|
99
|
+
end
|
100
|
+
|
101
|
+
def volumes_from
|
102
|
+
with_parent([], &:volumes_from).concat get(:volumes_from, [])
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
96
106
|
module Options
|
97
107
|
def options
|
98
|
-
{ env: env, privileged: privileged
|
108
|
+
{ env: env, privileged: privileged?, volumes: volumes }
|
99
109
|
end
|
100
110
|
end
|
101
111
|
|
@@ -105,6 +115,7 @@ module Construi
|
|
105
115
|
include Image
|
106
116
|
include Files
|
107
117
|
include EnvironmentVariables
|
118
|
+
include Volumes
|
108
119
|
include Options
|
109
120
|
|
110
121
|
attr_reader :yaml
|
@@ -130,6 +141,7 @@ module Construi
|
|
130
141
|
include Image
|
131
142
|
include Files
|
132
143
|
include EnvironmentVariables
|
144
|
+
include Volumes
|
133
145
|
include Links
|
134
146
|
end
|
135
147
|
|
data/lib/construi/console.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'construi/options'
|
1
2
|
|
2
3
|
module Construi
|
3
4
|
module Console
|
@@ -11,6 +12,10 @@ module Construi
|
|
11
12
|
puts msg.green
|
12
13
|
end
|
13
14
|
|
15
|
+
def self.verbose(msg)
|
16
|
+
puts msg if Options.enabled?(:verbose)
|
17
|
+
end
|
18
|
+
|
14
19
|
def self.progress(msg)
|
15
20
|
puts
|
16
21
|
info msg
|
@@ -22,6 +27,25 @@ module Construi
|
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
30
|
+
def self.logger(name)
|
31
|
+
Logger.new name
|
32
|
+
end
|
33
|
+
|
34
|
+
class Logger
|
35
|
+
attr_reader :name
|
36
|
+
|
37
|
+
def initialize(name)
|
38
|
+
@name = name
|
39
|
+
end
|
40
|
+
|
41
|
+
def debug?
|
42
|
+
true
|
43
|
+
end
|
44
|
+
|
45
|
+
def debug(msg)
|
46
|
+
Console.verbose "#{name}: #{msg}"
|
47
|
+
end
|
48
|
+
end
|
25
49
|
end
|
26
50
|
end
|
27
51
|
|
data/lib/construi/container.rb
CHANGED
@@ -69,11 +69,14 @@ module Construi
|
|
69
69
|
env = options[:env] || []
|
70
70
|
privileged = options[:privileged] || false
|
71
71
|
links = options[:links] || []
|
72
|
+
volumes = options[:volumes] || []
|
73
|
+
volumes_from = options[:volumes_from] || []
|
72
74
|
|
73
75
|
host_config = {
|
74
|
-
'Binds' => ["#{Dir.pwd}:/var/workspace"],
|
76
|
+
'Binds' => ["#{Dir.pwd}:/var/workspace"].concat(volumes),
|
75
77
|
'Privileged' => privileged,
|
76
|
-
'Links' => links
|
78
|
+
'Links' => links,
|
79
|
+
'VolumesFrom' => volumes_from
|
77
80
|
}
|
78
81
|
|
79
82
|
create_options = {
|
data/lib/construi/runner.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
|
2
|
+
require 'construi/console'
|
2
3
|
require 'construi/container'
|
3
4
|
require 'construi/image'
|
4
5
|
require 'construi/target'
|
@@ -7,6 +8,7 @@ require 'construi/version'
|
|
7
8
|
|
8
9
|
require 'colorize'
|
9
10
|
require 'docker'
|
11
|
+
require 'optparse'
|
10
12
|
|
11
13
|
module Construi
|
12
14
|
DOCKER_TIMEOUT = 60
|
@@ -21,7 +23,9 @@ module Construi
|
|
21
23
|
docker_host = ENV['DOCKER_HOST']
|
22
24
|
Docker.url = docker_host if docker_host
|
23
25
|
|
24
|
-
|
26
|
+
Console.verbose "Docker url: #{Docker.url}"
|
27
|
+
|
28
|
+
Docker.logger = Console.logger 'Docker'
|
25
29
|
|
26
30
|
Excon.defaults[:ssl_verify_peer] = false
|
27
31
|
|
@@ -34,11 +38,15 @@ module Construi
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def run(targets)
|
37
|
-
|
41
|
+
OptionParser.new do |opts|
|
42
|
+
opts.on '-v', '--[no-]verbose' do |v|
|
43
|
+
Options.enable(:verbose) if v
|
44
|
+
end
|
45
|
+
end.parse!
|
38
46
|
|
39
|
-
|
47
|
+
Console.verbose "Construi version: #{Construi::VERSION}"
|
40
48
|
|
41
|
-
|
49
|
+
setup_docker
|
42
50
|
|
43
51
|
targets.map { |t| Target.new t, @config.target(t) } .each(&:run)
|
44
52
|
end
|
data/lib/construi/target.rb
CHANGED
@@ -22,11 +22,13 @@ module Construi
|
|
22
22
|
final_image = IntermediateImage.seed(create_initial_image).reduce(commands) do |image, command|
|
23
23
|
Console.progress " > #{command}"
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
options = config.options.merge(
|
26
|
+
links: link_option(links),
|
27
|
+
volumes_from: volumes_from_option(config, links),
|
28
|
+
name: name
|
29
|
+
)
|
28
30
|
|
29
|
-
image.run command,
|
31
|
+
image.run command, options
|
30
32
|
end
|
31
33
|
|
32
34
|
final_image.delete
|
@@ -43,7 +45,26 @@ module Construi
|
|
43
45
|
|
44
46
|
def start_linked_images
|
45
47
|
@config.links.map do |(name, config)|
|
46
|
-
|
48
|
+
options = config.options.merge(
|
49
|
+
name: name,
|
50
|
+
log_lifecycle: true
|
51
|
+
)
|
52
|
+
|
53
|
+
Image.from(config).start options
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def link_option(links)
|
58
|
+
links.each_with_object([]) do |l, o|
|
59
|
+
o << "#{l.id}:#{l.name}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def volumes_from_option(config, links)
|
64
|
+
config.volumes_from.each_with_object([]) do |v, o|
|
65
|
+
volume_from = links.detect { |l| l.name == v }
|
66
|
+
|
67
|
+
o << (volume_from.nil? ? v : volume_from.id)
|
47
68
|
end
|
48
69
|
end
|
49
70
|
end
|
data/lib/construi/version.rb
CHANGED
@@ -9,6 +9,9 @@ RSpec.describe Construi::Runner do
|
|
9
9
|
|
10
10
|
before { allow(image_class).to receive(:from).and_return image }
|
11
11
|
|
12
|
+
let(:option_parser) { instance_double(OptionParser).as_null_object }
|
13
|
+
before { allow(OptionParser).to receive(:new).and_return option_parser }
|
14
|
+
|
12
15
|
subject(:runner) { Construi::Runner.new(config) }
|
13
16
|
|
14
17
|
describe '#run' do
|
@@ -32,7 +35,16 @@ RSpec.describe Construi::Runner do
|
|
32
35
|
subject! { runner.run(targets) }
|
33
36
|
|
34
37
|
it { expect(docker).to have_received(:validate_version!) }
|
35
|
-
it
|
38
|
+
it do
|
39
|
+
expect(image).to have_received(:run)
|
40
|
+
.with('cmd1',
|
41
|
+
env: [],
|
42
|
+
privileged: false,
|
43
|
+
volumes: [],
|
44
|
+
volumes_from: [],
|
45
|
+
links: [],
|
46
|
+
name: 'target1')
|
47
|
+
end
|
36
48
|
it { expect(image).to have_received(:delete) }
|
37
49
|
|
38
50
|
it { expect($stdout.string).to include('Running target1...'.green) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: construi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.41.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: 2015-
|
12
|
+
date: 2015-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: docker-api
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- lib/construi/console.rb
|
247
247
|
- lib/construi/container.rb
|
248
248
|
- lib/construi/image.rb
|
249
|
+
- lib/construi/options.rb
|
249
250
|
- lib/construi/runner.rb
|
250
251
|
- lib/construi/target.rb
|
251
252
|
- lib/construi/version.rb
|
@@ -282,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
283
|
version: '0'
|
283
284
|
segments:
|
284
285
|
- 0
|
285
|
-
hash:
|
286
|
+
hash: 4041224697425592295
|
286
287
|
requirements: []
|
287
288
|
rubyforge_project:
|
288
289
|
rubygems_version: 1.8.23.2
|