BryanDavis has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/78260


Change subject: Add Puppet role for thumb.php 404 handler.
......................................................................

Add Puppet role for thumb.php 404 handler.

Creates a new `role::thumb_on_404` puppet class that can be used to configure
the mediawiki vhost to automatically generate thumbnails that are not found on
disk.

This patch relies on gerrit:78143 which extracted the wikimedia::settings
puppet class from wikimedia::extension.

The patch also introduces a new apache::config puppet class that can be used
to manage per-vhost apache configuration snippets. The base vhost config needs
to be modified to include these snippets at runtime.

Change-Id: I4123de0c01469d6efe9a65e3296fa7b2a3dcdb95
---
M puppet/manifests/roles.pp
A puppet/modules/apache/manifests/config.pp
M puppet/modules/apache/manifests/init.pp
M puppet/modules/apache/manifests/site.pp
A puppet/modules/apache/templates/site-config.erb
M puppet/modules/mediawiki/manifests/apache.pp
M puppet/modules/mediawiki/manifests/init.pp
M puppet/modules/mediawiki/templates/mediawiki-apache-site.erb
8 files changed, 130 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant 
refs/changes/60/78260/1

diff --git a/puppet/manifests/roles.pp b/puppet/manifests/roles.pp
index 5a886f8..ba802ab 100644
--- a/puppet/manifests/roles.pp
+++ b/puppet/manifests/roles.pp
@@ -360,3 +360,33 @@
         require => Package['php5-xdebug'],
     }
 }
+
+# == CLass: role::thumb_on_404
+# This class enables dynamic thumbnail generation via the thumb.php script for
+# 404 thumb images.
+class role::thumb_on_404 {
+    include role::mediawiki
+
+    mediawiki::settings { 'thumb on 404':
+        settings => [
+            '$wgThumbnailScriptPath = false',
+            '$wgGenerateThumbnailOnParse = false',
+        ],
+    }
+
+    apache::config { 'thumb on 404':
+        config => [
+            'RewriteEngine On',
+
+            '# call thumb.php for thumb images not on disk',
+            'RewriteCond %{REQUEST_FILENAME} !-f',
+            'RewriteCond %{REQUEST_FILENAME} !-d',
+            'RewriteRule 
^/images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ 
/w/thumb.php?f=$1&width=$2 [PT,QSA,B]',
+
+            '# call thumb.php for thumb archive images not on disk',
+            'RewriteCond %{REQUEST_FILENAME} !-f',
+            'RewriteCond %{REQUEST_FILENAME} !-d',
+            'RewriteRule 
^/images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ 
/w/thumb.php?f=$1&width=$2&archived=1 [PT,QSA,B]',
+        ],
+    }
+}
diff --git a/puppet/modules/apache/manifests/config.pp 
b/puppet/modules/apache/manifests/config.pp
new file mode 100644
index 0000000..ddae4b4
--- /dev/null
+++ b/puppet/modules/apache/manifests/config.pp
@@ -0,0 +1,71 @@
+# == Define: apache::config
+#
+# This resource type represents a collection of apache configuration
+# directives.
+#
+# === Parameters
+#
+# [*config*]
+#   This parameter contains the configuration directives. Directives may be
+#   specified as an array or string. See examples below. Empty by
+#   default.
+#
+# [*site*]
+#   The parameter specifies the apache vhost to apply the configuration to.
+#   Defaults to $mediawiki::wiki_name.
+#
+# [*ensure*]
+#   If 'present' (the default), Puppet will install the config. If
+#   'absent', Puppet will delete its configuration file.
+#
+# [*priority*]
+#   This parameter takes a numeric value, which is used to generate a
+#   prefix for the configuration snippet. Config managed by Puppet will
+#   load in order of priority, with smaller values loading first. The
+#   default is 50. You only need to override the default if you want
+#   these config to load before or after some other config.
+#
+# === Examples
+#
+# The following example configures the thumb.php 404 redirects and
+# illustrates the use of an array to specify config:
+#
+#   apache::config { 'Thumb.php 404':
+#     config => [
+#       'RewriteCond %{REQUEST_FILENAME} !-f',
+#       'RewriteCond %{REQUEST_FILENAME} !-d',
+#       'RewriteRule 
^/images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ 
/w/thumb.php?f=$1&width=$2 [PT,QSA,B]',
+#       'RewriteCond %{REQUEST_FILENAME} !-f',
+#       'RewriteCond %{REQUEST_FILENAME} !-d',
+#       'RewriteRule 
^/images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ 
/w/thumb.php?f=$1&width=$2&archived=1 [PT,QSA,B]',
+#     ],
+#   }
+#
+# Finally, 'config' can also be specified as a string value. This can be
+# especially powerful when used in combination with Puppet's template()
+# function, as the following example illustrates:
+#
+#   apache::config { 'something cool':
+#     config => template('cool_config.erb'),
+#   }
+#
+define apache::config(
+    $config,
+    $site         = $mediawiki::wiki_name,
+    $ensure       = present,
+    $priority     = 50,
+) {
+    include apache
+
+    # make a safe filename based on our title
+    $config_dir = sprintf('%s/%s', $apache::site_config_dir, $site)
+    $fname = inline_template('<%= @title.gsub(/\W/, "-").downcase %>')
+    $config_file = sprintf('%s/%.2d-%s.conf', $config_dir, $priority, $fname)
+
+    file { $config_file:
+        ensure  => $ensure,
+        content => template('apache/site-config.erb'),
+        require => Package['apache2'],
+        notify  => Service['apache2'],
+    }
+}
diff --git a/puppet/modules/apache/manifests/init.pp 
b/puppet/modules/apache/manifests/init.pp
index 675c470..933ee0c 100644
--- a/puppet/modules/apache/manifests/init.pp
+++ b/puppet/modules/apache/manifests/init.pp
@@ -3,6 +3,9 @@
 # Configures Apache HTTP Server
 #
 class apache {
+    # directory for site specific configuration snippets
+    $site_config_dir = '/etc/apache2/site-conf.d'
+
     package { 'apache2':
         ensure  => present,
     }
@@ -25,6 +28,10 @@
         notify  => Service['apache2'],
     }
 
