docker-app 0.2.1

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.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/CODE_OF_CONDUCT.md +49 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/bin/console +14 -0
  7. data/bin/setup +8 -0
  8. data/docker-app.gemspec +36 -0
  9. data/exe/docker-app +20 -0
  10. data/lib/docker_app.rb +23 -0
  11. data/lib/docker_app/builder/packer.rb +105 -0
  12. data/lib/docker_app/chef/.chef/knife.rb +118 -0
  13. data/lib/docker_app/chef/chef_build_image.rb +55 -0
  14. data/lib/docker_app/chef/chef_destroy_container.rb +13 -0
  15. data/lib/docker_app/chef/chef_destroy_image.rb +17 -0
  16. data/lib/docker_app/chef/chef_exec_container.rb +16 -0
  17. data/lib/docker_app/chef/chef_run_container.rb +64 -0
  18. data/lib/docker_app/chef/install_container_service.rb +14 -0
  19. data/lib/docker_app/cli.rb +502 -0
  20. data/lib/docker_app/command.rb +16 -0
  21. data/lib/docker_app/config.rb +249 -0
  22. data/lib/docker_app/config/dsl.rb +64 -0
  23. data/lib/docker_app/config/helpers.rb +99 -0
  24. data/lib/docker_app/manager_container.rb +376 -0
  25. data/lib/docker_app/manager_image.rb +119 -0
  26. data/lib/docker_app/manager_swarm.rb +66 -0
  27. data/lib/docker_app/provisioner/base.rb +179 -0
  28. data/lib/docker_app/provisioner/chef.rb +93 -0
  29. data/lib/docker_app/server_settings.rb +361 -0
  30. data/lib/docker_app/version.rb +3 -0
  31. data/lib/templates/example-chef/.chef/knife.rb +5 -0
  32. data/lib/templates/example-chef/config.rb.erb +18 -0
  33. data/lib/templates/example-chef/servers/server1/.chef/knife.rb +8 -0
  34. data/lib/templates/example-chef/servers/server1/config.rb.erb +54 -0
  35. data/lib/templates/example-chef/servers/server1/cookbooks/server1/README.md +1 -0
  36. data/lib/templates/example-chef/servers/server1/cookbooks/server1/metadata.rb.erb +8 -0
  37. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/build.rb +10 -0
  38. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install.rb +36 -0
  39. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install_host.rb +9 -0
  40. data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/index.html.erb +5 -0
  41. data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/nginx-sites/default.conf.erb +45 -0
  42. data/readme.md +853 -0
  43. data/readme_developers.md +54 -0
  44. metadata +129 -0
