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 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