]> git.openstreetmap.org Git - chef.git/blob - cookbooks/wordpress/providers/site.rb
Convert wordpress_site to an LWRP
[chef.git] / cookbooks / wordpress / providers / site.rb
1 #
2 # Cookbook Name:: wordpress
3 # Provider:: wordpress_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   version = new_resource.version || Chef::Wordpress.current_version
32
33   node.set_unless[:wordpress][:sites][new_resource.name] = {}
34
35   node.set[:wordpress][:sites][new_resource.name][:directory] = site_directory
36
37   node.set_unless[:wordpress][:sites][new_resource.name][:auth_key] = SecureRandom.base64(48)
38   node.set_unless[:wordpress][:sites][new_resource.name][:secure_auth_key] = SecureRandom.base64(48)
39   node.set_unless[:wordpress][:sites][new_resource.name][:logged_in_key] = SecureRandom.base64(48)
40   node.set_unless[:wordpress][:sites][new_resource.name][:nonce_key] = SecureRandom.base64(48)
41   node.set_unless[:wordpress][:sites][new_resource.name][:auth_salt] = SecureRandom.base64(48)
42   node.set_unless[:wordpress][:sites][new_resource.name][:secure_auth_salt] = SecureRandom.base64(48)
43   node.set_unless[:wordpress][:sites][new_resource.name][:logged_in_salt] = SecureRandom.base64(48)
44   node.set_unless[:wordpress][:sites][new_resource.name][:nonce_salt] = SecureRandom.base64(48)
45
46   mysql_user "#{new_resource.database_user}@localhost" do
47     password new_resource.database_password
48   end
49
50   mysql_database new_resource.database_name do
51     permissions "#{new_resource.database_user}@localhost" => :all
52   end
53
54   directory site_directory do
55     owner node[:wordpress][:user]
56     group node[:wordpress][:group]
57     mode 0755
58   end
59
60   subversion site_directory do
61     action :sync
62     repository "http://core.svn.wordpress.org/tags/#{version}"
63     user node[:wordpress][:user]
64     group node[:wordpress][:group]
65     ignore_failure true
66   end
67
68   wp_config = edit_file "#{site_directory}/wp-config-sample.php" do |line|
69     line.gsub!(/database_name_here/, new_resource.database_name)
70     line.gsub!(/username_here/, new_resource.database_user)
71     line.gsub!(/password_here/, new_resource.database_password)
72     line.gsub!(/wp_/, new_resource.database_prefix)
73
74     line.gsub!(/('AUTH_KEY', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:auth_key]}'")
75     line.gsub!(/('SECURE_AUTH_KEY', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:secure_auth_key]}'")
76     line.gsub!(/('LOGGED_IN_KEY', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:logged_in_key]}'")
77     line.gsub!(/('NONCE_KEY', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:nonce_key]}'")
78     line.gsub!(/('AUTH_SALT', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:auth_salt]}'")
79     line.gsub!(/('SECURE_AUTH_SALT', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:secure_auth_salt]}'")
80     line.gsub!(/('LOGGED_IN_SALT', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:logged_in_salt]}'")
81     line.gsub!(/('NONCE_SALT', *)'put your unique phrase here'/, "\\1'#{node[:wordpress][:sites][new_resource.name][:nonce_salt]}'")
82
83     if line =~ /define\('WP_DEBUG'/
84       line += "\n"
85       line += "/**\n"
86       line += " * Don't allow file editing.\n"
87       line += " */\n"
88       line += "define('DISALLOW_FILE_EDIT', true);\n"
89       if new_resource.ssl_enabled
90         line += "define('FORCE_SSL_LOGIN', true);\n"
91         line += "define('FORCE_SSL_ADMIN', true);\n"
92       end
93     end
94
95     line
96   end
97
98   file "#{site_directory}/wp-config.php" do
99     owner node[:wordpress][:user]
100     group node[:wordpress][:group]
101     mode 0644
102     content wp_config
103   end
104
105   directory "#{site_directory}/wp-content/uploads" do
106     owner "www-data"
107     group "www-data"
108     mode 0755
109   end
110
111   file "#{site_directory}/sitemap.xml" do
112     action :delete
113   end
114
115   file "#{site_directory}/sitemap.xml.gz" do
116     action :delete
117   end
118
119   cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
120     cookbook "wordpress"
121     owner node[:wordpress][:user]
122     group node[:wordpress][:group]
123     mode 0644
124     backup false
125   end
126
127   apache_site new_resource.name do
128     cookbook "wordpress"
129     template "apache.erb"
130     directory site_directory
131     variables :aliases => Array(new_resource.aliases),
132               :urls => new_resource.urls,
133               :ssl_enabled => new_resource.ssl_enabled,
134               :ssl_certificate => new_resource.ssl_certificate
135     reload_apache false
136   end
137
138   http_request "http://#{new_resource.name}/wp-admin/upgrade.php" do
139     action :nothing
140     url "http://#{new_resource.name}/wp-admin/upgrade.php?step=1"
141     subscribes :get, "subversion[#{site_directory}]"
142   end
143
144   wordpress_plugin "wp-fail2ban" do
145     site new_resource.name
146     reload_apache false
147   end
148
149   script "#{site_directory}/wp-content/plugins/wp-fail2ban" do
150     action :nothing
151     interpreter "php"
152     cwd site_directory
153     user "wordpress"
154     code <<-EOS
155     <?php
156     @include "wp-config.php";
157     @include_once "wp-includes/functions.php";
158     @include_once "wp-admin/includes/plugin.php";
159     activate_plugin("wp-fail2ban/wp-fail2ban.php", '', false, false);
160     ?>
161     EOS
162     subscribes :run, "wordpress_plugin[wp-fail2ban]"
163   end
164 end
165
166 action :delete do
167   wordpress_plugin "wp-fail2ban" do
168     action :delete
169     site new_resource.name
170     reload_apache false
171   end
172
173   apache_site new_resource.name do
174     action :delete
175     reload_apache false
176   end
177
178   directory site_directory do
179     action :delete
180     recursive true
181   end
182
183   mysql_database new_resource.database_name do
184     action :drop
185   end
186
187   mysql_user "#{new_resource.database_user}@localhost" do
188     action :drop
189   end
190 end
191
192 def site_directory
193   new_resource.directory || "/srv/#{new_resource.name}"
194 end