docker-builder 0.1.5

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