Giuseppe Lavagetto has submitted this change and it was merged.

Change subject: mediawiki: use sites-available everywhere.
......................................................................


mediawiki: use sites-available everywhere.

Also, we add an updated header to the redirects.conf file and import
the corresponding .dat file and the generator. This way redirects.conf
can be generated from the .dat file and submitted for review.

Change-Id: I42a07252bf6ed37231ecba587e8dfc018e5c6609
Signed-off-by: Giuseppe Lavagetto <glavage...@wikimedia.org>
---
M manifests/role/mediawiki.pp
M modules/mediawiki/files/apache/sites/redirects.conf
A modules/mediawiki/files/apache/sites/redirects/redirects.dat
A modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects
M modules/mediawiki/manifests/web.pp
M modules/mediawiki/templates/apache/apache2.conf.erb
6 files changed, 989 insertions(+), 20 deletions(-)

Approvals:
  Giuseppe Lavagetto: Verified; Looks good to me, approved



diff --git a/manifests/role/mediawiki.pp b/manifests/role/mediawiki.pp
index 4d81d8c..2375b3f 100644
--- a/manifests/role/mediawiki.pp
+++ b/manifests/role/mediawiki.pp
@@ -21,11 +21,8 @@
     include ::role::mediawiki::common
     include ::lvs::configuration
 
