]> git.openstreetmap.org Git - chef.git/blob - cookbooks/planet/recipes/replication.rb
Enable ChefModernize/CronDFileOrTemplate cop
[chef.git] / cookbooks / planet / recipes / replication.rb
1 #
2 # Cookbook:: planet
3 # Recipe:: dump
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 #     https://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 "accounts"
21 include_recipe "osmosis"
22
23 db_passwords = data_bag_item("db", "passwords")
24
25 package "postgresql-client"
26
27 package "ruby"
28 package "ruby-dev"
29 package "ruby-libxml"
30
31 package "make"
32 package "gcc"
33 package "libpq-dev"
34
35 gem_package "pg"
36
37 remote_directory "/opt/flush" do
38   source "flush"
39   owner "root"
40   group "root"
41   mode 0o755
42   files_owner "root"
43   files_group "root"
44   files_mode 0o755
45 end
46
47 execute "/opt/flush/Makefile" do
48   action :nothing
49   command "make"
50   cwd "/opt/flush"
51   user "root"
52   group "root"
53   subscribes :run, "remote_directory[/opt/flush]"
54 end
55
56 remote_directory "/usr/local/bin" do
57   source "replication-bin"
58   owner "root"
59   group "root"
60   mode 0o755
61   files_owner "root"
62   files_group "root"
63   files_mode 0o755
64 end
65
66 template "/usr/local/bin/users-agreed" do
67   source "users-agreed.erb"
68   owner "root"
69   group "root"
70   mode 0o755
71 end
72
73 template "/usr/local/bin/users-deleted" do
74   source "users-deleted.erb"
75   owner "root"
76   group "root"
77   mode 0o755
78 end
79
80 remote_directory "/store/planet/users_deleted" do
81   source "users_deleted"
82   owner "planet"
83   group "planet"
84   mode 0o755
85   files_owner "root"
86   files_group "root"
87   files_mode 0o644
88 end
89
90 remote_directory "/store/planet/replication" do
91   source "replication-cgi"
92   owner "root"
93   group "root"
94   mode 0o755
95   files_owner "root"
96   files_group "root"
97   files_mode 0o755
98 end
99
100 directory "/store/planet/replication/changesets" do
101   owner "planet"
102   group "planet"
103   mode 0o755
104 end
105
106 directory "/store/planet/replication/day" do
107   owner "planet"
108   group "planet"
109   mode 0o755
110 end
111
112 directory "/store/planet/replication/hour" do
113   owner "planet"
114   group "planet"
115   mode 0o755
116 end
117
118 directory "/store/planet/replication/minute" do
119   owner "planet"
120   group "planet"
121   mode 0o755
122 end
123
124 directory "/etc/replication" do
125   owner "root"
126   group "root"
127   mode 0o755
128 end
129
130 directory "/var/run/lock/changeset-replication/" do
131   owner "planet"
132   group "planet"
133   mode 0o750
134 end
135
136 template "/etc/replication/auth.conf" do
137   source "replication.auth.erb"
138   user "root"
139   group "planet"
140   mode 0o640
141   variables :password => db_passwords["planetdiff"]
142 end
143
144 template "/etc/replication/changesets.conf" do
145   source "changesets.conf.erb"
146   user "root"
147   group "planet"
148   mode 0o640
149   variables :password => db_passwords["planetdiff"]
150 end
151
152 template "/etc/replication/users-agreed.conf" do
153   source "users-agreed.conf.erb"
154   user "planet"
155   group "planet"
156   mode 0o600
157   variables :password => db_passwords["planetdiff"]
158 end
159
160 directory "/var/lib/replication" do
161   owner "planet"
162   group "planet"
163   mode 0o755
164 end
165
166 directory "/var/lib/replication/hour" do
167   owner "planet"
168   group "planet"
169   mode 0o755
170 end
171
172 template "/var/lib/replication/hour/configuration.txt" do
173   source "replication.config.erb"
174   owner "planet"
175   group "planet"
176   mode 0o644
177   variables :base => "minute", :interval => 3600
178 end
179
180 link "/var/lib/replication/hour/data" do
181   to "/store/planet/replication/hour"
182 end
183
184 directory "/var/lib/replication/day" do
185   owner "planet"
186   group "planet"
187   mode 0o755
188 end
189
190 template "/var/lib/replication/day/configuration.txt" do
191   source "replication.config.erb"
192   owner "planet"
193   group "planet"
194   mode 0o644
195   variables :base => "hour", :interval => 86400
196 end
197
198 link "/var/lib/replication/day/data" do
199   to "/store/planet/replication/day"
200 end
201
202 if node[:planet][:replication] == "enabled"
203   cron_d "users-agreed" do
204     minute "0"
205     hour "7"
206     user "planet"
207     command "/usr/local/bin/users-agreed"
208     mailto "zerebubuth@gmail.com"
209   end
210
211   cron_d "users-deleted" do
212     minute "0"
213     hour "17"
214     user "planet"
215     command "/usr/local/bin/users-deleted"
216     mailto "zerebubuth@gmail.com"
217   end
218
219   cron_d "replication-changesets" do
220     user "planet"
221     command "/usr/local/bin/replicate-changesets /etc/replication/changesets.conf"
222     mailto "zerebubuth@gmail.com"
223   end
224
225   cron_d "replication-minutely" do
226     user "planet"
227     command "/usr/local/bin/osmosis -q --replicate-apidb authFile=/etc/replication/auth.conf validateSchemaVersion=false --write-replication workingDirectory=/store/planet/replication/minute"
228     mailto "brett@bretth.com"
229     environment "LD_PRELOAD" => "/opt/flush/flush.so"
230   end
231
232   cron_d "replication-hourly" do
233     minute "2,7,12,17"
234     user "planet"
235     command "/usr/local/bin/osmosis -q --merge-replication-files workingDirectory=/var/lib/replication/hour"
236     mailto "brett@bretth.com"
237     environment "LD_PRELOAD" => "/opt/flush/flush.so"
238   end
239
240   cron_d "replication-daily" do
241     minute "5,10,15,20"
242     user "planet"
243     command "/usr/local/bin/osmosis -q --merge-replication-files workingDirectory=/var/lib/replication/day"
244     mailto "brett@bretth.com"
245     environment "LD_PRELOAD" => "/opt/flush/flush.so"
246   end
247 else
248   cron_d "users-agreed" do
249     action :delete
250   end
251
252   cron_d "users-deleted" do
253     action :delete
254   end
255
256   cron_d "replication-changesets" do
257     action :delete
258   end
259
260   cron_d "replication-minutely" do
261     action :delete
262   end
263
264   cron_d "replication-hourly" do
265     action :delete
266   end
267
268   cron_d "replication-daily" do
269     action :delete
270   end
271 end
272
273 # directory "/var/lib/replication/streaming" do
274 #   owner "planet"
275 #   group "planet"
276 #   mode 0o755
277 # end
278 #
279 # directory "/var/log/replication" do
280 #   owner "planet"
281 #   group "planet"
282 #   mode 0o755
283 # end
284 #
285 # ["streaming-replicator", "streaming-server"].each do |name|
286 #   template "/etc/init.d/#{name}" do
287 #     source "streaming.init.erb"
288 #     owner "root"
289 #     group "root"
290 #     mode 0o755
291 #     variables :service => name
292 #   end
293 #
294 #   if node[:planet][:replication] == "enabled"
295 #     service name do
296 #       action [:enable, :start]
297 #       supports :restart => true, :status => true
298 #       subscribes :restart, "template[/etc/init.d/#{name}]"
299 #     end
300 #   else
301 #     service name do
302 #       action [:disable, :stop]
303 #       supports :restart => true, :status => true
304 #     end
305 #   end
306 # end