BryanDavis has uploaded a new change for review.

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


Change subject: Extract mediawiki::settings from mediawiki::extension.
......................................................................

Extract mediawiki::settings from mediawiki::extension.

Extraction refactoring of LocalSettings configuration file generation logic
from the mediawiki::extension resource type. Allows use of settings without
requiring an extension to be involved.

This will come in handy for things like thumb.php support which only need to
introduce configuration changes.

Change-Id: Icf6f228de5083337306d3fde935c03e3ee39630f
---
M puppet/modules/mediawiki/manifests/extension.pp
A puppet/modules/mediawiki/manifests/settings.pp
M puppet/modules/mediawiki/templates/extension-loader.php.erb
A puppet/modules/mediawiki/templates/settings.php.erb
4 files changed, 125 insertions(+), 43 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant 
refs/changes/43/78143/1

diff --git a/puppet/modules/mediawiki/manifests/extension.pp 
b/puppet/modules/mediawiki/manifests/extension.pp
index e75a445..469ac72 100644
--- a/puppet/modules/mediawiki/manifests/extension.pp
+++ b/puppet/modules/mediawiki/manifests/extension.pp
@@ -88,23 +88,12 @@
         directory => $extension_dir,
     }
 
-    $settings_file = sprintf('%s/%.2d-%s.php',
-        $mediawiki::managed_settings_dir, $priority, $extension)
-
-    file { $settings_file:
-        ensure  => $ensure,
-        content => template('mediawiki/extension-loader.php.erb'),
-        # Because the file resides on a shared folder, any other owner
-        # or mode will cause VirtualBox and Puppet to play tug-o'-war
-        # over the file.
-        owner   => 'vagrant',
-        group   => 'www-data',
-        require => Git::Clone["mediawiki/extensions/${extension}"],
-    }
-
-    if $needs_update {
-        # If the extension requires a schema migration, set up the
-        # setting file resource to notify update.php.
-        File[$settings_file] ~> Exec['update database']
+    mediawiki::settings { $extension:
+        settings     => $settings,
+        ensure       => $ensure,
+        priority     => $priority,
+        needs_update => $needs_update,
+        extra        => template('mediawiki/extension-loader.php.erb'),
+        require      => Git::Clone["mediawiki/extensions/${extension}"],
     }
 }
