minke 1.14.1 → 1.14.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/docker/Gemfile +2 -2
- data/lib/minke/command.rb +2 -8
- data/lib/minke/config/config.rb +3 -2
- data/lib/minke/config/reader.rb +1 -0
- data/lib/minke/docker/docker_compose.rb +4 -0
- data/lib/minke/docker/docker_runner.rb +70 -23
- data/lib/minke/docker/network.rb +8 -2
- data/lib/minke/scripts/minke +1 -1
- data/lib/minke/tasks/shell.rb +13 -2
- data/lib/minke/tasks/task.rb +9 -2
- data/lib/minke/version.rb +1 -1
- 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: 3796c60b0992fa90f5b2408e24de7b731ea396cc
|
4
|
+
data.tar.gz: 395db562982e41ca0351c498458808248c91b149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef53172cc692ab629f97a81fd97115fca54ba817ccdee931e970945c64bd708024d953f2ade1ed2e589ae6b3f886dcd330eb9505c019753f6f3ace0d7d261526
|
7
|
+
data.tar.gz: 5a68dee19e8eea1bec8881722f1e832e19a492e355f2e4613bea0405ad81e25f41f40fffe4ae650e8e4945c70373e826ebae3fde3fb5935a76217ad10b9bdf1c
|
data/.travis.yml
CHANGED
@@ -30,7 +30,7 @@ after_deploy:
|
|
30
30
|
docker build -t nicholasjackson/minke --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` .;
|
31
31
|
docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD";
|
32
32
|
docker push nicholasjackson/minke:latest;
|
33
|
-
docker tag nicholasjackson/minke nicholasjackson/minke:1.14.
|
34
|
-
docker push nicholasjackson/minke:1.14.
|
33
|
+
docker tag nicholasjackson/minke nicholasjackson/minke:1.14.2;
|
34
|
+
docker push nicholasjackson/minke:1.14.2;
|
35
35
|
curl https://hooks.microbadger.com/images/nicholasjackson/minke/tkpohfdrYPE0B0TL5NzLcOap4k0=;
|
36
36
|
fi
|
data/docker/Gemfile
CHANGED
@@ -3,8 +3,8 @@ source 'https://rubygems.org'
|
|
3
3
|
gem "rake"
|
4
4
|
gem "cucumber"
|
5
5
|
|
6
|
-
gem 'minke', "= 1.14.
|
6
|
+
gem 'minke', "= 1.14.2"
|
7
7
|
gem 'minke-generator-swift', "= 0.4"
|
8
8
|
gem 'minke-generator-netmvc'
|
9
|
-
gem 'minke-generator-go', "= 0.
|
9
|
+
gem 'minke-generator-go', "= 0.9.0"
|
10
10
|
gem 'minke-generator-spring'
|
data/lib/minke/command.rb
CHANGED
@@ -18,12 +18,6 @@ module Minke
|
|
18
18
|
logger = Minke::Logging.create_logger(self.verbose)
|
19
19
|
shell = Minke::Helpers::Shell.new(logger)
|
20
20
|
|
21
|
-
# variables = Minke::Generators::ConfigVariables.new.tap do |v|
|
22
|
-
# v.application_name = @config.application_name
|
23
|
-
# v.namespace = @config.namespace
|
24
|
-
# v.src_root = File.expand_path('../')
|
25
|
-
# end
|
26
|
-
|
27
21
|
task_runner = Minke::Tasks::TaskRunner.new ({
|
28
22
|
:ruby_helper => Minke::Helpers::Ruby.new,
|
29
23
|
:copy_helper => Minke::Helpers::Copy.new,
|
@@ -51,7 +45,7 @@ module Minke
|
|
51
45
|
return {
|
52
46
|
:config => @config,
|
53
47
|
:task_name => task,
|
54
|
-
:docker_runner => Minke::Docker::DockerRunner.new(logger, network_name),
|
48
|
+
:docker_runner => Minke::Docker::DockerRunner.new(logger, network_name, project_name),
|
55
49
|
:task_runner => task_runner,
|
56
50
|
:shell_helper => shell,
|
57
51
|
:logger_helper => logger,
|
@@ -110,7 +104,7 @@ module Minke
|
|
110
104
|
end
|
111
105
|
|
112
106
|
def build_image
|
113
|
-
if config.
|
107
|
+
if config.build != nil
|
114
108
|
test
|
115
109
|
tasks = create_tasks :build
|
116
110
|
tasks[:build_image].run
|
data/lib/minke/config/config.rb
CHANGED
@@ -249,10 +249,10 @@ module Minke
|
|
249
249
|
attr_accessor :docker
|
250
250
|
|
251
251
|
##
|
252
|
-
#
|
252
|
+
# ports contains an array of Minke::Config::ContainerAddress which holds the details
|
253
253
|
# for the address the public and private ports of any containers which will be started by this
|
254
254
|
# task.
|
255
|
-
attr_accessor :
|
255
|
+
attr_accessor :ports
|
256
256
|
end
|
257
257
|
|
258
258
|
##
|
@@ -335,5 +335,6 @@ module Minke
|
|
335
335
|
# - private used for linked containers
|
336
336
|
attr_accessor :type
|
337
337
|
end
|
338
|
+
|
338
339
|
end
|
339
340
|
end
|
data/lib/minke/config/reader.rb
CHANGED
@@ -63,6 +63,7 @@ module Minke
|
|
63
63
|
t.docker = read_docker_section section['docker'] unless section['docker'] == nil
|
64
64
|
t.pre = read_pre_post_section section['pre'] unless section['pre'] == nil
|
65
65
|
t.post = read_pre_post_section section['post'] unless section['post'] == nil
|
66
|
+
t.ports = section['ports'] unless section['ports'] == nil
|
66
67
|
end
|
67
68
|
end
|
68
69
|
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Minke
|
2
2
|
module Docker
|
3
3
|
class DockerRunner
|
4
|
-
def initialize logger, network = nil
|
4
|
+
def initialize logger, network = nil, project = nil
|
5
5
|
@network = network ||= 'bridge'
|
6
6
|
@logger = logger
|
7
|
+
@project = project
|
7
8
|
end
|
8
9
|
|
9
10
|
##
|
@@ -74,8 +75,8 @@ module Minke
|
|
74
75
|
'Cmd' => args[:command],
|
75
76
|
"Binds" => args[:volumes],
|
76
77
|
"Env" => args[:environment],
|
78
|
+
'NetworkMode' => @network,
|
77
79
|
'WorkingDir' => args[:working_directory],
|
78
|
-
'NetworkMode' => @network,
|
79
80
|
'name' => args[:name],
|
80
81
|
'PublishAllPorts' => true
|
81
82
|
)
|
@@ -106,42 +107,57 @@ module Minke
|
|
106
107
|
return container, success
|
107
108
|
end
|
108
109
|
|
109
|
-
|
110
|
-
# create_and_run_blocking_container starts a conatainer of the given image name and executes a command,
|
110
|
+
##
|
111
|
+
# create_and_run_blocking_container starts a conatainer of the given image name and executes a command,
|
112
|
+
# this method blocks until the container exits
|
111
113
|
#
|
112
114
|
# Returns:
|
113
115
|
# - Docker::Container
|
114
116
|
# - sucess (true if command succeded without error)
|
115
117
|
def create_and_run_blocking_container args
|
118
|
+
host_config = get_port_bindings args
|
119
|
+
host_config['NetworkMode'] = @network
|
120
|
+
host_config['Binds'] = args[:volumes]
|
121
|
+
|
122
|
+
if args[:links] != nil
|
123
|
+
network = {'EndpointsConfig' => {@network =>
|
124
|
+
{'Links' => args[:links].map {|l| "#{@project}_#{l}_1:#{l}"}}
|
125
|
+
}}
|
126
|
+
end
|
127
|
+
|
128
|
+
exposed_ports = get_exposed_ports args
|
129
|
+
|
116
130
|
# update the timeout for the Excon Http Client
|
117
131
|
# set the chunk size to enable streaming of log files
|
118
|
-
|
132
|
+
#::Docker.options = {:chunk_size => 1, :read_timeout => 3600}
|
119
133
|
container = ::Docker::Container.create(
|
120
|
-
'Image'
|
121
|
-
'Cmd'
|
122
|
-
"Binds"
|
123
|
-
"Env"
|
124
|
-
'WorkingDir'
|
125
|
-
'name'
|
126
|
-
'NetworkMode'
|
127
|
-
"OpenStdin"
|
128
|
-
"
|
129
|
-
|
130
|
-
'
|
134
|
+
'Image' => args[:image],
|
135
|
+
'Cmd' => args[:command],
|
136
|
+
"Binds" => args[:volumes],
|
137
|
+
"Env" => args[:environment],
|
138
|
+
'WorkingDir' => args[:working_directory],
|
139
|
+
'name' => args[:name],
|
140
|
+
'NetworkMode' => @network,
|
141
|
+
"OpenStdin" => true,
|
142
|
+
"Tty" => true,
|
143
|
+
'PublishAllPorts' => true,
|
144
|
+
'ExposedPorts' => exposed_ports,
|
145
|
+
'HostConfig' => host_config,
|
146
|
+
'NetworkingConfig' => network
|
131
147
|
)
|
132
148
|
|
133
149
|
container.start
|
134
150
|
|
151
|
+
success = (container.json['State']['ExitCode'] == 0) ? true: false
|
152
|
+
@logger.error("Unable to start docker container") unless success
|
153
|
+
|
135
154
|
STDIN.raw do |stdin|
|
136
155
|
container.attach(stdin: stdin, tty: true) do |chunk|
|
137
156
|
print chunk
|
138
157
|
end
|
139
158
|
end
|
140
159
|
|
141
|
-
|
142
|
-
@logger.error(output) unless success
|
143
|
-
|
144
|
-
return container, success
|
160
|
+
return container, success
|
145
161
|
end
|
146
162
|
|
147
163
|
##
|
@@ -152,12 +168,12 @@ module Minke
|
|
152
168
|
::Docker::Image.build_from_dir(dockerfile_dir, {:t => name}) do |v|
|
153
169
|
data = /{"stream.*:"(.*)".*/.match(v)
|
154
170
|
data = data[1].encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''}) unless data == nil || data.length < 1
|
171
|
+
data.chomp('\n')
|
155
172
|
$stdout.puts data unless data == nil
|
156
173
|
end
|
157
174
|
rescue => e
|
158
|
-
|
159
|
-
|
160
|
-
@logger.error "Error: #{message[1]}" unless message == nil || message.length < 1
|
175
|
+
message = e.message
|
176
|
+
@logger.error "Error: #{message}" unless message == nil || message.length < 1
|
161
177
|
end
|
162
178
|
end
|
163
179
|
|
@@ -198,6 +214,37 @@ module Minke
|
|
198
214
|
def docker_version
|
199
215
|
::Docker.version['Version']
|
200
216
|
end
|
217
|
+
|
218
|
+
def get_port_bindings args
|
219
|
+
host_config = {}
|
220
|
+
if args[:ports] != nil
|
221
|
+
port_bindings = {}
|
222
|
+
args[:ports].each do |p|
|
223
|
+
hostDest = p.split(":")
|
224
|
+
if hostDest[0] == ""
|
225
|
+
port_bindings[hostDest[1] + "/tcp"] = [{'HostPort' => "#{rand(40000..50000)}", 'HostIp' => "0.0.0.0"}]
|
226
|
+
else
|
227
|
+
port_bindings[hostDest[1] + "/tcp"] = [{'HostPort' => hostDest[0], 'HostIp' => "0.0.0.0"}]
|
228
|
+
end
|
229
|
+
end
|
230
|
+
host_config = {'PortBindings' => port_bindings }
|
231
|
+
end
|
232
|
+
|
233
|
+
return host_config
|
234
|
+
end
|
235
|
+
|
236
|
+
def get_exposed_ports args
|
237
|
+
port_bindings = {}
|
238
|
+
if args[:ports] != nil
|
239
|
+
args[:ports].each do |p|
|
240
|
+
hostDest = p.split(":")
|
241
|
+
port_bindings[hostDest[1] + "/tcp"] = {}
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
return port_bindings
|
246
|
+
end
|
247
|
+
|
201
248
|
end
|
202
249
|
end
|
203
250
|
end
|
data/lib/minke/docker/network.rb
CHANGED
@@ -4,14 +4,20 @@ module Minke
|
|
4
4
|
def initialize network_name, shell_runner
|
5
5
|
@network_name = network_name
|
6
6
|
@shell_runner = shell_runner
|
7
|
+
@created_network = false
|
7
8
|
end
|
8
9
|
|
9
10
|
def create
|
10
|
-
|
11
|
+
if find_network.to_s == ''
|
12
|
+
@shell_runner.execute("docker network create #{@network_name}")
|
13
|
+
@created_network = true
|
14
|
+
end
|
11
15
|
end
|
12
16
|
|
13
17
|
def remove
|
14
|
-
|
18
|
+
if find_network.to_s != '' && @created_network == true
|
19
|
+
@shell_runner.execute("docker network rm #{@network_name}", true)
|
20
|
+
end
|
15
21
|
end
|
16
22
|
|
17
23
|
private
|
data/lib/minke/scripts/minke
CHANGED
data/lib/minke/tasks/shell.rb
CHANGED
@@ -9,13 +9,15 @@ module Minke
|
|
9
9
|
compose_file = @config.compose_file_for(@task_name)
|
10
10
|
compose_file = File.expand_path(compose_file)
|
11
11
|
compose = @docker_compose_factory.create compose_file unless compose_file == nil
|
12
|
-
|
12
|
+
|
13
13
|
run_with_block do |pre_tasks, post_tasks|
|
14
14
|
begin
|
15
|
+
services = create_list_of_links(compose.services)
|
15
16
|
compose.up
|
16
17
|
pre_tasks.call
|
18
|
+
|
17
19
|
@logger.info "## Shell open to build container"
|
18
|
-
run_command_in_container('/bin/sh', true)
|
20
|
+
run_command_in_container(['/bin/sh','-c','ls && /bin/sh'], true, services, @task_settings.ports)
|
19
21
|
rescue SystemExit, Interrupt
|
20
22
|
@logger.info "Stopping...."
|
21
23
|
raise SystemExit
|
@@ -26,6 +28,15 @@ module Minke
|
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
31
|
+
def create_list_of_links compose_services
|
32
|
+
services = []
|
33
|
+
compose_services.each do |k,v|
|
34
|
+
services.push(k)
|
35
|
+
end
|
36
|
+
|
37
|
+
services
|
38
|
+
end
|
29
39
|
end
|
40
|
+
|
30
41
|
end
|
31
42
|
end
|
data/lib/minke/tasks/task.rb
CHANGED
@@ -63,7 +63,7 @@ module Minke
|
|
63
63
|
|
64
64
|
##
|
65
65
|
# runs the given command in a docker container
|
66
|
-
def run_command_in_container
|
66
|
+
def run_command_in_container(command, blocking = false, links = nil, ports = nil)
|
67
67
|
begin
|
68
68
|
@logger.info "Running command: #{command}"
|
69
69
|
settings = @generator_config.build_settings.docker_settings
|
@@ -78,12 +78,19 @@ module Minke
|
|
78
78
|
environment.push "GIT_SSH_COMMAND=ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
79
79
|
end
|
80
80
|
|
81
|
+
if @task_settings.consul_loader != nil && links != nil
|
82
|
+
links.push "consul"
|
83
|
+
end
|
84
|
+
|
85
|
+
|
81
86
|
args = {
|
82
87
|
:image => build_image,
|
83
88
|
:command => command,
|
84
89
|
:volumes => volumes,
|
85
90
|
:environment => environment,
|
86
|
-
:working_directory => working_directory
|
91
|
+
:working_directory => working_directory,
|
92
|
+
:links => links,
|
93
|
+
:ports => ports,
|
87
94
|
}
|
88
95
|
|
89
96
|
if blocking == false
|
data/lib/minke/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.14.
|
4
|
+
version: 1.14.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nic Jackson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|