docker-builder 0.1.31 → 0.1.32

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31f8f20a4c06dcd857f30ecd4c51150aa00696e1
4
- data.tar.gz: 1e421d96878d8ba19816b26e6244e6453530c3c9
3
+ metadata.gz: e90a5e99b9a343019561a04e30ece9dcf3c99d3a
4
+ data.tar.gz: 117834a1f3e17eb41bf1034b086b05ab12ec74aa
5
5
  SHA512:
6
- metadata.gz: 1661019db55a933fb618017c8a6ae4c397fdd2e4a70685393a69fe01ad2779ebbbd4dfe32ef2076bb48c9e7924e299f6e13ab27395e75cca968acede7ca2037e
7
- data.tar.gz: 29260015299048be1cd780983f4631b5d787c365a0fd7f3b1ff2a73973ba1742819ff0b0131bd9b212169cc0673daf1ef2a7d99edbea0b59681a5504c0900c68
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.31.gem
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
- bootstrap_type = (settings['install']['bootstrap']['type'] rescue nil)
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
- # start
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
- network= settings['docker']['network']
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
- run_bootsrap_shell_script_in_container(settings, install_bootstrap_script)
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.run_bootsrap_shell_script_in_container(settings, script_path)
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
@@ -1,3 +1,3 @@
1
1
  module DockerBuilder
2
- VERSION = "0.1.31"
2
+ VERSION = "0.1.32"
3
3
  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.31
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-21 00:00:00.000000000 Z
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler