docker-builder 0.1.31 → 0.1.32
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/install_local.sh +1 -1
- data/lib/docker_builder/manager.rb +96 -10
- data/lib/docker_builder/version.rb +1 -1
- data/readme.md +18 -0
- 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: e90a5e99b9a343019561a04e30ece9dcf3c99d3a
|
4
|
+
data.tar.gz: 117834a1f3e17eb41bf1034b086b05ab12ec74aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b00af59417ad24e1e676bc0e9a4ee093625901c04f833d81c0008da74d6172f30718a7c2e08bcfcb2702bfc269f3cfd209e596e7a09382be8801494967b9dea
|
7
|
+
data.tar.gz: 1e0a25f0ebb8b9ba81b377c5b925deb3de932cd9a84711fa8ef5c3c6937ade06c362ff5163789c492820c0ab1a48ee18bc428cbe721971f04b6fa2c37d22c222
|
data/install_local.sh
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
gem build docker-builder.gemspec
|
2
|
-
gem install ./docker-builder-0.1.
|
2
|
+
gem install ./docker-builder-0.1.32.gem
|
@@ -13,6 +13,19 @@ class Manager
|
|
13
13
|
end
|
14
14
|
|
15
15
|
|
16
|
+
def self.save_config_json(settings)
|
17
|
+
require 'json'
|
18
|
+
filename = settings.filename_config_json
|
19
|
+
FileUtils.mkdir_p(File.dirname(filename))
|
20
|
+
File.open(filename,"w+") do |f|
|
21
|
+
f.write(settings.all_attributes.to_json)
|
22
|
+
end
|
23
|
+
|
24
|
+
#puts "f==#{filename}"
|
25
|
+
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
16
29
|
###
|
17
30
|
def self.build_image(server_name, settings=nil)
|
18
31
|
puts "building image for #{server_name}..."
|
@@ -136,23 +149,36 @@ class Manager
|
|
136
149
|
def self._run_container(settings)
|
137
150
|
puts "run container ..."
|
138
151
|
|
139
|
-
|
152
|
+
# generate config
|
153
|
+
save_config_json(settings)
|
140
154
|
|
141
|
-
#
|
155
|
+
# create
|
142
156
|
create_container(settings)
|
143
157
|
|
158
|
+
setup_network(settings)
|
159
|
+
|
160
|
+
|
161
|
+
### BEFORE START
|
162
|
+
|
163
|
+
# run setup provision scripts
|
164
|
+
setup_scripts = (settings['provision']['setup'] rescue [])
|
165
|
+
setup_scripts.each do |script|
|
166
|
+
_run_setup_script(settings, script)
|
167
|
+
end
|
168
|
+
|
169
|
+
# ??? TODO: remove it ?
|
170
|
+
# run some provision scripts - for chef
|
171
|
+
bootstrap_type = (settings['install']['bootstrap']['type'] rescue nil)
|
172
|
+
|
144
173
|
# before start
|
145
174
|
if bootstrap_type && bootstrap_type=='chef'
|
146
175
|
_bootstrap_container_prepare(settings)
|
147
176
|
end
|
148
177
|
|
149
178
|
|
150
|
-
|
179
|
+
### START && run provision after start
|
151
180
|
start_container(name, settings)
|
152
181
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
182
|
true
|
157
183
|
end
|
158
184
|
|
@@ -162,22 +188,42 @@ class Manager
|
|
162
188
|
# create
|
163
189
|
cmd %Q(docker create --name #{settings.container_name} #{settings.docker_ports_string} #{settings.docker_volumes_string} #{settings.docker_volumes_from_string} #{settings.docker_links_string} #{settings.run_extra_options_string} #{settings.run_env_variables_string} #{settings.image_name} #{settings['docker']['command']} #{settings['docker']['run_options']})
|
164
190
|
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
|
195
|
+
def self.setup_network(settings)
|
196
|
+
container_name = settings.container_name
|
197
|
+
|
165
198
|
# networks
|
166
199
|
networks = settings['docker'].fetch('network', {}).fetch('networks', [])
|
167
200
|
if networks
|
168
201
|
networks.each do |net|
|
202
|
+
next if net['action']=='remove'
|
203
|
+
|
169
204
|
ip = net['ip']
|
170
205
|
s_ip = "--ip #{ip}" if ip
|
171
206
|
#puts %Q(docker network connect #{s_ip} #{net['net']} #{settings.container_name})
|
172
207
|
cmd %Q(docker network connect #{s_ip} #{net['net']} #{settings.container_name})
|
173
208
|
end
|
209
|
+
|
210
|
+
# remove
|
211
|
+
networks.each do |net|
|
212
|
+
next unless net['action']=='remove'
|
213
|
+
cmd %Q(docker network disconnect #{net['net']} #{settings.container_name})
|
214
|
+
end
|
174
215
|
end
|
175
216
|
end
|
176
217
|
|
218
|
+
|
219
|
+
|
177
220
|
def self.start_container(name, settings)
|
178
221
|
# start
|
179
222
|
cmd %Q(docker start #{settings.container_name})
|
180
223
|
|
224
|
+
# wait
|
225
|
+
wait_until_running(settings.container_name)
|
226
|
+
|
181
227
|
# setup
|
182
228
|
setup_container_after_start(settings)
|
183
229
|
|
@@ -186,10 +232,26 @@ class Manager
|
|
186
232
|
end
|
187
233
|
|
188
234
|
|
235
|
+
def self.wait_until_running(container_name)
|
236
|
+
retries = 20
|
237
|
+
until system("docker exec #{container_name} true") || retries < 0
|
238
|
+
sleep 0.5
|
239
|
+
retries == retries - 1
|
240
|
+
end
|
241
|
+
|
242
|
+
assert_container_running(container_name)
|
243
|
+
end
|
244
|
+
|
245
|
+
def self.assert_container_running(container_name)
|
246
|
+
res = system("docker exec #{container_name} true")
|
247
|
+
assert res, "Container #{container_name} is not running"
|
248
|
+
end
|
249
|
+
|
189
250
|
def self.setup_container_after_start(settings)
|
190
251
|
|
191
252
|
# default gateway
|
192
|
-
|
253
|
+
=begin
|
254
|
+
network = settings['docker']['network']
|
193
255
|
if network
|
194
256
|
gateway = network['default_gateway']
|
195
257
|
|
@@ -199,7 +261,7 @@ class Manager
|
|
199
261
|
cmd %Q(docker exec #{settings.container_name} ip route change default via #{gateway})
|
200
262
|
end
|
201
263
|
end
|
202
|
-
|
264
|
+
=end
|
203
265
|
|
204
266
|
|
205
267
|
# fix hosts
|
@@ -245,7 +307,7 @@ class Manager
|
|
245
307
|
#script = settings['install']['bootstrap']['script'] || '/opt/bootstrap/bootstrap.sh'
|
246
308
|
|
247
309
|
# bootstsrap with shell script
|
248
|
-
|
310
|
+
run_bootstrap_shell_script_in_container(settings, install_bootstrap_script)
|
249
311
|
end
|
250
312
|
|
251
313
|
|
@@ -253,7 +315,7 @@ class Manager
|
|
253
315
|
end
|
254
316
|
|
255
317
|
|
256
|
-
def self.
|
318
|
+
def self.run_bootstrap_shell_script_in_container(settings, script_path)
|
257
319
|
# exec
|
258
320
|
cmd %Q(docker exec #{settings.container_name} #{script_path} )
|
259
321
|
end
|
@@ -285,6 +347,21 @@ class Manager
|
|
285
347
|
|
286
348
|
### provision
|
287
349
|
|
350
|
+
def self._run_setup_script(settings, script)
|
351
|
+
if script['type']=='shell'
|
352
|
+
return _run_setup_script_shell(settings, script)
|
353
|
+
end
|
354
|
+
|
355
|
+
return nil
|
356
|
+
end
|
357
|
+
|
358
|
+
def self._run_setup_script_shell(settings, script)
|
359
|
+
#
|
360
|
+
cmd %Q(cd #{settings.dir_server_root} && #{script['script']} )
|
361
|
+
|
362
|
+
end
|
363
|
+
|
364
|
+
|
288
365
|
def self._bootstrap_container_prepare(settings)
|
289
366
|
require_relative '../../lib/docker_builder/provisioner/provisioner_chef'
|
290
367
|
|
@@ -501,5 +578,14 @@ class Manager
|
|
501
578
|
cmd %Q(cd #{Config.root_path} && rm -f #{settings.filename_chef_node_json} )
|
502
579
|
cmd %Q(cd #{Config.root_path} && rm -f #{settings.filename_chef_client_json} )
|
503
580
|
end
|
581
|
+
|
582
|
+
|
583
|
+
### common helpers
|
584
|
+
def self.assert(expression, string = "Assert failed")
|
585
|
+
unless expression
|
586
|
+
throw Exception.new string
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
504
590
|
end
|
505
591
|
end
|
data/readme.md
CHANGED
@@ -697,6 +697,24 @@ RUN chmod +x /opt/bootstrap/bootstrap.sh
|
|
697
697
|
|
698
698
|
|
699
699
|
|
700
|
+
## remove default network
|
701
|
+
|
702
|
+
remove default network 'bridge'
|
703
|
+
|
704
|
+
```
|
705
|
+
'docker'=> {
|
706
|
+
..
|
707
|
+
'network': {
|
708
|
+
networks: {
|
709
|
+
{net: 'bridge', action: 'remove'}, # remove default docker bridge
|
710
|
+
{net: 'mybridge1', ip: '10.1.0.12'},
|
711
|
+
{net: 'my_overlay1', ip: '51.1.0.15'},
|
712
|
+
}
|
713
|
+
}
|
714
|
+
|
715
|
+
}
|
716
|
+
```
|
717
|
+
|
700
718
|
## multiple networks
|
701
719
|
|
702
720
|
```
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.32
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Ivak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|