docker-builder 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) 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/Rakefile +140 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/docker-builder.gemspec +36 -0
  10. data/examples/example-apps-php/.chef/knife.rb +6 -0
  11. data/examples/example-apps-php/config.rb +19 -0
  12. data/examples/example-apps-php/servers/apps-php/.chef/knife.rb +2 -0
  13. data/examples/example-apps-php/servers/apps-php/config.rb +69 -0
  14. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/README.md +1 -0
  15. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/metadata.rb +9 -0
  16. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/build.rb +43 -0
  17. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install.rb +55 -0
  18. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install_app.rb +27 -0
  19. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install_host.rb +9 -0
  20. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/index.html.erb +4 -0
  21. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/app.conf.erb +55 -0
  22. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/app.conf.erb.1 +55 -0
  23. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/default.conf.erb +45 -0
  24. data/examples/example-apps-php/servers/apps-php/readme.md +0 -0
  25. data/examples/example-nginx/config.rb +19 -0
  26. data/examples/example-nginx/servers/nginx/.chef/knife.rb +8 -0
  27. data/examples/example-nginx/servers/nginx/config.rb +54 -0
  28. data/examples/example-nginx/servers/nginx/cookbooks/nginx/README.md +1 -0
  29. data/examples/example-nginx/servers/nginx/cookbooks/nginx/metadata.rb +9 -0
  30. data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/build.rb +10 -0
  31. data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/install.rb +28 -0
  32. data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/install_host.rb +9 -0
  33. data/examples/example-nginx/servers/nginx/cookbooks/nginx/templates/index.html.erb +4 -0
  34. data/examples/example-nginx/servers/nginx/cookbooks/nginx/templates/nginx-sites/default.conf.erb +45 -0
  35. data/examples/example-nginx/servers/nginx/readme.md +0 -0
  36. data/examples/example-nginx/temp/ex_nginx.json +20 -0
  37. data/examples/example-nginx/temp/nginx.json +1 -0
  38. data/exe/docker-builder +20 -0
  39. data/install_local.sh +2 -0
  40. data/lib/docker_builder.rb +18 -0
  41. data/lib/docker_builder/chef/.chef/knife.rb +115 -0
  42. data/lib/docker_builder/chef/chef_build_image.copy0.rb +60 -0
  43. data/lib/docker_builder/chef/chef_destroy_image.copy0.rb +35 -0
  44. data/lib/docker_builder/cli.rb +346 -0
  45. data/lib/docker_builder/config.rb +199 -0
  46. data/lib/docker_builder/config/dsl.rb +48 -0
  47. data/lib/docker_builder/config/helpers.rb +99 -0
  48. data/lib/docker_builder/manager.rb +364 -0
  49. data/lib/docker_builder/server_settings.rb +286 -0
  50. data/lib/docker_builder/version.rb +3 -0
  51. data/lib/templates/example-chef/config.rb.erb +18 -0
  52. data/lib/templates/example-chef/servers/server1/.chef/knife.rb +8 -0
  53. data/lib/templates/example-chef/servers/server1/config.rb.erb +54 -0
  54. data/lib/templates/example-chef/servers/server1/cookbooks/server1/README.md +1 -0
  55. data/lib/templates/example-chef/servers/server1/cookbooks/server1/metadata.rb.erb +8 -0
  56. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/build.rb +10 -0
  57. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install.rb +36 -0
  58. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install_host.rb +9 -0
  59. data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/index.html.erb +5 -0
  60. data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/nginx-sites/default.conf.erb +45 -0
  61. data/readme.md +233 -0
  62. data/readme_developers.md +54 -0
  63. data/temp.sh +21 -0
  64. data/temp/app-php.json +1 -0
  65. data/temp/build.sh +29 -0
  66. data/temp/chef_build_image.rb +37 -0
  67. data/temp/chef_destroy_image.rb +16 -0
  68. data/temp/cookbooks/temp1/README.md +1 -0
  69. data/temp/cookbooks/temp1/metadata.rb +9 -0
  70. data/temp/cookbooks/temp1/recipes/build.rb +42 -0
  71. data/temp/run.sh +2 -0
  72. metadata +157 -0