-    $mw_use_sites = $::hostname == 'mw1017'
-
     class { '::mediawiki::web':
         workers_limit       => $workers_limit,
-        use_sites_available => $mw_use_sites,
     }
 
     class { 'lvs::realserver':
diff --git a/modules/mediawiki/files/apache/sites/redirects.conf 
b/modules/mediawiki/files/apache/sites/redirects.conf
index 0ff466c..8662d1f 100644
--- a/modules/mediawiki/files/apache/sites/redirects.conf
+++ b/modules/mediawiki/files/apache/sites/redirects.conf
@@ -1,4 +1,5 @@
-# This file is generated by refreshDomainRedirects from the source file 
redirects.dat
+# This file is generated by redirects/refreshDomainRedirects from the
+# source file redirects.dat and managed on servers by Puppet
 # Do not edit it manually!
 
 <VirtualHost *>
diff --git a/modules/mediawiki/files/apache/sites/redirects/redirects.dat 
b/modules/mediawiki/files/apache/sites/redirects/redirects.dat
new file mode 100644
index 0000000..ef79f23
--- /dev/null
+++ b/modules/mediawiki/files/apache/sites/redirects/redirects.dat
@@ -0,0 +1,509 @@
+# domain-redirects.dat -- The oyster knife of URL manipulation
+# vim: ft=conf ts=12
+#
+# Each non-blank line consists of a rule with whitespace-separated
+# parameters. The first parameter is the command name, which may be funnel,
+# rewrite or override.
+#
+# funnel       <domain-wildcard>       <dest>
+#
+#   Redirect a whole domain (or set of domains) to a single URL
+#
+# rewrite      <domain-wildcard>       <dest>
+#
+#   Rewrite the URLs in one domain (or set of domains) to URLs in another
+#   domain with an optional path prefix. A trailing slash in <dest> is ignored.
+#   A leading slash is implied in the source path.
+#
+# override     <domain-wildcard><path> <dest>
+#
+#   Override a rewrite or funnel rule for a certain domain wildcard by sending
+#   a certain path to a specified destination URL.
+#
+# Where:
+#   <domain-wildcard> may take one of the following forms:
+#
+#        <domain>             -- A simple domain name
+#        *.<domain>           -- Any subdomain of the given domain
+#        <domain>.*.<domain>  -- A specified subdomain of any subdomain of the
+#                                given domain
+#        *<domain>            -- Matches *.<domain> or <domain>, i.e. the
+#                                specified domain or any subdomain of it.
+#
+#   <dest> is a fully-qualified or protocol-relative URL. If the URL is
+#   protocol-relative, the behaviour will depend on X-Forwarded-Proto. The
+#   path part of the URL is optional, "/" is implied if it is absent.
+#
+#   If the special character "*" is present, it will be substituted with the
+#   subdomain part matched by a *.<domain> style domain wildcard. If "*" occurs
+#   in a rule where such a wildcard is not used, it will be interpreted as a
+#   literal "*".
+#
+#   <path> is the path part of a URL.
+#
+# Double-redirects are not allowed -- the domain part of the destination may
+# not be specified as a source elsewhere in the file. This prevents redirect
+# loops and accidental listing of important domains such as en.wikipedia.org
+# as a source.
+#
+
+# Shop redirects
+funnel shop.wiktionary.org     //shop.wikimedia.org
+funnel store.wiktionary.org    //shop.wikimedia.org
+funnel shop.wikiquote.org      //shop.wikimedia.org
+funnel store.wikiquote.org     //shop.wikimedia.org
+funnel shop.wikibooks.org      //shop.wikimedia.org
+funnel store.wikibooks.org     //shop.wikimedia.org
+funnel shop.wikinews.org       //shop.wikimedia.org
+funnel store.wikinews.org      //shop.wikimedia.org
+funnel shop.wikisource.org     //shop.wikimedia.org
+funnel store.wikisource.org    //shop.wikimedia.org
+funnel shop.wikiversity.org    //shop.wikimedia.org
+funnel store.wikiversity.org   //shop.wikimedia.org
+funnel shop.mediawiki.org      //shop.wikimedia.org
+funnel store.mediawiki.org     //shop.wikimedia.org
+funnel shop.wikimediafoundation.org    //shop.wikimedia.org
+funnel store.wikimediafoundation.org   //shop.wikimedia.org
+funnel shop.wikipedia.org      //shop.wikimedia.org
+funnel store.wikipedia.org     //shop.wikimedia.org
+funnel shop.wikipedia.com      //shop.wikimedia.org
+funnel store.wikipedia.com     //shop.wikimedia.org
+
+# Donate wiki
+rewrite        donate.mediawiki.org    https://donate.wikimedia.org
+rewrite        donate.wikibooks.org    https://donate.wikimedia.org
+rewrite        donate.wikimediafoundation.org  https://donate.wikimedia.org
+rewrite        donate.wikinews.org     https://donate.wikimedia.org
+rewrite        donate.wikipedia.com    https://donate.wikimedia.org
+rewrite        donate.wikiquote.org    https://donate.wikimedia.org
+rewrite        donate.wikisource.org   https://donate.wikimedia.org
+rewrite        donate.wikispecies.org  https://donate.wikimedia.org
+rewrite        donate.wikiversity.org  https://donate.wikimedia.org
+rewrite        donate.wiktionary.org   https://donate.wikimedia.org
+
+funnel sep11.wikipedia.org     
http://wayback.archive.org/web/20030315000000*/http://sep11.wikipedia.org/wiki/In_Memoriam
+
+funnel *wikijunior.com //en.wikibooks.org/wiki/Wikijunior
+funnel *wikijunior.org //en.wikibooks.org/wiki/Wikijunior
+funnel *wikijunior.net //en.wikibooks.org/wiki/Wikijunior
+
+# Language aliases
+rewrite        be-x-old.wikisource.org //be.wikisource.org # Bug 41755
+rewrite        de-beta.wikipedia.org   //de.wikipedia.org
+rewrite        cz.wikipedia.org        //cs.wikipedia.org
+rewrite        cz.wikipedia.com        //cs.wikipedia.org
+rewrite        cz.wikibooks.org        //cs.wikibooks.org
+rewrite        cz.wikibooks.com        //cs.wikibooks.org
+rewrite        cz.wikiquote.org        //cs.wikiquote.org
+rewrite        cz.wikiquote.com        //cs.wikiquote.org
+rewrite        cz.wikisource.org       //cs.wikisource.org
+rewrite        cz.wikisource.com       //cs.wikisource.org
+rewrite        cz.wikiversity.org      //cs.wikiversity.org
+rewrite        cz.wikiversity.com      //cs.wikiversity.org
+rewrite        cz.wiktionary.org       //cs.wiktionary.org
+rewrite        cz.wiktionary.com       //cs.wiktionary.org
+rewrite        cz.wikinews.org //cs.wikinews.org
+rewrite        cz.wikinews.com //cs.wikinews.org
+rewrite        dk.wikipedia.org        //da.wikipedia.org
+rewrite        dk.wikipedia.com        //da.wikipedia.org
+rewrite        dk.wikibooks.org        //da.wikibooks.org
+rewrite        dk.wikibooks.com        //da.wikibooks.org
+rewrite        dk.wiktionary.org       //da.wiktionary.org
+rewrite        dk.wiktionary.com       //da.wiktionary.org
+rewrite        epo.wikipedia.org       //eo.wikipedia.org
+rewrite        jp.wikipedia.org        //ja.wikipedia.org
+rewrite        jp.wikipedia.com        //ja.wikipedia.org
+rewrite        nb.wikipedia.org        //no.wikipedia.org
+
+# renamed chapter wiki - bug 38763
+rewrite        pa.us.wikimedia.org     //pa-us.wikimedia.org
+
+# arbcom
+rewrite        arbcom.de.wikipedia.org https://arbcom-de.wikipedia.org
+rewrite        arbcom.en.wikipedia.org https://arbcom-en.wikipedia.org
+rewrite        arbcom.fi.wikipedia.org https://arbcom-fi.wikipedia.org
+rewrite        arbcom.nl.wikipedia.org https://arbcom-nl.wikipedia.org
+
+rewrite        noboard.chapters.wikimedia.org  //noboard-chapters.wikimedia.org
+
+rewrite        wg.en.wikipedia.org     //wg-en.wikipedia.org
+
+rewrite        tp.wikipedia.org        //tokipona.wikipedia.org
+
+rewrite        zh-cfr.wikipedia.org    //zh-min-nan.wikipedia.org
+rewrite        minnan.wikipedia.org    //zh-min-nan.wikipedia.org
+rewrite        nan.wikipedia.org       //zh-min-nan.wikipedia.org
+
+rewrite        zh-cn.wikipedia.org     //zh.wikipedia.org
+rewrite        zh-tw.wikipedia.org     //zh.wikipedia.org
+
+# RT #4240
+funnel *wikiartpedia.biz       //www.wikipedia.org
+funnel *wikiartpedia.co        //www.wikipedia.org
+funnel *wikiartpedia.info      //www.wikipedia.org
+funnel *wikiartpedia.me        //www.wikipedia.org
+funnel *wikiartpedia.mobi      //www.wikipedia.org
+funnel *wikiartpedia.net       //www.wikipedia.org
+funnel *wikiartpedia.org       //www.wikipedia.org
+
+# Redirect old URLs to en.wikibooks.org, to avoid breaking them
+rewrite        wikibooks.org   //en.wikibooks.org
+rewrite        wikibooks.com   //en.wikibooks.org
+rewrite        www.wikibooks.com       //en.wikibooks.org
+
+rewrite        wikibooks.de    //de.wikibooks.org
+rewrite        www.wikibooks.de        //de.wikibooks.org
+
+# *.wikibooks.com or *.wikibook.com -> org
+rewrite        *.wikibooks.com //*.wikibooks.org
+rewrite        *.wikibook.com  //*.wikibooks.org
+rewrite        wikibook.com    //en.wikibooks.org
+rewrite        *.wikibook.org  //*.wikibooks.org
+rewrite        wikibook.org    //en.wikibooks.org
+
+rewrite        textbook.wikipedia.org  //www.wikibooks.org
+
+# Education program
+
+funnel educacao.wikimedia.org  //pt.wikipedia.org/wiki/Wikip%C3%A9dia:WU
+
+override       education.wikimedia.org/evaluating      
//commons.wikimedia.org/wiki/File:Evaluating_Wikipedia_brochure.pdf
+override       education.wikimedia.org/illustrating    
//commons.wikimedia.org/wiki/File:Illustrating_Wikipedia_brochure.pdf
+
+override       education.wikimedia.org/casestudies     
//outreach.wikimedia.org/wiki/Education/Case_Studies
+
+override       education.wikimedia.org/content 
//outreach.wikimedia.org/wiki/Education/Case_Studies/content
+override       education.wikimedia.org/copyediting     
//outreach.wikimedia.org/wiki/Education/Case_Studies/copyediting
+override       education.wikimedia.org/definitions     
//outreach.wikimedia.org/wiki/Education/Case_Studies/definitions
+override       education.wikimedia.org/featuredarticle 
//outreach.wikimedia.org/wiki/Education/Case_Studies/featuredarticle
+override       education.wikimedia.org/fivecriteria    
//outreach.wikimedia.org/wiki/Education/Case_Studies/fivecriteria
+override       education.wikimedia.org/illustrations   
//outreach.wikimedia.org/wiki/Education/Case_Studies/illustrations
+override       education.wikimedia.org/milestones      
//outreach.wikimedia.org/wiki/Education/Case_Studies/milestones
+override       education.wikimedia.org/peerreviews     
//outreach.wikimedia.org/wiki/Education/Case_Studies/peerreviews
+override       education.wikimedia.org/photos  
//outreach.wikimedia.org/wiki/Education/Case_Studies/photos
+override       education.wikimedia.org/reflectivepapers        
//outreach.wikimedia.org/wiki/Education/Case_Studies/reflectivepapers
+override       education.wikimedia.org/translationarabic       
//outreach.wikimedia.org/wiki/Education/Case_Studies/translationarabic
+override       education.wikimedia.org/translationspanish      
//outreach.wikimedia.org/wiki/Education/Case_Studies/translationspanish
+override       education.wikimedia.org/videos  
//outreach.wikimedia.org/wiki/Education/Case_Studies/videos
+override       education.wikimedia.org/writearticle    
//outreach.wikimedia.org/wiki/Education/Case_Studies/writearticle
+
+override       education.wikimedia.org/syllabus        
//outreach.wikimedia.org/wiki/Education/The_Syllabus
+override       education.wikimedia.org/welcometowikipedia      
//commons.wikimedia.org/wiki/File:Welcome_to_Wikipedia_brochure_EN.pdf
+override       education.wikimedia.org/instructorbasics        
//commons.wikimedia.org/wiki/File:Instructor_Basics_How_to_Use_Wikipedia_as_a_Teaching_Tool.pdf
+
+funnel education.wikimedia.org //outreach.wikimedia.org/wiki/Education
+
+# Localised TLDs
+
+rewrite        *wikinews.de    //de.wikinews.org
+rewrite        *wicipediacymraeg.org   //cy.wikipedia.org
+rewrite        *wikipedia.org.il       //he.wikipedia.org
+rewrite        *wikipedia.co.il        //he.wikipedia.org
+rewrite        *vikimedija.org //rs.wikimedia.org
+rewrite        *wikipedia.bg   //bg.wikipedia.org
+rewrite        *wikipedia.co.za        //af.wikipedia.org
+rewrite        *wikibooks.cz   //cs.wikibooks.org
+rewrite        *wikicitaty.cz  //cs.wikiquote.org
+rewrite        *wikidruhy.cz   //species.wikimedia.org
+rewrite        *wikiquote.cz   //cs.wikiquote.org
+rewrite        *wikisource.cz  //cs.wikisource.org
+rewrite        *wikispecies.cz //species.wikimedia.org
+rewrite        *wikiversity.cz //cs.wikiversity.org
+rewrite        *wikiverzita.cz //cs.wikiversity.org
+rewrite        *wikizpravy.cz  //cs.wikinews.org
+rewrite        *wikizdroje.cz  //cs.wikisource.org
+rewrite        *wiktionary.cz  //cs.wiktionary.org
+rewrite        *wikislovnik.cz //cs.wiktionary.org
+rewrite        *wikiknihy.cz   //cs.wikibooks.org
+rewrite        *wikisource.pl  //pl.wikisource.org
+
+# RT-3244
+override       *wikipedie.cz/Experti_na_prirodu        
//cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu
+override       *wikipedie.cz/Experti-na-prirodu        
//cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu
+override       *wikipedie.cz/experti_na_prirodu        
//cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu
+override       *wikipedie.cz/experti-na-prirodu        
//cs.wikipedia.org/wiki/Wikipedie:WikiProjekt_Chráněná_území/Experti_na_přírodu
+
+rewrite        *wikipedie.cz   //cs.wikipedia.org
+rewrite        *wikipedia.cz   //cs.wikipedia.org
+
+# wikimedia.ee / wikipedia.ee - RT #4566
+rewrite        *wikimedia.ee   //et.wikimedia.org
+
+rewrite        *wikipedia.ee   //et.wikipedia.org
+
+rewrite        *wikimedia.biz  //www.wikimedia.org
+rewrite        *wikimedia.jp.net       //www.wikimedia.org
+
+rewrite        *wikimedia.lt   //wikimediafoundation.org
+rewrite        *wikipedia.lt   //lt.wikipedia.org
+
+rewrite        *wikimemory.org //www.wikimedia.org
+
+# Wikipedia
+
+rewrite        *en-wp.com      //en.wikipedia.org
+rewrite        *en-wp.org      //en.wikipedia.org
+
+rewrite        wikiipedia.org  //www.wikipedia.org
+rewrite        www.wikiipedia.org      //www.wikipedia.org
+
+rewrite        wikipedia.com   //www.wikipedia.org
+rewrite        wikipedia.net   //www.wikipedia.org
+rewrite        wikipedia.info  //www.wikipedia.org
+rewrite        www.wikipedia.com       //www.wikipedia.org
+rewrite        www.wikipedia.net       //www.wikipedia.org
+
+rewrite        en.wikipedia.com        //en.wikipedia.org
+rewrite        en2.wikipedia.org       //en.wikipedia.org
+
+rewrite        *wikipedia.co.uk        //en.wikipedia.org
+
+rewrite        *.wikipedia.com //*.wikipedia.org
+rewrite        *.wikipedia.net //*.wikipedia.org
+rewrite        *.wikipedia.info        //*.wikipedia.org
+rewrite        www.*.wikipedia.com     //*.wikipedia.org
+rewrite        www.*.wikipedia.net     //*.wikipedia.org
+rewrite        www.*.wikipedia.info    //*.wikipedia.org
+rewrite        *.wiki-pedia.org        //*.wikipedia.org
+rewrite        *.wikipaedia.net        //*.wikipedia.org
+
+rewrite        wikipaedia.net  //www.wikipedia.org
+rewrite        wiki-pedia.org  //www.wikipedia.org
+
+funnel *visualwikipedia.com    //www.wikipedia.org
+funnel *visualwikipedia.net    //www.wikipedia.org
+funnel *webhostingwikipedia.com        //www.wikipedia.org
+funnel *wikifamily.com //www.wikipedia.org
+funnel *wikifamily.org //www.wikipedia.org
+
+# wikipedia typo domains to www. instead of en - RT #4679,#4681
+funnel *wiikipedia.com //www.wikipedia.org
+funnel *wekipedia.com  //www.wikipedia.org
+funnel *wikiepdia.com  //www.wikipedia.org
+funnel *wikiepdia.org  //www.wikipedia.org
+funnel *wikiipedia.org //www.wikipedia.org
+funnel *wikpedia.org   //www.wikipedia.org
+
+# Wiktionary
+
+rewrite        *.wiktionary.com        //*.wiktionary.org
+rewrite        wiktionary.com  //www.wiktionary.org
+rewrite        www.wiktionary.com      //www.wiktionary.org
+funnel *wiktionary.eu  //www.wiktionary.org
+
+# Wikisource
+
+rewrite        sources.wikipedia.org   //wikisource.org
+rewrite        *.wikisource.com        //*.wikisource.org
+rewrite        wikisource.com  //wikisource.org
+
+
+# Wikiquote
+
+rewrite        quote.wikipedia.org     //en.wikiquote.org
+rewrite        wikiquote.com   //www.wikiquote.org
+rewrite        *.wikiquote.com //*.wikiquote.org
+rewrite        wikiquote.net   //www.wikiquote.org
+rewrite        *.wikiquote.net //*.wikiquote.org
+
+# Wikinews
+
+rewrite        wikinews.com    //www.wikinews.org
+rewrite        *.wikinews.com  //*.wikinews.org
+
+# Wikispecies
+
+# Temporarily at species.wikipedia.org until DNS is sorted out
+rewrite        *wikispecies.com        //species.wikimedia.org
+rewrite        *wikispecies.org        //species.wikimedia.org
+rewrite        *wikispecies.net        //species.wikimedia.org
+
+rewrite        species.wikipedia.org   //species.wikimedia.org
+
+# Wikiversity
+
+rewrite        *.wikiversity.com       //*.wikiversity.org
+rewrite        *.wikiversity.net       //*.wikiversity.org
+rewrite        *.wikiversity.info      //*.wikiversity.org
+
+rewrite        wikiversity.com //www.wikiversity.org
+rewrite        wikiversity.net //www.wikiversity.org
+rewrite        wikiversity.info        //www.wikiversity.org
+
+# Wikivoyage
+rewrite        *.wikivoyage.com        //*.wikivoyage.org
+rewrite        *.wikivoyage.de //*.wikivoyage.org
+rewrite        *.wikivoyage.eu //*.wikivoyage.org
+rewrite        *.wikivoyage.net        //*.wikivoyage.org
+rewrite        wikivoyage.com  //www.wikivoyage.org
+rewrite        wikivoyage.de   //www.wikivoyage.org
+rewrite        wikivoyage.eu   //www.wikivoyage.org
+rewrite        wikivoyage.net  //www.wikivoyage.org
+
+# Wikivoyager (RT-4333)
+rewrite        *.wikivoyager.org       //*.wikivoyage.org
+rewrite        *.wikivoyager.de        //*.wikivoyage.org
+rewrite        wikivoyager.org //www.wikivoyage.org
+rewrite        wikivoyager.de  //www.wikivoyage.org
+
+# Voyagewiki (RT-5539)
+rewrite        *.voyagewiki.com        //*.wikivoyage.org
+rewrite        *.voyagewiki.org        //*.wikivoyage.org
+rewrite        voyagewiki.com  //www.wikivoyage.org
+rewrite        voyagewiki.org  //www.wikivoyage.org
+
+# wikimediafoundation
+rewrite        *wikimediafoundation.com        //wikimediafoundation.org
+rewrite        *wikimediafoundation.net        //wikimediafoundation.org
+rewrite        *wikimediafoundation.info       //wikimediafoundation.org
+rewrite        *.wikimediafoundation.org       //wikimediafoundation.org
+
+# Commons
+
+rewrite        *wikimediacommons.net   //commons.wikimedia.org
+rewrite        *wikimediacommons.info  //commons.wikimedia.org
+rewrite        *wikimediacommons.mobi  //commons.wikimedia.org
+rewrite        *wikimediacommons.eu    //commons.wikimedia.org
+rewrite        *wikimediacommons.org   //commons.wikimedia.org
+rewrite        *wikimediacommons.jp.net        //commons.wikimedia.org
+rewrite        *wikimediacommons.pt    //commons.wikimedia.org
+rewrite        *wikimediacommons.co.uk //commons.wikimedia.org
+
+rewrite        commons.wikipedia.org   //commons.wikimedia.org
+rewrite        www.commons.wikimedia.org       //commons.wikimedia.org
+rewrite        www.commons.wikipedia.org       //commons.wikimedia.org
+
+# Bookshelf Project
+rewrite        bookshelf.wikimedia.org //outreach.wikimedia.org/wiki/Bookshelf/
+
+# Random acquired cruft
+funnel *wikidisclosure.com     //www.wikimedia.org
+funnel *wikidisclosure.org     //www.wikimedia.org
+funnel *wikimaps.com   //www.wikimedia.org
+funnel *wikimaps.net   //www.wikimedia.org
+funnel *wikimaps.org   //www.wikimedia.org
+
+
+# Other projects
+
+rewrite        meta.wikipedia.org      //meta.wikimedia.org
+rewrite        www.meta.wikipedia.org  //meta.wikimedia.org
+rewrite        www.meta.wikimedia.org  //meta.wikimedia.org
+
+rewrite        quality.wikipedia.org   //quality.wikimedia.org
+rewrite        quality.wikipedia.com   //quality.wikimedia.org
+
+rewrite        bugzilla.wikipedia.org  https://bugzilla.wikimedia.org
+rewrite        bugs.mediawiki.org      https://bugzilla.wikimedia.org
+rewrite        bugzilla.mediawiki.org  https://bugzilla.wikimedia.org
+
+rewrite        *mediawiki.com  //www.mediawiki.org
+rewrite        wiki.mediawiki.org      //www.mediawiki.org
+
+# Continuous Integration RT 6593, RT 6594
+funnel doc.mediawiki.org       https://doc.wikimedia.org
+funnel integration.mediawiki.org       https://integration.wikimedia.org
+
+rewrite        *softwarewikipedia.com  //www.mediawiki.org
+rewrite        *softwarewikipedia.net  //www.mediawiki.org
+rewrite        *softwarewikipedia.org  //www.mediawiki.org
+
+rewrite        nostalgia.wikimedia.org //nostalgia.wikipedia.org
+
+###############
+## projects
+###############
+#wikipedia is in wwwportals.conf
+rewrite        mediawiki.org   //www.mediawiki.org
+rewrite        wikimedia.org   //www.wikimedia.org
+rewrite        wikinews.org    //www.wikinews.org
+rewrite        wikiquote.org   //www.wikiquote.org
+rewrite        wikiversity.org //www.wikiversity.org
+rewrite        wikivoyage.org  //www.wikivoyage.org
+rewrite        wikibooks.org   //www.wikibooks.org
+rewrite        wiktionary.org  //www.wiktionary.org
+rewrite        wikidata.org    //www.wikidata.org #bug 45005
+
+rewrite        www.wikisource.org      //wikisource.org
+
+###############
+## chapters
+###############
+funnel ch.wikimedia.org        //www.wikimedia.ch
+
+rewrite        hu.wikimedia.org        http://wiki.media.hu
+
+rewrite        it.wikimedia.org        http://www.wikimedia.it
+
+funnel kr.wikimedia.org        //meta.wikimedia.org/wiki/위키미디어_대한민국
+
+# pk.wikimedia.org (bug 54780)
+funnel pk.wikimedia.org        
//meta.wikimedia.org/wiki/Wikimedia_Community_User_Group_Pakistan
+
+# pt.wikimedia.org was migrated to wikimedia.pt
+funnel pt.wikimedia.org        http://wikimedia.pt
+
+rewrite        uk.wikimedia.org        https://wikimedia.org.uk/
+
+rewrite        ve.wikimedia.org        http://wikimedia.org.ve
+
+
+# Wikimania
+rewrite        wikimania.wikimedia.org //wikimania2014.wikimedia.org
+rewrite        *wikimania.asia //wikimania2013.wikimedia.org
+
+# labs -> wikitech
+funnel labs.wikimedia.org      https://wikitech.wikimedia.org
+
+# wikimedia.com redirect
+funnel *wikimedia.com  //www.wikimedia.org
+
+# wikimedia.us redirect
+funnel *wikimedia.us   //www.wikimedia.org
+
+# tartupeedia.ee (WMEE-owned domain) - bug 44893
+funnel *tartupeedia.ee //et.wikipedia.org/wiki/Portaal:Tartupeedia
+
+# indiawikipedia.com - RT #1395
+funnel *indiawikipedia.com     http://wikimedia.in/wikipedia.html
+
+# wikipedia.in
+funnel *wikipedia.in   http://wikimedia.in/wikipedia.html
+
+# coffee - keep for historic reasons:)
+funnel coffee.wikimedia.org    
//en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol
+
+# wikipediazero.org - RT #5039
+funnel *wikipediazero.org      //wikimediafoundation.org/wiki/Wikipedia_Zero
+
+# wikimediastories.com/net/org - RT #4942
+funnel *wikimediastories.com   //wikimediafoundation.org/wiki/Thank_You_All
+funnel *wikimediastories.net   //wikimediafoundation.org/wiki/Thank_You_All
+funnel *wikimediastories.org   //wikimediafoundation.org/wiki/Thank_You_All
+funnel *wikipediastories.com   //wikimediafoundation.org/wiki/Thank_You_All
+funnel *wikipediastories.net   //wikimediafoundation.org/wiki/Thank_You_All
+funnel *wikipediastories.org   //wikimediafoundation.org/wiki/Thank_You_All
+
+# jobs/careers - RT #5709
+rewrite        *careers.wikimedia.org  
//wikimediafoundation.org/wiki/Job_openings
+rewrite        *careers.wikipedia.org  
//wikimediafoundation.org/wiki/Job_openings
+rewrite        *jobs.wikimedia.org     
//wikimediafoundation.org/wiki/Job_openings
+rewrite        *jobs.wikipedia.org     
//wikimediafoundation.org/wiki/Job_openings
+override       *careers.wikimedia.org/ 
//wikimediafoundation.org/wiki/Work_with_us
+override       *careers.wikipedia.org/ 
//wikimediafoundation.org/wiki/Work_with_us
+override       *jobs.wikimedia.org/    
//wikimediafoundation.org/wiki/Work_with_us
+override       *jobs.wikipedia.org/    
//wikimediafoundation.org/wiki/Work_with_us
+
+# mobile redirects for commonly-used domains
+funnel mobile.wikipedia.org    //m.wikipedia.org
+rewrite        *.mobile.wikipedia.org  //*.m.wikipedia.org
+rewrite        *.wap.wikipedia.org     //*.m.wikipedia.org
+
+# pywikipedia.org (bug #58803).
+funnel *pywikipedia.org        //tools.wmflabs.org/pywikibot/
+
+# w.wiki - upcoming URL shortener
+funnel *w.wiki //www.wikipedia.org
+
+# RT #7862
+override wikimedia.org/research 
https://s.qualtrics.com/SE/?SID=SV_6R04ammTX8uoJFP&Preview=Survey&BrandID=wikimedia
diff --git 
a/modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects 
b/modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects
new file mode 100755
index 0000000..28fd369
--- /dev/null
+++ b/modules/mediawiki/files/apache/sites/redirects/refreshDomainRedirects
@@ -0,0 +1,472 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * Process redirects.dat and generate redirects.conf from it.
+ *
+ * See the comments in redirects.dat for the input format.
+ *
+ * Usage:
+ *   ./refreshDomainRedirects
+ *
+ * The source file is assumed to be in the same directory as
+ * the script, while the output one is assumed to be in the parent
+ * directory.
+ */
+class DomainRedirectParser {
+       var $dir, $lineNum, $lines, $rules;
+
+       function __construct( $dir ) {
+               $this->dir = $dir;
+               $this->output_file = $this->dir."/../redirects.conf";
+               $this->lineNum = 0;
+               $lines = file( "$dir/redirects.dat" );
+               if ( $lines === false ) {
+                       $this->error( "Unable to open input file" );
+               }
+               $this->lines = array_map( 'rtrim', $lines );
+               $this->rules = array(
+                       'wildcard' => array(),
+                       'plain' => array(),
+                       'wildcardOverride' => array(),
+                       'plainOverride' => array()
+               );
+       }
+
+       function execute() {
+               while ( false !== ( $line = $this->nextLine() ) ) {
+                       // Remove comments
+                       $line = preg_replace( '/#.*$/', '', $line );
+                       // Remove leading and trailing whitespace
+                       $line = trim( $line );
+                       if ( $line === '' ) {
+                               continue;
+                       }
+
+                       $args = preg_split( '/\s+/', $line );
+                       $cmd = array_shift( $args );
+                       switch ( $cmd ) {
+                               case 'funnel':
+                                       $this->doFunnel( $args );
+                                       break;
+                               case 'rewrite':
+                                       $this->doRewrite( $args );
+                                       break;
+                               case 'override':
+                                       $this->doOverride( $args );
+                                       break;
+                               default:
+                                       $this->error( "Invalid command 
\"$cmd\"" );
+                       }
+               }
+
+               $this->checkOrphanOverrides();
+               $this->checkLoops();
+               $this->writeApacheConf();
+       }
+
+       function nextLine() {
+               if ( $this->lineNum < count( $this->lines ) ) {
+                       return $this->lines[$this->lineNum++];
+               } else {
+                       return false;
+               }
+       }
+
+       function error( $msg ) {
+               throw new DomainRedirectParser_Error( $msg, $this->lineNum );
+       }
+
+       /**
+        * Process a funnel command at the current input position
+        * @param array $args The arguments to the command
+        */
+       function doFunnel( $args ) {
+               if ( count( $args ) != 2 ) {
+                       $this->error( "funnel must be given two parameters" );
+               }
+               list( $domain, $dest ) = $args;
+               $destInfo = $this->interpretDest( $dest );
+
+               if ( strpos( $domain, '*' ) !== false ) {
+                       $wildcardList = $this->interpretWildcard( $domain );
+                       foreach ( $wildcardList as $wildcard ) {
+                               $domainRegex = $wildcard['domainRegex'];
+                               if ( strpos( $domainRegex, '(' ) !== false ) {
+                                       $wildcardDest = str_replace( '*', '%1', 
$destInfo['dest'] );
+                               } else {
+                                       $wildcardDest = $destInfo['dest'];
+                               }
+
+                               $this->rules['wildcard'][] = array(
+                                       'domain' => $domain,
+                                       'domainRegex' => $domainRegex,
+                                       'alias' => $wildcard['alias'],
+                                       'pathRegex' => '.',
+                                       'dest' => $wildcardDest,
+                                       'destDomain' => $destInfo['domain'],
+                                       'lineNum' => $this->lineNum,
+                               );
+                       }
+               } else {
+                       $this->rules['plain'][] = array(
+                               'domain' => $domain,
+                               'domainRegex' => "=$domain",
+                               'alias' => $domain,
+                               'pathRegex' => '.',
+                               'dest' => $destInfo['dest'],
+                               'destDomain' => $destInfo['domain'],
+                               'lineNum' => $this->lineNum,
+                       );
+               }
+       }
+
+       /**
+        * Process a rewrite command at the current input position
+        * @param array $args The arguments to the command
+        */
+       function doRewrite( $args ) {
+               if ( count( $args ) != 2 ) {
+                       $this->error( "rewrite must be given two parameters" );
+               }
+
+               list( $domain, $dest ) = $args;
+               $destInfo = $this->interpretDest( $dest );
+               // Strip trailing slash from dest
+               if ( substr( $destInfo['dest'], -1 ) === '/' ) {
+                       $destInfo['dest'] = substr( $destInfo['dest'], 0, -1 );
+               }
+
+               if ( strpos( $domain, '*' ) !== false ) {
+                       $wildcardList = $this->interpretWildcard( $domain );
+                       foreach ( $wildcardList as $wildcard ) {
+                               $domainRegex = $wildcard['domainRegex'];
+                               if ( strpos( $domainRegex, '(' ) !== false ) {
+                                       $wildcardDest = str_replace( '*', '%1', 
$destInfo['dest'] );
+                               } else {
+                                       $wildcardDest = $destInfo['dest'];
+                               }
+                               $this->rules['wildcard'][] = array(
+                                       'domain' => $domain,
+                                       'domainRegex' => $domainRegex,
+                                       'alias' => $wildcard['alias'],
+                                       'pathRegex' => '.*',
+                                       'dest' => "$wildcardDest\$0",
+                                       'destDomain' => $destInfo['domain'],
+                                       'lineNum' => $this->lineNum,
+                               );
+                       }
+               } else {
+                       $this->rules['plain'][] = array(
+                               'domain' => $domain,
+                               'domainRegex' => "=$domain",
+                               'alias' => $domain,
+                               'pathRegex' => '.*',
+                               'dest' => $destInfo['dest'] . '$0',
+                               'destDomain' => $destInfo['domain'],
+                               'lineNum' => $this->lineNum,
+                       );
+               }
+       }
+
+       /**
+        * Process an override command at the current input position
+        * @param array $args The arguments to the command
+        */
+       function doOverride( $args ) {
+               if ( count( $args ) != 2 ) {
+                       $this->error( "override must be given two parameters" );
+               }
+               list ( $source, $dest ) = $args;
+               $destInfo = $this->interpretDest( $dest );
+               $slashPos = strpos( $source, '/' );
+               if ( $slashPos === false ) {
+                       $this->error( "the source of an override must include a 
path component" );
+               }
+               $domain = substr( $source, 0, $slashPos );
+               $path = substr( $source, $slashPos );
+
+               if ( strpos( $domain, '*' ) !== false ) {
+                       $wildcardList = $this->interpretWildcard( $domain );
+                       foreach ( $wildcardList as $wildcard ) {
+                               $domainRegex = $wildcard['domainRegex'];
+                               if ( strpos( $domainRegex, '(' ) !== false ) {
+                                       $wildcardDest = str_replace( '*', '%1', 
$destInfo['dest'] );
+                               } else {
+                                       $wildcardDest = $destInfo['dest'];
+                               }
+                               $this->rules['wildcardOverride'][] = array(
+                                       'domain' => $domain,
+                                       'domainRegex' => $domainRegex,
+                                       'alias' => $wildcard['alias'],
+                                       'pathRegex' => '^' . preg_quote( $path 
) . '$',
+                                       'dest' => $wildcardDest,
+                                       'destDomain' => $destInfo['domain'],
+                                       'lineNum' => $this->lineNum,
+                               );
+                       }
+               } else {
+                       $this->rules['plainOverride'][] = array(
+                               'domain' => $domain,
+                               'domainRegex' => "=$domain",
+                               'alias' => $domain,
+                               'pathRegex' => '^' . preg_quote( $path ) . '$',
+                               'dest' => $destInfo['dest'],
+                               'destDomain' => $destInfo['domain'],
+                               'lineNum' => $this->lineNum,
+                       );
+               }
+       }
+
+       /**
+        * Interpret a <dest> token and return information about it. See the 
comment
+        * in redirects.dat for information about forms it can take.
+        */
+       function interpretDest( $dest ) {
+               // Escape non-ASCII characters
+               $dest = preg_replace_callback(
+                       '/[\x80-\xff]/',
+                       function ($matches) {
+                               return '\\' . urlencode( $matches[0] );
+                       },
+                       $dest );
+
+
+               if ( preg_match( '!^(https?://)([^/]*)(/.*$|$)!', $dest, $m ) ) 
{
+                       $domain = $m[2];
+                       $path = $m[3];
+                       if ( $path === '' ) {
+                               $dest .= '/';
+                       }
+               } elseif ( preg_match( '!^//([^/]*)(/.*$|$)!', $dest, $m ) ) {
+                       $dest = '%{ENV:RW_PROTO}:' . $dest;
+                       $domain = $m[1];
+                       $path = $m[2];
+                       if ( $path === '' ) {
+                               $dest .= '/';
+                       }
+               } else {
+                       $this->error( "destination must be either a 
protocol-relative or a fully-specified URL" );
+               }
+               return array(
+                       'dest' => $dest,
+                       'domain' => $domain,
+               );
+       }
+
+       /**
+        * Interpret a source domain wildcard and return information about it.
+        */
+       function interpretWildcard( $wildcard ) {
+               if ( preg_match( '/^\*\.([^*]*)$/', $wildcard, $m ) ) {
+                       return array( array(
+                               'domainRegex' => "^(.+)\." . preg_quote( $m[1] 
) . '$',
+                               'alias' => $wildcard,
+                       ) );
+               } elseif ( preg_match( '/^\*([^*]*)$/', $wildcard, $m ) ) {
+                       return array(
+                               array(
+                                       'domainRegex' => '=' . $m[1],
+                                       'alias' => $m[1],
+                               ),
+                               array(
+                                       'domainRegex' => "^(.+)\." . 
preg_quote( $m[1] ) . '$',
+                                       'alias' => "*." . $m[1],
+                               )
+                       );
+               } elseif ( preg_match( '/^([^*]*)\.\*\.([^*]*)$/', $wildcard, 
$m ) ) {
+                       return array( array(
+                               'domainRegex' => '^' . preg_quote( $m[1] ) . 
'\.(.+)\.' . preg_quote( $m[2] ) . '$',
+                               'alias' => $wildcard,
+                       ) );
+               } elseif ( strpos( $wildcard, '*' ) !== false ) {
+                       $this->error( "invalid use of asterisk in domain 
pattern" );
+               } else {
+                       return array( array(
+                               'domainRegex' => '=' . $wildcard,
+                               'alias' => $wildcard
+                       ) );
+               }
+       }
+
+       /**
+        * Check to see if any override rules were given which didn't have an
+        * associated funnel or rewrite, and raise an error if any are found.
+        */
+       function checkOrphanOverrides() {
+               $servers = array();
+
+               foreach ( array( 'wildcard', 'plain' ) as $type ) {
+                       foreach ( $this->rules[$type] as $rule ) {
+                               $servers[$rule['alias']] = true;
+                       }
+               }
+
+               foreach ( array( 'wildcardOverride', 'plainOverride' ) as $type 
) {
+                       foreach ( $this->rules[$type] as $rule ) {
+                               if ( !isset( $servers[$rule['alias']] ) ) {
+                                       throw new DomainRedirectParser_Error(
+                                               "override rules must have an 
associated funnel or rewrite", $rule['lineNum'] );
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Check for double or infinite redirects and raise an error if any are 
found.
+        */
+       function checkLoops() {
+               $flatRules = array();
+               foreach ( $this->rules as $type => $rules ) {
+                       foreach ( $rules as $rule ) {
+                               $flatRules[] = $rule;
+                       }
+               }
+
+               for ( $i = 0; $i < count( $flatRules ); $i++ ) {
+                       for ( $j = 0; $j < count( $flatRules ); $j++ ) {
+                               $outboundRule = $flatRules[$i];
+                               $inboundRule = $flatRules[$j];
+                               $outboundDomain = $outboundRule['destDomain'];
+                               $inboundDomain = $inboundRule['domain'];
+                               $inboundRegex = $inboundRule['domainRegex'];
+                               $wildcardPos = strpos( $outboundDomain, '%1' );
+                               if ( $wildcardPos !== false ) {
+                                       $outboundSuffix = substr( 
$outboundDomain, $wildcardPos + 2 );
+                                       if ( $outboundSuffix == substr( 
$inboundDomain, -strlen( $outboundSuffix ) ) ) {
+                                               throw new 
DomainRedirectParser_Error(
+                                                       "double redirect: rule 
has destination domain $outboundDomain " .
+                                                       "which matches relevant 
suffix of source domain \"$inboundDomain\" " .
+                                                       "from line 
{$inboundRule['lineNum']}",
+                                                       
$outboundRule['lineNum'] );
+                                       }
+                               } elseif ( $inboundRegex[0] === '=' ) {
+                                       if ( $inboundDomain === $outboundDomain 
) {
+                                               throw new 
DomainRedirectParser_Error(
+                                                       "double redirect: rule 
has destination domain $outboundDomain " .
+                                                       "from line 
{$inboundRule['lineNum']}",
+                                                       
$outboundRule['lineNum'] );
+                                       }
+                               } elseif ( preg_match( "!$inboundRegex!", 
$outboundDomain ) ) {
+                                       throw new DomainRedirectParser_Error(
+                                               "double redirect: rule has 
destination domain $outboundDomain " .
+                                               "which matches wildcard 
$inboundDomain " .
+                                               "from line 
{$inboundRule['lineNum']}",
+                                               $outboundRule['lineNum'] );
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Write the collected rules to the output file.
+        */
+       function writeApacheConf() {
+               $f = fopen( $this->output_file, 'w' );
+               if ( !$f ) {
+                       throw new DomainRedirectParser_Error( "Unable to open 
redirects.conf for writing" );
+               }
+
+               $servers = array();
+               foreach ( array( 'wildcard', 'plain' ) as $type ) {
+                       foreach ( $this->rules[$type] as $rule ) {
+                               $servers[$rule['alias']] = true;
+                       }
+               }
+
+               fwrite( $f,
+                       "# This file is generated by 
redirects/refreshDomainRedirects from the\n".
+                   "# source file redirects.dat and managed on servers by 
Puppet\n".
+                       "# Do not edit it manually!\n" .
+                       "\n" .
+                       "<VirtualHost *>\n" .
+                       "\tServerName redirector\n" .
+                       "\tServerAlias \\\n" );
+
+               foreach ( $servers as $server => $unused ) {
+                       fwrite( $f, "\t$server \\\n" );
+               }
+               fwrite( $f, "\n" );
+               fwrite( $f, <<<EOT
+       # allow caching for redirects
+       <IfModule mod_headers.c>
+               Header set Cache-control "s-maxage=86000, max-age=0, 
must-revalidate"
+       </IfModule>
+       <IfModule mod_expires.c>
+               ExpiresActive On
+               ExpiresByType image/gif A2592000
+               ExpiresByType image/png A2592000
+               ExpiresByType image/jpeg A2592000
+               ExpiresByType text/css A2592000
+               ExpiresByType text/javascript A2592000
+               ExpiresByType application/x-javascript A2592000
+               ExpiresByType text/html A2592000
+       </IfModule>
+
+       DocumentRoot /usr/local/apache/common/docroot/default
+
+       RewriteEngine On
+
+       RewriteRule . - [E=RW_PROTO:%{HTTP:X-Forwarded-Proto}]
+       RewriteCond %{ENV:RW_PROTO} !=https
+       RewriteRule . - [E=RW_PROTO:http]
+
+EOT
+               );
+
+               // Write more specific rules first, followed by less specific 
rules
+               $precedence = array(
+                       'plainOverride',
+                       'wildcardOverride',
+                       'plain',
+                       'wildcard',
+               );
+
+               foreach ( $precedence as $type ) {
+                       fwrite( $f, "\n\t# Type: $type\n" );
+                       foreach ( $this->rules[$type] as $rule ) {
+                               fwrite( $f,
+                                       "\t# " . $this->getLine( 
$rule['lineNum'] ) . "\n" .
+                                       "\tRewriteCond %{HTTP_HOST} 
{$rule['domainRegex']}\n" .
+                                       "\tRewriteRule {$rule['pathRegex']} 
{$rule['dest']} [R=301,L,NE]\n" );
+                       }
+               }
+
+               fwrite( $f,
+                       "</VirtualHost>\n" .
+                       "# vim" . ": sts=4 sw=4 autoindent syn=apache\n" );
+               fclose( $f );
+       }
+
+       function getLine( $lineNum ) {
+               if ( isset( $this->lines[$lineNum - 1] ) ) {
+                       return $this->lines[$lineNum - 1];
+               } else {
+                       return false;
+               }
+       }
+}
+
+class DomainRedirectParser_Error extends Exception {
+       function __construct( $message, $lineNum = 0 ) {
+               if ( $lineNum ) {
+                       $realMessage = "error in line $lineNum: $message";
+               } else {
+                       $realMessage = "error: $message";
+               }
+               parent::__construct( $realMessage );
+               $this->lineNum = $lineNum;
+       }
+}
+
+$parser = false;
+try {
+       $parser = new DomainRedirectParser( __DIR__ );
+       $parser->execute();
+} catch ( DomainRedirectParser_Error $e ) {
+       print $e->getMessage() . "\n";
+       if ( $parser && $parser->getLine( $e->lineNum ) ) {
+               print "{$e->lineNum}: " . $parser->getLine( $e->lineNum ) . 
"\n";
+       }
+       exit(1);
+}
diff --git a/modules/mediawiki/manifests/web.pp 
b/modules/mediawiki/manifests/web.pp
index 6fa5b58..61b9d1e 100644
--- a/modules/mediawiki/manifests/web.pp
+++ b/modules/mediawiki/manifests/web.pp
@@ -1,6 +1,6 @@
 # mediawiki::web
 
-class mediawiki::web ( $workers_limit = undef, $use_sites_available = false ) {
+class mediawiki::web ( $workers_limit = undef) {
     tag 'mediawiki', 'mw-apache-config'
 
     include ::mediawiki
@@ -35,14 +35,10 @@
         require => Package['apache2'],
     }
 
-    if ! $use_sites_available {
-        file { '/etc/apache2/wikimedia':
-            ensure  => directory,
-            recurse => true,
-            source  => 'puppet:///modules/mediawiki/apache/config',
-            before  => Service['apache2'],
-        }
-    } else {
-        include ::mediawiki::web::sites
+    # do not erase this for now, it may come handy soon...
+    file { '/etc/apache2/wikimedia':
+        ensure  => directory,
     }
+
+    include ::mediawiki::web::sites
 }
diff --git a/modules/mediawiki/templates/apache/apache2.conf.erb 
b/modules/mediawiki/templates/apache/apache2.conf.erb
index ff7dec4..688afe5 100644
--- a/modules/mediawiki/templates/apache/apache2.conf.erb
+++ b/modules/mediawiki/templates/apache/apache2.conf.erb
@@ -319,13 +319,7 @@
 ErrorDocument 404 /w/404.php
 
 NameVirtualHost *
-
-<%- if @use_sites_available -%>
 Include sites-enabled/*.conf
-<%- else -%>
-Include /etc/apache2/wikimedia/all.conf
-Include /etc/apache2/sites-enabled/99-monitoring.conf
-<%- end -%>
 
 # Set ETags for files to not be based on inode,
 # since that will be different on each backend server

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I42a07252bf6ed37231ecba587e8dfc018e5c6609
Gerrit-PatchSet: 4
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Giuseppe Lavagetto <glavage...@wikimedia.org>
Gerrit-Reviewer: Alexandros Kosiaris <akosia...@wikimedia.org>
Gerrit-Reviewer: Filippo Giunchedi <fgiunch...@wikimedia.org>
Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org>
Gerrit-Reviewer: Mark Bergsma <m...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to