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