Ori.livneh has uploaded a new change for review.

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


Change subject: Add redis::php class & 'needs_update' param for extensions
......................................................................

Add redis::php class & 'needs_update' param for extensions

* If an extension sets needs_update => true, maintenance/update.php will
  now be invoked.
* A broader range of possible Puppet values are serialized correctly
  into PHP values.
* Fixed a typo in parameter names that was causing the admin username /
  pass to be set incorrectly.
* Fixed a bug that was preventing the MySQL client from knowing about
  database name changes.

Change-Id: If7a2e74f67b283b2a445637ecae4aab07f151cce
---
M puppet/modules/mediawiki/manifests/extension.pp
M puppet/modules/mediawiki/manifests/init.pp
M puppet/modules/mediawiki/templates/extension-loader.php.erb
M puppet/modules/misc/manifests/init.pp
M puppet/modules/mysql/manifests/init.pp
M puppet/modules/mysql/templates/my.cnf.erb
M puppet/modules/redis/manifests/init.pp
A puppet/modules/redis/manifests/php.pp
8 files changed, 54 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant 
refs/changes/42/63442/1

diff --git a/puppet/modules/mediawiki/manifests/extension.pp 
b/puppet/modules/mediawiki/manifests/extension.pp
index 6b1a616..54aff67 100644
--- a/puppet/modules/mediawiki/manifests/extension.pp
+++ b/puppet/modules/mediawiki/manifests/extension.pp
@@ -29,6 +29,11 @@
 #   default is 10. You only need to override the default if you want
 #   this extension to load before or after some other extension.
 #
+# [*needs_update*]
+#   If true, run MediaWiki's database update maintenance script
+#   (maintenance/update.php) after configuring the extension. False by
+#   default.
+#
 # [*settings*]
 #   This parameter contains configuration settings for the extension.
 #   Settings may be specified as a hash, array, or string. See examples
@@ -68,11 +73,12 @@
 #   }
 #
 define mediawiki::extension(
-       $ensure     = present,
-       $extension  = $title,
-       $entrypoint = "${title}.php",
-       $priority   = 10,
-       $settings   = {},
+       $ensure       = present,
+       $extension    = $title,
+       $entrypoint   = "${title}.php",
+       $priority     = 10,
+       $needs_update = false,
+       $settings     = {},
 ) {
        include mediawiki
 
@@ -95,5 +101,12 @@
                owner   => 'vagrant',
                group   => 'www-data',
                mode    => '0770',
+               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["/vagrant/settings/${settings_file}"] ~> Exec['update 
database']
        }
 }
diff --git a/puppet/modules/mediawiki/manifests/init.pp 
b/puppet/modules/mediawiki/manifests/init.pp
index 0948e01..3569f9c 100644
--- a/puppet/modules/mediawiki/manifests/init.pp
+++ b/puppet/modules/mediawiki/manifests/init.pp
@@ -59,7 +59,7 @@
        exec { 'mediawiki setup':
                require     => [ Exec['set mysql password'], 
Git::Clone['mediawiki/core'] ],
                creates     => "${dir}/LocalSettings.php",
-               command     => "php ${dir}/maintenance/install.php ${wiki_name} 
${admin} --pass ${pass} --dbname ${db_name} --dbuser ${db_user} --dbpass 
${db_pass} --server ${server_url} --scriptpath '/w'",
+               command     => "php ${dir}/maintenance/install.php ${wiki_name} 
${admin_user} --pass ${admin_pass} --dbname ${db_name} --dbuser ${db_user} 
--dbpass ${db_pass} --server ${server_url} --scriptpath '/w'",
        }
 
        exec { 'require extra settings':
@@ -84,4 +84,11 @@
                command => "${dir}/tests/phpunit/install-phpunit.sh",
                require => Exec['mediawiki setup'],
        }
+
+       exec { 'update database':
+               command     => "php ${dir}/maintenance/update.php --quick",
+               refreshonly => true,
+       }
+
+       Exec['mediawiki setup'] -> Mediawiki::Extension <| |>
 }
