29f0c9ecfc368d62540841fadf10740bb62b8926
[chef.git] / cookbooks / mediawiki / providers / site.rb
1 #
2 # Cookbook Name:: mediawiki
3 # Provider:: mediawiki_site
4 #
5 # Copyright 2015, 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 require "securerandom"
21
22 include Chef::Mixin::EditFile
23
24 def whyrun_supported?
25   true
26 end
27
28 use_inline_resources
29
30 action :create do
31   node.set_unless[:mediawiki][:sites][new_resource.name] = {}
32
33   node.set[:mediawiki][:sites][new_resource.name][:directory] = site_directory
34   node.set[:mediawiki][:sites][new_resource.name][:version] = new_resource.version
35
36   node.set_unless[:mediawiki][:sites][new_resource.name][:wgSecretKey] = SecureRandom.base64(48)
37
38   mysql_user "#{new_resource.database_user}@localhost" do
39     password new_resource.database_password
40   end
41
42   mysql_database new_resource.database_name do
43     permissions "#{new_resource.database_user}@localhost" => :all
44   end
45
46   mediawiki_directory = "#{site_directory}/w"
47
48   ruby_block "rename-installer-localsettings" do
49     action :nothing
50     block do
51       ::File.rename("#{mediawiki_directory}/LocalSettings.php", "#{mediawiki_directory}/LocalSettings-install.php")
52     end
53   end
54
55   execute "#{mediawiki_directory}/maintenance/install.php" do
56     action :nothing
57     # Use metanamespace as Site Name to ensure correct set namespace
58     command "php maintenance/install.php --server '#{name}' --dbtype 'mysql' --dbname '#{new_resource.database_name}' --dbuser '#{new_resource.database_user}' --dbpass '#{new_resource.database_password}' --dbserver 'localhost' --scriptpath /w --pass '#{new_resource.admin_password}' '#{new_resource.metanamespace}' '#{new_resource.admin_user}'"
59     cwd mediawiki_directory
60     user node[:mediawiki][:user]
61     group node[:mediawiki][:group]
62     not_if do
63       ::File.exist?("#{mediawiki_directory}/LocalSettings-install.php")
64     end
65     notifies :create, "ruby_block[rename-installer-localsettings]", :immediately
66   end
67
68   execute "#{mediawiki_directory}/maintenance/update.php" do
69     action :nothing
70     command "php maintenance/update.php --quick"
71     cwd mediawiki_directory
72     user node[:mediawiki][:user]
73     group node[:mediawiki][:group]
74   end
75
76   directory site_directory do
77     owner node[:mediawiki][:user]
78     group node[:mediawiki][:group]
79     mode 0775
80   end
81
82   directory mediawiki_directory do
83     owner node[:mediawiki][:user]
84     group node[:mediawiki][:group]
85     mode 0775
86   end
87
88   mediawiki_reference = "refs/heads/REL#{new_resource.version}".tr(".", "_")
89
90   git site_directory do
91     action :sync
92     repository "git://github.com/wikimedia/mediawiki-core"
93     reference mediawiki_reference
94     # depth 1
95     user node[:mediawiki][:user]
96     group node[:mediawiki][:group]
97     notifies :run, "execute[#{mediawiki_directory}/maintenance/install.php]", :immediately
98     notifies :run, "execute[#{mediawiki_directory}/maintenance/update.php]"
99   end
100
101   # Safety catch if git doesn't update but install.php hasn't run
102   ruby_block "catch-installer-localsettings-run" do
103     action :create
104     block do
105       #
106     end
107     not_if do
108       ::File.exist?("#{mediawiki_directory}/LocalSettings-install.php")
109     end
110     notifies :run, "execute[#{mediawiki_directory}/maintenance/install.php]", :immediately
111   end
112
113   directory "#{mediawiki_directory}/images" do
114     owner "www-data"
115     group node[:mediawiki][:group]
116     mode 0775
117   end
118
119   directory "#{mediawiki_directory}/cache" do
120     owner "www-data"
121     group node[:mediawiki][:group]
122     mode 0775
123   end
124
125   directory "#{mediawiki_directory}/LocalSettings.d" do
126     user node[:mediawiki][:user]
127     group node[:mediawiki][:group]
128     mode 0775
129   end
130
131   template "#{mediawiki_directory}/LocalSettings.php" do
132     cookbook "mediawiki"
133     source "LocalSettings.php.erb"
134     owner node[:mediawiki][:user]
135     group node[:mediawiki][:group]
136     mode 0664
137     variables :name => new_resource.name,
138               :directory => mediawiki_directory,
139               :database_params => new_resource.database_params,
140               :mediawiki => new_resource.mediawiki_params
141     notifies :run, "execute[#{mediawiki_directory}/maintenance/update.php]"
142   end
143
144   template "/etc/cron.d/mediawiki-#{cron_name}" do
145     cookbook "mediawiki"
146     source "mediawiki.cron.erb"
147     owner "root"
148     group "root"
149     mode 0644
150     variables :name => new_resource.name, :directory => site_directory,
151               :user => node[:mediawiki][:user]
152   end
153
154   template "/etc/cron.daily/mediawiki-#{cron_name}-backup" do
155     cookbook "mediawiki"
156     source "mediawiki-backup.cron.erb"
157     owner "root"
158     group "root"
159     mode 0700
160     variables :name => new_resource.name, :directory => site_directory,
161               :database_params => new_resource.database_params
162   end
163
164   mediawiki_extension "Cite" do
165     site new_resource.name
166     template "mw-ext-Cite.inc.php.erb"
167     update_site false
168   end
169
170   mediawiki_extension "ConfirmEdit" do
171     site new_resource.name
172     template "mw-ext-ConfirmEdit.inc.php.erb"
173     variables :public_key => new_resource.recaptcha_public_key,
174               :private_key => new_resource.recaptcha_private_key
175     update_site false
176   end
177
178   mediawiki_extension "Gadgets" do
179     site new_resource.name
180     update_site false
181   end
182
183   mediawiki_extension "ImageMap" do
184     site new_resource.name
185     update_site false
186   end
187
188   mediawiki_extension "InputBox" do
189     site new_resource.name
190     update_site false
191   end
192
193   mediawiki_extension "Interwiki" do
194     site new_resource.name
195     update_site false
196   end
197
198   mediawiki_extension "Nuke" do
199     site new_resource.name
200     update_site false
201   end
202
203   mediawiki_extension "ParserFunctions" do
204     site new_resource.name
205     template "mw-ext-ParserFunctions.inc.php.erb"
206     update_site false
207   end
208
209   mediawiki_extension "PdfHandler" do
210     site new_resource.name
211     template "mw-ext-PdfHandler.inc.php.erb"
212     update_site false
213   end
214
215   mediawiki_extension "Poem" do
216     site new_resource.name
217     update_site false
218   end
219
220   mediawiki_extension "Renameuser" do
221     site new_resource.name
222     update_site false
223   end
224
225   mediawiki_extension "SimpleAntiSpam" do
226     site new_resource.name
227     update_site false
228   end
229
230   mediawiki_extension "SpamBlacklist" do
231     site new_resource.name
232     template "mw-ext-SpamBlacklist.inc.php.erb"
233     update_site false
234   end
235
236   mediawiki_extension "SyntaxHighlight_GeSHi" do
237     site new_resource.name
238     update_site false
239   end
240
241   mediawiki_extension "TitleBlacklist" do
242     site new_resource.name
243     template "mw-ext-TitleBlacklist.inc.php.erb"
244     update_site false
245   end
246
247   mediawiki_extension "WikiEditor" do
248     site new_resource.name
249     update_site false
250   end
251
252   # MediaWiki Language Extension Bundle
253   # FIXME: should automatically resolve tag
254   mw_lang_ext_bundle_tag = "2014.09"
255
256   mediawiki_extension "Babel" do
257     site new_resource.name
258     template "mw-ext-Babel.inc.php.erb"
259     tag mw_lang_ext_bundle_tag
260     update_site false
261   end
262
263   mediawiki_extension "cldr" do
264     site new_resource.name
265     tag mw_lang_ext_bundle_tag
266     update_site false
267   end
268
269   mediawiki_extension "CleanChanges" do
270     site new_resource.name
271     template "mw-ext-CleanChanges.inc.php.erb"
272     tag mw_lang_ext_bundle_tag
273     update_site false
274   end
275
276   mediawiki_extension "LocalisationUpdate" do
277     site new_resource.name
278     template "mw-ext-LocalisationUpdate.inc.php.erb"
279     tag mw_lang_ext_bundle_tag
280     update_site false
281   end
282
283   # LocalisationUpdate Update Cron
284   # template "/etc/cron.d/mediawiki-#{name}-LocalisationUpdate" do
285   #   cookbook "mediawiki"
286   #   source "mediawiki-LocalisationUpdate.cron.erb"
287   #   owner "root"
288   #   group "root"
289   #   mode 0755
290   #   variables :name => name, :directory => site_directory, :user => node[:mediawiki][:user]
291   # end
292
293   # mediawiki_extension "Translate" do
294   #   site new_resource.name
295   #   template "mw-ext-Translate.inc.php.erb"
296   #   tag mw_lang_ext_bundle_tag
297   #   update_site false
298   # end
299
300   mediawiki_extension "UniversalLanguageSelector" do
301     site new_resource.name
302     tag mw_lang_ext_bundle_tag
303     update_site false
304   end
305
306   mediawiki_extension "AntiSpoof" do
307     site new_resource.name
308     update_site false
309   end
310
311   mediawiki_extension "AbuseFilter" do
312     site new_resource.name
313     template "mw-ext-AbuseFilter.inc.php.erb"
314     update_site false
315   end
316
317   mediawiki_extension "CheckUser" do
318     site new_resource.name
319     template "mw-ext-CheckUser.inc.php.erb"
320     update_site false
321   end
322
323   mediawiki_extension "DismissableSiteNotice" do
324     site new_resource.name
325     update_site false
326   end
327
328   mediawiki_extension "Elastica" do
329     site new_resource.name
330     update_site false
331   end
332
333   mediawiki_extension "CirrusSearch" do
334     site new_resource.name
335     template "mw-ext-CirrusSearch.inc.php.erb"
336     update_site false
337   end
338
339   mediawiki_extension "osmtaginfo" do
340     site new_resource.name
341     repository "git://github.com/Firefishy/osmtaginfo.git"
342     tag "live"
343     update_site false
344   end
345
346   mediawiki_extension "SimpleMap" do
347     site new_resource.name
348     repository "git://github.com/Firefishy/SimpleMap.git"
349     tag "live"
350     update_site false
351   end
352
353   mediawiki_extension "SlippyMap" do
354     site new_resource.name
355     repository "git://github.com/Firefishy/SlippyMap.git"
356     tag "live"
357     update_site false
358   end
359
360   cookbook_file "#{site_directory}/cc-wiki.png" do
361     cookbook "mediawiki"
362     owner node[:mediawiki][:user]
363     group node[:mediawiki][:group]
364     mode 0644
365     backup false
366   end
367
368   cookbook_file "#{site_directory}/googled06a989d1ccc8364.html" do
369     cookbook "mediawiki"
370     owner node[:mediawiki][:user]
371     group node[:mediawiki][:group]
372     mode 0644
373     backup false
374   end
375
376   cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
377     cookbook "mediawiki"
378     owner node[:mediawiki][:user]
379     group node[:mediawiki][:group]
380     mode 0644
381     backup false
382   end
383
384   apache_site new_resource.name do
385     cookbook "mediawiki"
386     template "apache.erb"
387     directory site_directory
388     variables :aliases => Array(new_resource.aliases),
389               :private => new_resource.private,
390               :ssl_enabled => new_resource.ssl_enabled,
391               :ssl_certificate => new_resource.ssl_certificate,
392               :ssl_certificate_chain => new_resource.ssl_certificate_chain
393     reload_apache false
394   end
395
396   # FIXME: needs to run one
397   execute "#{mediawiki_directory}/extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php" do
398     action :nothing
399     command "php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php"
400     cwd mediawiki_directory
401     user node[:mediawiki][:user]
402     group node[:mediawiki][:group]
403   end
404 end
405
406 action :delete do
407   apache_site new_resource.name do
408     action :delete
409     reload_apache false
410   end
411
412   directory site_directory do
413     action :delete
414     recursive true
415   end
416
417   mysql_database new_resource.database_name do
418     action :drop
419   end
420
421   mysql_user "#{new_resource.database_user}@localhost" do
422     action :drop
423   end
424 end
425
426 def site_directory
427   new_resource.directory || "/srv/#{new_resource.name}"
428 end
429
430 def cron_name
431   new_resource.name.tr(".", "_")
432 end