diff --git a/puppet/modules/mediawiki/manifests/settings.pp 
b/puppet/modules/mediawiki/manifests/settings.pp
new file mode 100644
index 0000000..4b7cb22
--- /dev/null
+++ b/puppet/modules/mediawiki/manifests/settings.pp
@@ -0,0 +1,94 @@
+# == Define: mediawiki::settings
+#
+# This resource type represents a collection of MediaWiki settings.
+#
+# === Parameters
+#
+# [*settings*]
+#   This parameter contains the configuration settings. Settings may be
+#   specified as a hash, array, or string. See examples below. Empty by
+#   default.
+#
+# [*ensure*]
+#   If 'present' (the default), Puppet will install the settings. 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. Settings managed by Puppet will
+#   load in order of priority, with smaller values loading first. The
+#   default is 10. You only need to override the default if you want
+#   these settings to load before or after some other settings.
+#
+# [*needs_update*]
+#   If true, run MediaWiki's database update maintenance script
+#   (maintenance/update.php) after creating the settings file. False by
+#   default.
+#
+# [*extra*]
+#   Additional content to stick in the settings file. For example you might
+#   want to require a php file to load an extension.
+#
+# === Examples
+#
+# The following example configures the EventLogging MediaWiki settings and
+# illustrates the use of hashes to specify settings:
+#
+#   mediawiki::settings { 'EventLogging':
+#     settings => {
+#       wgEventLoggingBaseUri        => "http://localhost:8181/event.gif";,
+#       wgEventLoggingDBname         => "testwiki",
+#       wgEventLoggingFile           => 'udp://127.0.0.1:1234/EventLogging',
+#       wgEventLoggingSchemaIndexUri => 
'http://meta.wikimedia.org/w/index.php',
+#     },
+#   }
+#
+# Note that the order of keys in a hash is unspecified. If the order matters to
+# you, use an array or a string. The next example shows how settings may be
+# specified as an array:
+#
+#   mediawiki::settings { 'MobileFrontend':
+#     settings => [
+#       '$wgMFEnableResourceLoader = true;',
+#       '$wgMFLogEvents = true;',
+#     ],
+#   }
+#
+# Finally, 'settings' 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:
+#
+#   mediawiki::settings { 'Math':
+#     settings => template('math/settings.php.erb'),
+#   }
+#
+define mediawiki::settings(
+    $settings,
+    $ensure       = present,
+    $priority     = 10,
+    $needs_update = false,
+    $extra        = false,
+) {
+    include mediawiki
+
+    # make a safe filename based on our title
+    $fname = inline_template('<%= @title.gsub(/\W/, "-").downcase %>')
+    $settings_file = sprintf('%s/%.2d-%s.php',
+        $mediawiki::managed_settings_dir, $priority, $fname)
+
+    file { $settings_file:
+        ensure  => $ensure,
+        content => template('mediawiki/settings.php.erb'),
+        # Because the file resides on a shared folder, any other owner
+        # or mode will cause VirtualBox and Puppet to play tug-o'-war
+        # over the file.
+        owner   => 'vagrant',
+        group   => 'www-data',
+    }
+
+    if $needs_update {
+        # If the extension requires a schema migration, set up the
+        # setting file resource to notify update.php.
+        File[$settings_file] ~> Exec['update database']
+    }
+}
diff --git a/puppet/modules/mediawiki/templates/extension-loader.php.erb 
b/puppet/modules/mediawiki/templates/extension-loader.php.erb
index e193497..1fc2353 100644
--- a/puppet/modules/mediawiki/templates/extension-loader.php.erb
+++ b/puppet/modules/mediawiki/templates/extension-loader.php.erb
@@ -1,26 +1 @@
-<?php
-// Loader for "<%= @extension %>" MediaWiki extension.
-// This file is managed by Puppet.
-<% if @entrypoint -%>
 include_once "<%= @extension_dir.sub( /^#{scope.lookupvar('mediawiki::dir')}/, 
'$IP' ) %>/<%= @entrypoint %>";
-<% end -%>
-
-<%=
-case @settings
-when Hash
-    @settings.sort.map { |k,v|
-               v = case
-               when v.respond_to?(:to_i) && v.to_i.to_s == v then v
-               when v.is_a?(Array) then v.inspect.gsub(/^\[(.*)\]$/, 'array( 
\\1 )')
-               else v.inspect
-               end
-               "$#{k} = #{v};"
-    }.join("\n")
-when Array
-       @settings.map { |v|
-               v =~ /;$/ ? v : v + ';'
-       }.join("\n")
-else
-    @settings
-end
-%>
diff --git a/puppet/modules/mediawiki/templates/settings.php.erb 
b/puppet/modules/mediawiki/templates/settings.php.erb
new file mode 100644
index 0000000..d497c51
--- /dev/null
+++ b/puppet/modules/mediawiki/templates/settings.php.erb
@@ -0,0 +1,24 @@
+<?php
+// "<%= @title %>" MediaWiki settings.
+// This file is managed by Puppet.
+<% if @extra -%><%= @extra %><% end -%>
+
+<%=
+case @settings
+when Hash
+       @settings.sort.map { |k,v|
+               v = case
+               when v.respond_to?(:to_i) && v.to_i.to_s == v then v
+               when v.is_a?(Array) then v.inspect.gsub(/^\[(.*)\]$/, 'array( 
\\1 )')
+               else v.inspect
+               end
+               "$#{k} = #{v};"
+       }.join("\n")
+when Array
+       @settings.map { |v|
+               v =~ /;$/ ? v : v + ';'
+       }.join("\n")
+else
+               @settings
+end
+%>

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icf6f228de5083337306d3fde935c03e3ee39630f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: BryanDavis <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to