minke 1.14.1 → 1.14.2
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/.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
|