diff --git a/puppet/modules/mediawiki/templates/extension-loader.php.erb 
b/puppet/modules/mediawiki/templates/extension-loader.php.erb
index 0fdd548..e193497 100644
--- a/puppet/modules/mediawiki/templates/extension-loader.php.erb
+++ b/puppet/modules/mediawiki/templates/extension-loader.php.erb
@@ -1,13 +1,20 @@
 <?php
 // Loader for "<%= @extension %>" MediaWiki extension.
 // This file is managed by Puppet.
-require_once "<%= @extension_dir.sub( /^#{scope.lookupvar('mediawiki::dir')}/, 
'$IP' ) %>/<%= @entrypoint %>";
+<% if @entrypoint -%>
+include_once "<%= @extension_dir.sub( /^#{scope.lookupvar('mediawiki::dir')}/, 
'$IP' ) %>/<%= @entrypoint %>";
+<% end -%>
 
 <%=
 case @settings
 when Hash
-    @settings.map { |k,v|
-        "$#{k} = #{v.respond_to?(:to_i) && v.to_i == v ? v : v.inspect};"
+    @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|
diff --git a/puppet/modules/misc/manifests/init.pp 
b/puppet/modules/misc/manifests/init.pp
index e328d3e..9a8e4e0 100644
--- a/puppet/modules/misc/manifests/init.pp
+++ b/puppet/modules/misc/manifests/init.pp
@@ -40,7 +40,7 @@
        }
 
        # Small, nifty, useful things
-       package { [ 'ack-grep', 'htop', 'curl', 'tree' ]:
+       package { [ 'ack-grep', 'htop', 'curl' ]:
                ensure => present,
        }
 
diff --git a/puppet/modules/mysql/manifests/init.pp 
b/puppet/modules/mysql/manifests/init.pp
index b0784a8..75a0c3f 100644
--- a/puppet/modules/mysql/manifests/init.pp
+++ b/puppet/modules/mysql/manifests/init.pp
@@ -45,7 +45,6 @@
                owner   => 'vagrant',
                group   => 'vagrant',
                mode    => '0600',
-               replace => no,
                content => template('mysql/my.cnf.erb'),
        }
 }
diff --git a/puppet/modules/mysql/templates/my.cnf.erb 
b/puppet/modules/mysql/templates/my.cnf.erb
index 6caa01f..b27300f 100644
--- a/puppet/modules/mysql/templates/my.cnf.erb
+++ b/puppet/modules/mysql/templates/my.cnf.erb
@@ -8,10 +8,9 @@
 [mysql]
 pager = "less -inSFX"
 prompt = "(\R:\m)\_\u@\h:[\d]>\_"
-
-<% if @default_db_name %>
+<% if @default_db_name -%>
 database = "<%= @default_db_name %>"
-<% end %>
+<% end -%>
 comments = true
 show-warnings = true
 default-character-set = utf8
diff --git a/puppet/modules/redis/manifests/init.pp 
b/puppet/modules/redis/manifests/init.pp
index 4c67652..4511c94 100644
--- a/puppet/modules/redis/manifests/init.pp
+++ b/puppet/modules/redis/manifests/init.pp
@@ -43,6 +43,8 @@
        $persist    = false,
        $settings   = {},
 ) {
+       include redis::php
+
        $save = $persist ? {
                true    => [ '60', '1' ],
                default => undef,
diff --git a/puppet/modules/redis/manifests/php.pp 
b/puppet/modules/redis/manifests/php.pp
new file mode 100644
index 0000000..898fece
--- /dev/null
+++ b/puppet/modules/redis/manifests/php.pp
@@ -0,0 +1,13 @@
+# == Class: redis::php
+#
+# This class configures phpredis, a PHP extension that provides an API
+# for communicating with the Redis key-value store.
+#
+class redis::php {
+       include redis
+
+       package { 'php5-redis':
+               ensure  => present,
+               require => Service['redis-server'],
+       }
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If7a2e74f67b283b2a445637ecae4aab07f151cce
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: Ori.livneh <[email protected]>

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

Reply via email to