]> git.openstreetmap.org Git - chef.git/blob - cookbooks/mediawiki/resources/skin.rb
Try to make mediawiki installation and update more robust
[chef.git] / cookbooks / mediawiki / resources / skin.rb
1 #
2 # Cookbook:: mediawiki
3 # Resource:: mediawiki_skin
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 # 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 unified_mode true
21
22 default_action :create
23
24 property :skin, :kind_of => String, :name_property => true
25 property :site, :kind_of => String, :required => true
26 property :source, :kind_of => String
27 property :template, :kind_of => String
28 property :variables, :kind_of => Hash, :default => {}
29 property :version, :kind_of => String
30 property :repository, :kind_of => String
31 property :revision, :kind_of => String
32 property :update_site, :kind_of => [TrueClass, FalseClass], :default => true
33 property :legacy, :kind_of => [TrueClass, FalseClass], :default => true
34
35 action :create do
36   if new_resource.source
37     remote_directory skin_directory do
38       cookbook "mediawiki"
39       source new_resource.source
40       owner node[:mediawiki][:user]
41       group node[:mediawiki][:group]
42       mode "755"
43       files_owner node[:mediawiki][:user]
44       files_group node[:mediawiki][:group]
45       files_mode "755"
46     end
47   else
48     skin_repository = new_resource.repository || default_repository
49     skin_revision = new_resource.revision || "REL#{skin_version}".tr(".", "_")
50
51     git skin_directory do
52       action :sync
53       repository skin_repository
54       revision skin_revision
55       enable_submodules true
56       user node[:mediawiki][:user]
57       group node[:mediawiki][:group]
58       ignore_failure skin_repository.start_with?("https://github.com/wikimedia/mediawiki-skins")
59     end
60   end
61
62   if new_resource.template
63     declare_resource :template, "#{mediawiki_directory}/LocalSettings.d/Skin-#{new_resource.skin}.inc.php" do
64       cookbook "mediawiki"
65       source new_resource.template
66       user node[:mediawiki][:user]
67       group node[:mediawiki][:group]
68       mode "664"
69       variables new_resource.variables
70     end
71   else
72     if new_resource.legacy
73       file_content = "<?php require_once('#{skin_directory}/#{new_resource.skin}.php');\n"
74       skin_file = "#{skin_directory}/#{new_resource.skin}.php"
75     else
76       file_content = "<?php wfLoadSkin('#{new_resource.skin}');\n"
77       skin_file = "#{skin_directory}/skin.json"
78     end
79
80     file "#{mediawiki_directory}/LocalSettings.d/Skin-#{new_resource.skin}.inc.php" do
81       content file_content
82       user node[:mediawiki][:user]
83       group node[:mediawiki][:group]
84       mode "664"
85       only_if { ::File.exist?(skin_file) }
86     end
87   end
88 end
89
90 action :delete do
91   directory skin_directory do
92     action :delete
93     recursive true
94   end
95
96   file "#{mediawiki_directory}/LocalSettings.d/Skin-#{new_resource.skin}.inc.php" do
97     action :delete
98   end
99 end
100
101 action_class do
102   def site_directory
103     node[:mediawiki][:sites][new_resource.site][:directory]
104   end
105
106   def mediawiki_directory
107     "#{site_directory}/w"
108   end
109
110   def skin_directory
111     "#{mediawiki_directory}/skins/#{new_resource.skin}"
112   end
113
114   def skin_version
115     new_resource.version || node[:mediawiki][:sites][new_resource.site][:version]
116   end
117
118   def default_repository
119     "https://github.com/wikimedia/mediawiki-skins-#{new_resource.skin}.git"
120   end
121 end
122
123 def after_created
124   notifies :update, "mediawiki_site[#{site}]" if update_site
125 end