+    file { $apache::site_config_dir:
+        ensure => directory,
+    }
+
     service { 'apache2':
         ensure     => running,
         provider   => 'init',
@@ -34,4 +41,5 @@
 
      Apache::Mod <| |>
      Apache::Site <| |>
+     Apache::Config <| |>
 }
diff --git a/puppet/modules/apache/manifests/site.pp 
b/puppet/modules/apache/manifests/site.pp
index 0c6bca0..473b682 100644
--- a/puppet/modules/apache/manifests/site.pp
+++ b/puppet/modules/apache/manifests/site.pp
@@ -46,6 +46,9 @@
                     before  => Exec["enable ${site}"],
                 }
             }
+            file { "${apache::site_config_dir}/${site_file}":
+                ensure => directory,
+            }
             exec { "enable ${title}":
                 command => "a2ensite -qf ${site}",
                 unless  => "test -L /etc/apache2/sites-enabled/${site_file}",
diff --git a/puppet/modules/apache/templates/site-config.erb 
b/puppet/modules/apache/templates/site-config.erb
new file mode 100644
index 0000000..8957257
--- /dev/null
+++ b/puppet/modules/apache/templates/site-config.erb
@@ -0,0 +1,9 @@
+# This file is managed by Puppet.
+<%=
+case @config
+when Array
+       @config.join("\n")
+else
+       @config
+end
+%>
diff --git a/puppet/modules/mediawiki/manifests/apache.pp 
b/puppet/modules/mediawiki/manifests/apache.pp
index 1b67421..184dc50 100644
--- a/puppet/modules/mediawiki/manifests/apache.pp
+++ b/puppet/modules/mediawiki/manifests/apache.pp
@@ -29,6 +29,11 @@
         ensure => present,
     }
 
+    @apache::config { 'dummy':
+        config   => '# placeholder to keep apache happy',
+        priority => 0,
+    }
+
     file { '/var/www/favicon.ico':
         ensure  => file,
         require => Package['apache2'],
diff --git a/puppet/modules/mediawiki/manifests/init.pp 
b/puppet/modules/mediawiki/manifests/init.pp
index c1a8be2..feeecf7 100644
--- a/puppet/modules/mediawiki/manifests/init.pp
+++ b/puppet/modules/mediawiki/manifests/init.pp
@@ -138,4 +138,5 @@
     }
 
     Exec['mediawiki setup'] -> Mediawiki::Extension <| |>
+    Mediawiki::Settings <| |>
 }
diff --git a/puppet/modules/mediawiki/templates/mediawiki-apache-site.erb 
b/puppet/modules/mediawiki/templates/mediawiki-apache-site.erb
index c50b539..791e28d 100644
--- a/puppet/modules/mediawiki/templates/mediawiki-apache-site.erb
+++ b/puppet/modules/mediawiki/templates/mediawiki-apache-site.erb
@@ -33,4 +33,7 @@
 
     ErrorLog "/vagrant/logs/apache-error.log"
     LogLevel error
+
+    # Include generic snippets of statements
+    Include site-conf.d/<%= scope.lookupvar('mediawiki::wiki_name') %>/*.conf
 </VirtualHost>

-- 
To view, visit https://gerrit.wikimedia.org/r/78260
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4123de0c01469d6efe9a65e3296fa7b2a3dcdb95
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: BryanDavis <bda...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to