When a style changes rerender zooms 0-10 before updating the timestamp
[chef.git] / cookbooks / tile / recipes / default.rb
1 #
2 # Cookbook Name:: tile
3 # Recipe:: default
4 #
5 # Copyright 2013, OpenStreetMap Foundation
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #     http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19
20 include_recipe "apache"
21 include_recipe "git"
22 include_recipe "nodejs"
23 include_recipe "postgresql"
24
25 blocks = data_bag_item("tile", "blocks")
26
27 apache_module "alias"
28 apache_module "expires"
29 apache_module "headers"
30 apache_module "remoteip"
31 apache_module "rewrite"
32
33 apache_module "tile" do
34   conf "tile.conf.erb"
35 end
36
37 tilecaches = search(:node, "roles:tilecache").sort_by { |n| n[:hostname] }
38
39 apache_site "default" do
40   action [ :disable ]
41 end
42
43 apache_site "tile.openstreetmap.org" do
44   template "apache.erb"
45   variables :caches => tilecaches
46 end
47
48 template "/etc/logrotate.d/apache2" do
49   source "logrotate.apache.erb"
50   owner "root"
51   group "root"
52   mode 0644
53 end
54
55 directory "/srv/tile.openstreetmap.org" do
56   owner "tile"
57   group "tile"
58   mode 0755
59 end
60
61 package "renderd"
62
63 service "renderd" do
64   action [ :enable, :start ]
65   supports :status => false, :restart => true, :reload => false
66 end
67
68 directory node[:tile][:tile_directory] do
69   owner "tile"
70   group "www-data"
71   mode 0775
72 end
73
74 if node[:tile][:tile_directory] != "/srv/tile.openstreetmap.org/tiles"
75   link "/srv/tile.openstreetmap.org/tiles" do
76     to node[:tile][:tile_directory]
77   end
78 end
79
80 template "/etc/renderd.conf" do
81   source "renderd.conf.erb"
82   owner "root"
83   group "root"
84   mode 0644
85   notifies :reload, resources(:service => "apache2")
86   notifies :restart, resources(:service => "renderd")
87 end
88
89 remote_directory "/srv/tile.openstreetmap.org/html" do
90   source "html"
91   owner "tile"
92   group "tile"
93   mode 0755
94   files_owner "tile"
95   files_group "tile"
96   files_mode 0644
97 end
98
99 directory "/srv/tile.openstreetmap.org/cgi-bin" do
100   owner "tile"
101   group "tile"
102   mode 0755
103 end
104
105 template "/srv/tile.openstreetmap.org/cgi-bin/export" do
106   source "export.erb"
107   owner "tile"
108   group "tile"
109   mode 0755
110   variables :blocks => blocks
111 end
112
113 directory "/srv/tile.openstreetmap.org/data" do
114   owner "tile"
115   group "tile"
116   mode 0755
117 end
118
119 node[:tile][:data].each do |name,data|
120   url = data[:url]
121   file = "/srv/tile.openstreetmap.org/data/#{File.basename(url)}"
122   directory = "/srv/tile.openstreetmap.org/data/#{data[:directory]}"
123
124   directory directory do
125     owner "tile"
126     group "tile"
127     mode 0755
128   end
129
130   if file =~ /\.tgz$/
131     package "tar"
132
133     execute file do
134       action :nothing
135       command "tar -zxf #{file} -C #{directory}"
136       user "tile"
137       group "tile"
138     end
139   elsif file =~ /\.tar\.bz2$/
140     package "tar"
141
142     execute file do
143       action :nothing
144       command "tar -jxf #{file} -C #{directory}"
145       user "tile"
146       group "tile"
147     end
148   elsif file =~ /\.zip$/
149     package "unzip"
150
151     execute file do
152       action :nothing
153       command "unzip -qq #{file} -d #{directory}"
154       user "tile"
155       group "tile"
156     end
157   end
158
159   if data[:processed]
160     original = "#{directory}/#{data[:original]}"
161     processed = "#{directory}/#{data[:processed]}"
162
163     package "gdal-bin"
164
165     execute processed do
166       action :nothing
167       command "ogr2ogr #{processed} #{original}"
168       user "tile"
169       group "tile"
170       subscribes :run, resources(:execute => file), :immediately
171     end
172   end
173
174   remote_file file do
175     action :create_if_missing 
176     source url
177     owner "tile"
178     group "tile"
179     mode 0644
180     notifies :run, resources(:execute => file), :immediately
181     notifies :restart, resources(:service => "renderd")
182   end
183 end
184
185 template "/usr/local/bin/render-lowzoom" do
186   source "render-lowzoom.erb"
187   owner "root"
188   group "root"
189   mode 0755
190 end
191
192 template "/etc/init.d/render-lowzoom" do
193   source "render-lowzoom.init.erb"
194   owner "root"
195   group "root"
196   mode 0755
197 end
198
199 service "render-lowzoom" do
200   action :disable
201   supports :restart => true
202 end
203
204 nodejs_package "carto"
205 nodejs_package "millstone"
206
207 directory "/srv/tile.openstreetmap.org/styles" do
208   owner "tile"
209   group "tile"
210   mode 0755
211 end
212
213 node[:tile][:styles].each do |name,details|
214   style_directory = "/srv/tile.openstreetmap.org/styles/#{name}"
215   tile_directory = "/srv/tile.openstreetmap.org/tiles/#{name}"
216
217   file "#{tile_directory}/planet-import-complete" do
218     action :create_if_missing
219     owner "tile"
220     group "tile"
221     mode 0444
222   end
223
224   git style_directory do
225     action :sync
226     repository details[:repository]
227     revision details[:revision]
228     user "tile"
229     group "tile"
230   end
231
232   link "#{style_directory}/data" do
233     to "/srv/tile.openstreetmap.org/data"
234     owner "tile"
235     group "tile"
236   end
237
238   execute "#{style_directory}/project.mml" do
239     action :nothing
240     command "carto project.mml > project.xml"
241     cwd style_directory
242     user "tile"
243     group "tile"
244     subscribes :run, "git[#{style_directory}]"
245     notifies :restart, "service[renderd]"
246     notifies :restart, "service[render-lowzoom]"
247   end
248 end
249
250 package "postgis"
251
252 postgresql_user "jburgess" do
253   cluster node[:tile][:database][:cluster]
254   superuser true
255 end
256
257 postgresql_user "tomh" do
258   cluster node[:tile][:database][:cluster]
259   superuser true
260 end
261
262 postgresql_user "tile" do
263   cluster node[:tile][:database][:cluster]
264 end
265
266 postgresql_user "www-data" do
267   cluster node[:tile][:database][:cluster]
268 end
269
270 postgresql_database "gis" do
271   cluster node[:tile][:database][:cluster]
272   owner "tile"
273 end
274
275 postgresql_extension "postgis" do
276   cluster node[:tile][:database][:cluster]
277   database "gis"
278 end
279
280 [ "geography_columns",
281   "planet_osm_nodes",
282   "planet_osm_rels",
283   "planet_osm_ways",
284   "raster_columns", 
285   "raster_overviews", 
286   "spatial_ref_sys" ].each do |table|
287   postgresql_table table do
288     cluster node[:tile][:database][:cluster]
289     database "gis"
290     owner "tile"
291     permissions "tile" => :all
292   end
293 end
294
295 [ "geometry_columns", 
296   "planet_osm_line", 
297   "planet_osm_point", 
298   "planet_osm_polygon", 
299   "planet_osm_roads" ].each do |table|
300   postgresql_table table do
301     cluster node[:tile][:database][:cluster]
302     database "gis"
303     owner "tile"
304     permissions "tile" => :all, "www-data" => :select
305   end
306 end
307
308 postgresql_munin "gis" do
309   cluster node[:tile][:database][:cluster]
310   database "gis"
311 end
312
313 #if node[:tile][:node_file]
314 #  file node[:tile][:node_file] do
315 #    owner "tile"
316 #    group "tile"
317 #    mode 0664
318 #  end
319 #end
320
321 package "osm2pgsql"
322 package "osmosis"
323
324 package "ruby"
325 package "rubygems"
326
327 package "libproj-dev"
328 package "libxml2-dev"
329 package "libpq-dev"
330
331 gem_package "proj4rb"
332 gem_package "libxml-ruby"
333 gem_package "pg"
334
335 remote_directory "/usr/local/lib/site_ruby" do
336   source "ruby"
337   owner "root"
338   group "root"
339   mode 0755
340   files_owner "root"
341   files_group "root"
342   files_mode 0644
343 end
344
345 template "/usr/local/bin/expire-tiles" do
346   source "expire-tiles.erb"
347   owner "root"
348   group "root"
349   mode 0755
350 end
351
352 directory "/var/lib/replicate" do
353   owner "tile"
354   group "tile"
355   mode 0755
356 end
357
358 directory "/var/log/replicate" do
359   owner "tile"
360   group "tile"
361   mode 0755
362 end
363
364 template "/var/lib/replicate/configuration.txt" do
365   source "replicate.configuration.erb"
366   owner "tile"
367   group "tile"
368   mode 0644
369 end
370
371 template "/usr/local/bin/replicate" do
372   source "replicate.erb"
373   owner "root"
374   group "root"
375   mode 0755
376 end
377
378 template "/etc/init.d/replicate" do
379   source "replicate.init.erb"
380   owner "root"
381   group "root"
382   mode 0755
383 end
384
385 service "replicate" do
386   action [ :enable, :start ]
387   supports :restart => true
388   subscribes :restart, resources(:template => "/usr/local/bin/replicate")
389   subscribes :restart, resources(:template => "/etc/init.d/replicate")
390 end
391
392 template "/etc/logrotate.d/replicate" do
393   source "replicate.logrotate.erb"
394   owner "root"
395   group "root"
396   mode 0644
397 end
398
399 munin_plugin "mod_tile_fresh"
400 munin_plugin "mod_tile_response"
401 munin_plugin "mod_tile_zoom"
402
403 munin_plugin "renderd_processed"
404 munin_plugin "renderd_queue"
405 munin_plugin "renderd_zoom"
406 munin_plugin "renderd_zoom_time"
407
408 munin_plugin "replication_delay" do
409   conf "munin.erb"
410 end
411