@@ -0,0 +1,13 @@
1
+ base_dir = File.dirname(__FILE__)
2
+
3
+ #
4
+ require 'chef/provisioning'
5
+
6
+ #
7
+ server_name = ENV['SERVER_NAME']
8
+
9
+ #
10
+ with_driver 'docker'
11
+ machine node['base']['container_name'] do
12
+ action :destroy
13
+ end
@@ -0,0 +1,17 @@
1
+ base_dir = File.dirname(__FILE__)
2
+
3
+ #
4
+ require 'chef/provisioning'
5
+
6
+ #
7
+ server_name = ENV['SERVER_NAME']
8
+
9
+
10
+ # settings
11
+
12
+ ### docker image
13
+ with_driver 'docker'
14
+ machine_image node['base']['image_name'] do
15
+ action :destroy
16
+ end
17
+
@@ -0,0 +1,16 @@
1
+ base_dir = File.dirname(__FILE__)
2
+
3
+ # settings
4
+ require_relative 'lib/settings'
5
+ #
6
+ server_name = ENV['SERVER_NAME']
7
+ settings = Settings.load_settings_for_server(server_name)
8
+
9
+ #
10
+ include_recipe 'docker'
11
+
12
+ docker_exec 'touch_it' do
13
+ container settings.container_name
14
+ command ['touch', '/tmp/2.txt']
15
+ end
16
+
@@ -0,0 +1,64 @@
1
+ base_dir = File.dirname(__FILE__)
2
+
3
+ #
4
+ require 'chef/provisioning'
5
+
6
+ #
7
+ server_name = ENV['SERVER_NAME']
8
+
9
+ # settings
10
+ docker_options = {
11
+ base_image: node['base']['image_name'],
12
+ privileged: true,
13
+ command: node['docker']['command'] || '',
14
+ ports: node['docker']['ports'].map{|d| "#{d[0]}:#{d[1]}"},
15
+ volumes: node['docker']['volumes'].map{|d| "#{d[0]}:#{d[1]}"},
16
+ links: node['docker']['links'].map{|d| "#{d[0]}:#{d[1]}"},
17
+
18
+ }
19
+
20
+ # more options
21
+ docker_options['hostname'] = node['docker']['hostname'] if node['docker']['hostname']
22
+
23
+
24
+ puts "opt = #{docker_options}"
25
+ #puts "volumes = #{node['docker']['volumes']}"
26
+ #exit
27
+
28
+ # init volumes
29
+ node['docker']['volumes'].each do |d|
30
+ directory "#{d[0]}" do
31
+ recursive true
32
+
33
+ action :create
34
+
35
+ mode '0775'
36
+ #owner 'root'
37
+ #group 'root'
38
+ end
39
+ end
40
+
41
+
42
+
43
+ ### docker container
44
+ with_driver 'docker'
45
+ machine node['base']['container_name'] do
46
+ #tag '0.1'
47
+
48
+ recipe "#{server_name}::install"
49
+
50
+ # attributes
51
+ #node.keys.each do |k|
52
+ # attribute k, node[k]
53
+ #end
54
+
55
+ # attributes
56
+ node['attributes'].keys.each do |k|
57
+ attribute k, node['attributes'][k]
58
+ end
59
+
60
+
61
+ machine_options docker_options: docker_options
62
+
63
+ end
64
+
@@ -0,0 +1,14 @@
1
+ base_dir = File.dirname(__FILE__)
2
+
3
+ #
4
+ require_relative 'lib/settings'
5
+
6
+ #
7
+ server_name = ENV['SERVER_NAME']
8
+ settings = Settings.load_settings_for_server(server_name)
9
+ #puts "ss = #{settings.attributes}"
10
+ #puts "container name = #{settings.container_name}"
11
+
12
+
13
+ # create systemd service
14
+ include_recipe 'server-name::install_container_service'
@@ -0,0 +1,502 @@
1
+ module DockerApp
2
+ class CLI < Thor
3
+ include Thor::Actions
4
+
5
+ def self.source_root
6
+ #File.dirname(__FILE__)
7
+ File.expand_path('../../templates', __FILE__)
8
+ end
9
+
10
+
11
+ ##
12
+ # [build]
13
+ #
14
+ #
15
+ desc 'build', 'Build Docker image'
16
+
17
+ long_desc <<-EOS.gsub(/^ +/, '')
18
+ Build Docker image.
19
+ EOS
20
+
21
+ method_option :server,
22
+ :aliases => ['-s', '--server'],
23
+ :required => false,
24
+ :type => :string,
25
+ :desc => "Server name"
26
+
27
+ method_option :root_path,
28
+ :aliases => '-r',
29
+ :type => :string,
30
+ :default => '',
31
+ :desc => 'Root path to base all relative path on.'
32
+
33
+ method_option :config_file,
34
+ :aliases => '-c',
35
+ :type => :string,
36
+ :default => 'config.rb',
37
+ :desc => 'Path to your config.rb file.'
38
+
39
+ def build
40
+ puts "building images..."
41
+
42
+ opts = options
43
+ #puts "opt from command line: #{options.inspect}"
44
+
45
+
46
+ warnings = false
47
+ errors = false
48
+
49
+ begin
50
+ Config.load(options)
51
+
52
+ Config.servers.each do |name, server_settings|
53
+ #server_settings = Settings.load_settings_for_server(name)
54
+
55
+ #puts "s: #{server_settings.inspect}"
56
+
57
+ ManagerImage.destroy_image(name, server_settings)
58
+ ManagerImage.build_image(name, server_settings)
59
+ end
60
+
61
+
62
+ rescue Exception => err
63
+ puts "exception: #{err.inspect}"
64
+ raise err
65
+ exit(3)
66
+ end
67
+
68
+ exit(errors ? 2 : 1) if errors || warnings
69
+
70
+ end
71
+
72
+
73
+ ##
74
+ # [destroy_image]
75
+ #
76
+ #
77
+ desc 'destroy_image', 'Destroy Docker image'
78
+
79
+ long_desc <<-EOS.gsub(/^ +/, '')
80
+ Destroy Docker image.
81
+ EOS
82
+
83
+ method_option :server,
84
+ :aliases => ['-s', '--server'],
85
+ :required => false,
86
+ :type => :string,
87
+ :desc => "Server name"
88
+
89
+ method_option :root_path,
90
+ :aliases => '-r',
91
+ :type => :string,
92
+ :default => '',
93
+ :desc => 'Root path to base all relative path on.'
94
+
95
+ method_option :config_file,
96
+ :aliases => '-c',
97
+ :type => :string,
98
+ :default => 'config.rb',
99
+ :desc => 'Path to your config.rb file.'
100
+
101
+ def destroy_image
102
+ puts "destroying image..."
103
+
104
+ warnings = false
105
+ errors = false
106
+
107
+ begin
108
+ Config.load(options)
109
+
110
+ Config.servers.each do |name, server_settings|
111
+ #server_settings = Settings.load_settings_for_server(name)
112
+
113
+ ManagerImage.destroy_image(name, server_settings)
114
+ end
115
+
116
+ rescue Exception => err
117
+ puts "exception: #{err.inspect}"
118
+ raise err
119
+ exit(3)
120
+ end
121
+
122
+ exit(errors ? 2 : 1) if errors || warnings
123
+
124
+ end
125
+
126
+
127
+ ##
128
+ # [up]
129
+ #
130
+ #
131
+ desc 'up', 'Run Docker container'
132
+
133
+ long_desc <<-EOS.gsub(/^ +/, '')
134
+ Run Docker container.
135
+ EOS
136
+
137
+ method_option :server,
138
+ :aliases => ['-s', '--server'],
139
+ :required => false,
140
+ :type => :string,
141
+ :desc => "Server name"
142
+
143
+ method_option :root_path,
144
+ :aliases => '-r',
145
+ :type => :string,
146
+ :default => '',
147
+ :desc => 'Root path to base all relative path on.'
148
+
149
+ method_option :config_file,
150
+ :aliases => '-c',
151
+ :type => :string,
152
+ :default => 'config.rb',
153
+ :desc => 'Path to your config.rb file.'
154
+
155
+ def up
156
+ puts "running..."
157
+
158
+ opts = options
159
+
160
+ warnings = false
161
+ errors = false
162
+
163
+
164
+ begin
165
+ Config.load(options)
166
+
167
+ Config.servers.each do |name, server_settings|
168
+ #server_settings = Settings.load_settings_for_server(name)
169
+
170
+ if server_settings.is_swarm_mode?
171
+ ManagerSwarm.destroy_service(name, server_settings)
172
+ ManagerSwarm.create_service(name, server_settings)
173
+ else
174
+ ManagerContainer.destroy_container(name, server_settings)
175
+ ManagerContainer.run_container(name, server_settings)
176
+ end
177
+
178
+ end
179
+
180
+ rescue Exception => err
181
+ puts "exception: #{err.inspect}"
182
+ raise err
183
+ exit(3)
184
+ end
185
+
186
+ exit(errors ? 2 : 1) if errors || warnings
187
+
188
+ end
189
+
190
+
191
+ ##
192
+ # [start]
193
+ #
194
+ #
195
+ desc 'start', 'Start Docker container'
196
+
197
+ long_desc <<-EOS.gsub(/^ +/, '')
198
+ Start Docker container.
199
+ EOS
200
+
201
+ method_option :server,
202
+ :aliases => ['-s', '--server'],
203
+ :required => false,
204
+ :type => :string,
205
+ :desc => "Server name"
206
+
207
+ method_option :root_path,
208
+ :aliases => '-r',
209
+ :type => :string,
210
+ :default => '',
211
+ :desc => 'Root path to base all relative path on.'
212
+
213
+ method_option :config_file,
214
+ :aliases => '-c',
215
+ :type => :string,
216
+ :default => 'config.rb',
217
+ :desc => 'Path to your config.rb file.'
218
+
219
+ def start
220
+ puts "starting..."
221
+
222
+ opts = options
223
+
224
+ warnings = false
225
+ errors = false
226
+ begin
227
+ Config.load(options)
228
+
229
+ Config.servers.each do |name, server_settings|
230
+ #server_settings = Settings.load_settings_for_server(name)
231
+
232
+ ManagerContainer.start_container(name, server_settings)
233
+ end
234
+
235
+ rescue Exception => err
236
+ puts "exception: #{err.inspect}"
237
+ raise err
238
+ exit(3)
239
+ end
240
+
241
+ exit(errors ? 2 : 1) if errors || warnings
242
+
243
+ end
244
+
245
+
246
+
247
+ ##
248
+ # [destroy]
249
+ #
250
+ #
251
+ desc 'destroy', 'Destroy Docker container'
252
+
253
+ long_desc <<-EOS.gsub(/^ +/, '')
254
+ Destroy Docker container.
255
+ EOS
256
+
257
+ method_option :server,
258
+ :aliases => ['-s', '--server'],
259
+ :required => false,
260
+ :type => :string,
261
+ :desc => "Server name"
262
+
263
+ method_option :root_path,
264
+ :aliases => '-r',
265
+ :type => :string,
266
+ :default => '',
267
+ :desc => 'Root path to base all relative path on.'
268
+
269
+ method_option :config_file,
270
+ :aliases => '-c',
271
+ :type => :string,
272
+ :default => 'config.rb',
273
+ :desc => 'Path to your config.rb file.'
274
+
275
+ def destroy
276
+ puts "destroying..."
277
+
278
+ opts = options
279
+
280
+ warnings = false
281
+ errors = false
282
+
283
+ begin
284
+ Config.load(options)
285
+
286
+ Config.servers.each do |name, server_settings|
287
+ #server_settings = Settings.load_settings_for_server(name)
288
+
289
+ if server_settings.is_swarm_mode?
290
+ ManagerSwarm.destroy_service(name, server_settings)
291
+ else
292
+ ManagerContainer.destroy_container(name, server_settings)
293
+ end
294
+
295
+ end
296
+
297
+ rescue Exception => err
298
+ puts "exception: #{err.inspect}"
299
+ raise err
300
+ exit(3)
301
+ end
302
+
303
+ exit(errors ? 2 : 1) if errors || warnings
304
+
305
+ end
306
+
307
+
308
+
309
+
310
+ ##
311
+ # [stop]
312
+ #
313
+ #
314
+ desc 'stop', 'Stop Docker container(s)'
315
+
316
+ long_desc <<-EOS.gsub(/^ +/, '')
317
+ Stop containers.
318
+ EOS
319
+
320
+ method_option :server,
321
+ :aliases => ['-s', '--server'],
322
+ :required => false,
323
+ :type => :string,
324
+ :desc => "Server name"
325
+
326
+ method_option :root_path,
327
+ :aliases => '-r',
328
+ :type => :string,
329
+ :default => '',
330
+ :desc => 'Root path to base all relative path on.'
331
+
332
+ method_option :config_file,
333
+ :aliases => '-c',
334
+ :type => :string,
335
+ :default => 'config.rb',
336
+ :desc => 'Path to your config.rb file.'
337
+
338
+ def stop
339
+ puts "stopping..."
340
+
341
+ opts = options
342
+
343
+ warnings = false
344
+ errors = false
345
+
346
+
347
+ begin
348
+ Config.load(options)
349
+
350
+ Config.servers.each do |name, server_settings|
351
+ #server_settings = Settings.load_settings_for_server(name)
352
+
353
+ ManagerContainer.stop_container(name, server_settings)
354
+ end
355
+
356
+ rescue Exception => err
357
+ puts "exception: #{err.inspect}"
358
+ raise err
359
+ exit(3)
360
+ end
361
+
362
+ exit(errors ? 2 : 1) if errors || warnings
363
+
364
+ end
365
+
366
+
367
+
368
+
369
+
370
+ ##
371
+ # [clear_cache]
372
+ #
373
+ #
374
+ desc 'clear_cache', 'clear cache'
375
+
376
+ long_desc <<-EOS.gsub(/^ +/, '')
377
+ clear_cache
378
+ EOS
379
+
380
+ method_option :server,
381
+ :aliases => ['-s', '--server'],
382
+ :required => false,
383
+ :type => :string,
384
+ :desc => "Server name"
385
+
386
+ method_option :root_path,
387
+ :aliases => '-r',
388
+ :type => :string,
389
+ :default => '',
390
+ :desc => 'Root path to base all relative path on.'
391
+
392
+ method_option :config_file,
393
+ :aliases => '-c',
394
+ :type => :string,
395
+ :default => 'config.rb',
396
+ :desc => 'Path to your config.rb file.'
397
+
398
+ def clear_cache
399
+ puts "clear_cache..."
400
+
401
+ opts = options
402
+
403
+ warnings = false
404
+ errors = false
405
+
406
+ begin
407
+ Config.load(options)
408
+
409
+ Config.servers.each do |name, server_settings|
410
+ #server_settings = Settings.load_settings_for_server(name)
411
+
412
+ ManagerContainer.clear_cache(name, server_settings)
413
+ end
414
+
415
+ rescue Exception => err
416
+ puts "exception: #{err.inspect}"
417
+ raise err
418
+ exit(3)
419
+ end
420
+
421
+ exit(errors ? 2 : 1) if errors || warnings
422
+
423
+ end
424
+
425
+
426
+ ### generators
427
+
428
+ ##
429
+ # [generate new project]
430
+ #
431
+ #
432
+ desc 'generate', 'Generate new project'
433
+
434
+ long_desc <<-EOS.gsub(/^ +/, '')
435
+ Generate new project
436
+ EOS
437
+
438
+ method_option :name,
439
+ :aliases => ['-n', '--name'],
440
+ :required => false,
441
+ :type => :string,
442
+ :desc => "Project name"
443
+
444
+
445
+ method_option :type,
446
+ :aliases => ['-t', '--type'],
447
+ :required => false,
448
+ :type => :string,
449
+ :default => 'chef',
450
+ :desc => "Provision type"
451
+
452
+ def generate
453
+ puts "creating project..."
454
+
455
+ puts "opts: #{options}"
456
+ name = options[:name]
457
+ @name = name
458
+
459
+ empty_directory(name)
460
+
461
+ if options[:type] == 'chef'
462
+ source_base_dir = "example-chef"
463
+
464
+ empty_directory("#{name}/servers")
465
+ template "#{source_base_dir}/config.rb.erb", "#{name}/config.rb"
466
+
467
+
468
+ # server
469
+ source_server_dir = "#{source_base_dir}/servers/server1"
470
+ server_dir = "#{name}/servers/#{name}"
471
+
472
+ directory("#{source_base_dir}/servers/server1/.chef", "#{server_dir}/.chef")
473
+
474
+
475
+ # cookbooks
476
+ empty_directory("#{server_dir}/cookbooks")
477
+ empty_directory("#{server_dir}/cookbooks/#{name}")
478
+ empty_directory("#{server_dir}/cookbooks/#{name}/recipes")
479
+ empty_directory("#{server_dir}/cookbooks/#{name}/templates")
480
+
481
+ template "#{source_server_dir}/config.rb.erb", "#{server_dir}/config.rb"
482
+ template "#{source_server_dir}/cookbooks/server1/metadata.rb.erb", "#{server_dir}/cookbooks/#{name}/metadata.rb"
483
+
484
+ directory("#{source_base_dir}/servers/server1/cookbooks/server1/recipes", "#{server_dir}/cookbooks/#{name}/recipes")
485
+ directory("#{source_base_dir}/servers/server1/cookbooks/server1/templates", "#{server_dir}/cookbooks/#{name}/templates")
486
+ copy_file("#{source_base_dir}/servers/server1/cookbooks/server1/README.md", "#{server_dir}/cookbooks/#{name}/README.md")
487
+
488
+
489
+ end
490
+
491
+
492
+
493
+ end
494
+
495
+
496
+ ### helpers
497
+
498
+
499
+
500
+
501
+ end
502
+ end