@@ -0,0 +1,286 @@
1
+ module DockerBuilder
2
+
3
+ class ServerSettings
4
+ attr_accessor :attributes
5
+
6
+ def get_binding
7
+ return binding()
8
+ end
9
+
10
+ def attributes
11
+ @attributes ||= {}
12
+ @attributes
13
+ end
14
+
15
+
16
+ def all_attributes
17
+ res = attributes
18
+
19
+ res['base'] = {
20
+ 'image_name'=> image_name,
21
+ 'container_name'=> container_name,
22
+
23
+ }
24
+
25
+ # docker
26
+ res['docker']['ports'] = docker_ports
27
+ res['docker']['volumes'] = docker_volumes
28
+ res['docker']['links'] = docker_links
29
+
30
+ res
31
+ end
32
+
33
+
34
+ #
35
+ def node
36
+ res = attributes['attributes'] || {}
37
+
38
+ res['name'] = name
39
+ res['container_name'] = container_name
40
+
41
+ res
42
+ end
43
+
44
+ #
45
+ def set(name, v)
46
+ attributes[name] = v
47
+ end
48
+
49
+ def add(name, v)
50
+ attributes[name] = {} if attributes[name].nil?
51
+
52
+ attributes[name].merge!(v)
53
+ end
54
+
55
+ ###
56
+ def prefix
57
+ attributes['common']['prefix']
58
+ end
59
+
60
+
61
+ ###
62
+
63
+ def name
64
+ attributes['name']
65
+ end
66
+
67
+
68
+
69
+ def image_name
70
+ s = attributes['name']
71
+
72
+ "#{attributes['common']['image_prefix']}#{s}"
73
+ end
74
+
75
+ def container_name(name=nil)
76
+ name ||= attributes['name']
77
+ s = name
78
+
79
+ "#{attributes['common']['prefix']}#{s}"
80
+ end
81
+
82
+ def chef_node_name
83
+ "#{attributes['common']['prefix']}#{name}"
84
+ end
85
+
86
+ def volume_path_local(v)
87
+ res = v.to_s
88
+
89
+ if v =~ /^\./
90
+ s = v.gsub /^\.\//, ''
91
+
92
+ res = "$PWD/#{self.name}/#{s}"
93
+
94
+ elsif v =~ /^\/\//
95
+ res = self.attributes['common']['dir_data']+(v.gsub /^\/\//, '')
96
+ elsif v =~ /^\//
97
+ res = v
98
+ else
99
+ res = self.dir_data+v
100
+ end
101
+
102
+ res
103
+ end
104
+
105
+ def dir_data
106
+ "#{attributes['common']['dir_data']}#{self.name}/"
107
+ end
108
+
109
+
110
+ ###
111
+ def docker_volumes
112
+ a = attributes['docker']['volumes'] || []
113
+
114
+ # fix paths
115
+ res = a.map do |r|
116
+ path_local = volume_path_local(r[0])
117
+
118
+ [path_local, r[1]]
119
+ end
120
+
121
+ res
122
+ end
123
+
124
+ def docker_volumes_string
125
+ docker_volumes.map{|r| "-v #{r[0]}:#{r[1]}"}.join(' ')
126
+ end
127
+
128
+ def docker_volumes_array
129
+ docker_volumes.map{|d| "#{d[0]}:#{d[1]}"}
130
+ end
131
+
132
+ ###
133
+
134
+ def docker_volumes_from
135
+ a = attributes['docker']['volumes_from'] || []
136
+
137
+ # fix paths
138
+ res = a.map do |r|
139
+ "#{prefix}#{r}"
140
+ end
141
+
142
+ res
143
+ end
144
+
145
+ def docker_volumes_from_string
146
+ docker_volumes_from.map{|d| "--volumes-from #{d}"}.join(' ')
147
+ end
148
+
149
+ def docker_volumes_from_array
150
+ docker_volumes_from.map{|d| "#{d}"}
151
+ end
152
+
153
+ ###
154
+ def docker_ports
155
+ a = attributes['docker']['ports'] || []
156
+ a
157
+ end
158
+
159
+ def docker_ports_string
160
+ docker_ports.map{|r| "-p #{r[0]}:#{r[1]}"}.join(' ')
161
+ end
162
+
163
+ def docker_ports_array
164
+ docker_ports.map{|d| "#{d[0]}:#{d[1]}"}
165
+ end
166
+
167
+ ###
168
+ def docker_links
169
+ a = attributes['docker']['links'] || []
170
+
171
+ # fix
172
+ res = a.map do |r|
173
+ ["#{attributes['common']['prefix']}#{r[0]}", r[1]]
174
+ end
175
+
176
+ res
177
+ end
178
+
179
+ def docker_links_string
180
+ docker_links.map{|r| "--link #{r[0]}:#{r[1]}"}.join(' ')
181
+ end
182
+
183
+ def docker_links_array
184
+ docker_links.map{|d| "#{d[0]}:#{d[1]}"}
185
+ end
186
+
187
+ ###
188
+
189
+ def run_env_variables
190
+ a = attributes['docker']['run_env'] || []
191
+
192
+ a
193
+ end
194
+
195
+ def run_env_variables_string
196
+ run_env_variables.map{|r| "-e #{r[0]}=#{r[1]}"}.join(' ')
197
+ end
198
+
199
+
200
+ ###
201
+ def [](key)
202
+ attributes[key]
203
+ end
204
+
205
+
206
+ ###
207
+ def filename_chef_config
208
+ #File.join(File.dirname(__FILE__), '..', 'config' ,"config-#{name}.json")
209
+
210
+ File.join(Config.root_path, 'temp', "#{name}.json")
211
+ end
212
+
213
+ def filename_config_json
214
+ File.join(Config.root_path, 'temp', "#{name}.json")
215
+ end
216
+
217
+ def dir_cookbooks
218
+ File.expand_path("servers/#{name}/cookbooks", Config.root_path)
219
+ end
220
+
221
+ def dir_server_root
222
+ File.expand_path("servers/#{name}", Config.root_path)
223
+ end
224
+
225
+ def filename_chef_node_json
226
+ File.expand_path("nodes/#{image_name}.json", dir_server_root)
227
+ end
228
+ def filename_chef_client_json
229
+ File.expand_path("clients/#{image_name}.json", dir_server_root)
230
+ end
231
+
232
+
233
+ end
234
+
235
+
236
+
237
+ class Settings
238
+
239
+ def self.load_settings_for_server(name, opts={})
240
+ settings = ServerSettings.new
241
+
242
+
243
+ #puts "current=#{File.dirname(__FILE__)}"
244
+ #puts "ff=#{file_base_settings}"
245
+
246
+ #
247
+ #t = File.read(file_base_settings) rescue ''
248
+ #eval(t, settings.get_binding)
249
+
250
+
251
+ #
252
+ f = file_settings_for_server(name)
253
+ puts "loading server settings from #{f}"
254
+ t = File.read(f) rescue ''
255
+ eval(t, settings.get_binding)
256
+
257
+ #
258
+ settings.attributes['name'] ||= name
259
+
260
+ # from common config
261
+ settings.attributes['common'] = Config.options[:common]
262
+
263
+ #puts "config options = #{Config.options}"
264
+ #puts "settings000 = #{settings.attributes}"
265
+ #exit
266
+
267
+ settings
268
+ end
269
+
270
+
271
+ ### helpers
272
+
273
+ def self.file_settings_for_server(name)
274
+ #File.join(File.dirname(__FILE__), '..', 'config', "#{name}.rb")
275
+ File.join(Config.root_path, 'servers', name, 'config.rb')
276
+ end
277
+
278
+ def self.file_base_settings
279
+ File.join(File.dirname(__FILE__), '..', 'config' ,'common.rb')
280
+ end
281
+
282
+
283
+
284
+
285
+ end
286
+ end
@@ -0,0 +1,3 @@
1
+ module DockerBuilder
2
+ VERSION = "0.1.5"
3
+ end
@@ -0,0 +1,18 @@
1
+ common({
2
+ 'prefix' => "example-",
3
+ 'image_prefix' => 'example-',
4
+ 'dir_data' => '/path/to/data/',
5
+
6
+ })
7
+
8
+ servers({
9
+ '<%=@name%>'=>{
10
+ # some server options here
11
+ }
12
+
13
+ })
14
+
15
+
16
+ base({
17
+
18
+ })
@@ -0,0 +1,8 @@
1
+ #node_name ENV["NODE_NAME"] || ENV['SERVER_NAME'] || 'nginx-front'
2
+
3
+ # cookbooks
4
+ #cookbook_path [
5
+ # File.expand_path("../cookbooks", __FILE__)
6
+ #]
7
+
8
+
@@ -0,0 +1,54 @@
1
+
2
+ add 'build', {
3
+ "image_name" => "<%=@name%>",
4
+ 'build_type' => 'chef',
5
+
6
+ "base_image" => {
7
+ "name" => "nginx",
8
+ "repository" => "nginx",
9
+ "tag" => "1.10"
10
+
11
+ },
12
+
13
+ }
14
+
15
+ add 'install', {
16
+ "host" => {
17
+ 'script_type' => 'chef_recipe',
18
+ 'script' => 'install_host',
19
+ },
20
+ "node" => {
21
+ 'script_type' => 'chef_recipe',
22
+ 'script' => 'install',
23
+ }
24
+
25
+
26
+ }
27
+
28
+
29
+ add 'docker', {
30
+ #"command"=> "",
31
+ #'command' => "/sbin/my_init",
32
+ "command"=> "nginx -g 'daemon off;'",
33
+ 'ports' => [
34
+ #[8080,80],
35
+ ],
36
+ 'volumes' => [
37
+ #['html', '/usr/share/nginx/html'],
38
+ #['log/nginx', '/var/log/nginx/'],
39
+ ],
40
+ 'links' => [
41
+ ]
42
+ }
43
+
44
+
45
+
46
+ add 'attributes', {
47
+ '<%=@name%>' =>{
48
+ "sitename" =>"mysite.local"
49
+ },
50
+
51
+
52
+ }
53
+
54
+
@@ -0,0 +1,8 @@
1
+ name '<%=@name %>'
2
+ maintainer 'YOUR_COMPANY_NAME'
3
+ maintainer_email 'YOUR_EMAIL'
4
+ license 'All rights reserved'
5
+ description 'Sample server'
6
+ long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
7
+ version '0.1.0'
8
+
@@ -0,0 +1,10 @@
1
+ # will be added to Docker image
2
+
3
+
4
+ file '/tmp/example-nginx.txt' do
5
+ content '555'
6
+ end
7
+
8
+
9
+
10
+
@@ -0,0 +1,36 @@
1
+
2
+ ## nginx default server
3
+ template "/etc/nginx/conf.d/default.conf" do
4
+ source "nginx-sites/default.conf.erb"
5
+
6
+ #owner 'root'
7
+ #group 'root'
8
+
9
+ mode '0775'
10
+ end
11
+
12
+
13
+ template "/usr/share/nginx/html/index.html" do
14
+ source "index.html.erb"
15
+
16
+ #owner 'root'
17
+ #group 'root'
18
+
19
+ mode '0775'
20
+ end
21
+
22
+
23
+
24
+
25
+ #
26
+ bash 'reload nginx' do
27
+ code <<-EOH
28
+ service nginx reload
29
+ EOH
30
+
31
+ ignore_failure true
32
+ end
33
+
34
+
35
+ #command '/etc/init.d/nginx reload'
36
+
@@ -0,0 +1,9 @@
1
+ # will be run on the host machine
2
+
3
+ file '/tmp/example-nginx-intalled.txt' do
4
+ content '22'
5
+ end
6
+
7
+
8
+
9
+
@@ -0,0 +1,5 @@
1
+ Placeholder for a home page.
2
+ <br>
3
+ site:
4
+
5
+ Access attributes from node['servername'] hash in config.rb