Yuvipanda has uploaded a new change for review.

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

Change subject: Move all monitoring groups to one file
......................................................................

Move all monitoring groups to one file

Since they have to be imported directly into site.pp (for now),
we shall keep them cleanly in a separate file

Change-Id: Ieb322327e5471c97a5d7707ae25d90972482f61a
---
A manifests/monitoring_groups.pp
M manifests/role/analytics.pp
M manifests/role/aqs.pp
D manifests/role/cache.pp
M manifests/role/coredb.pp
M manifests/role/elasticsearch.pp
M manifests/role/etcd.pp
M manifests/role/ganeti.pp
M manifests/role/logstash.pp
D manifests/role/lvs.pp
M manifests/role/maps.pp
M manifests/role/mediawiki.pp
M manifests/role/memcached.pp
M manifests/role/ocg.pp
M manifests/role/openldap.pp
M manifests/role/parsoid.pp
M manifests/role/rcstream.pp
M manifests/role/redisdb.pp
M manifests/role/restbase.pp
M manifests/role/sca.pp
M manifests/role/scb.pp
M manifests/role/swift.pp
M manifests/role/wdqs.pp
M manifests/role/zotero.pp
M manifests/site.pp
M modules/role/manifests/labs/openstack/nova.pp
26 files changed, 119 insertions(+), 129 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/80/255080/1

diff --git a/manifests/monitoring_groups.pp b/manifests/monitoring_groups.pp
new file mode 100644
index 0000000..8a394ed
--- /dev/null
+++ b/manifests/monitoring_groups.pp
@@ -0,0 +1,118 @@
+# This file contains virtual resources for setting up monitoring groups
+# This needs to be directly 'imported' for now and hence is in a separate
+# file. 
+# Please keep this list alphabetically ordered!
+
+# Analytics
+@monitoring::group { 'analytics_eqiad': description => 'analytics servers in 
eqiad' }
+
+# Analytics Query Service
+@monitoring::group { 'aqs_eqiad': description => 'Analytics Query Service 
eqiad' }
+@monitoring::group { 'aqs_codfw': description => 'Analytics Query Service 
codfw' }
+
+# Cache
+@monitoring::group { 'cache_text_codfw': description => 'codfw text Varnish' }
+@monitoring::group { 'cache_text_eqiad': description => 'eqiad text Varnish' }
+@monitoring::group { 'cache_text_esams': description => 'esams text Varnish' }
+@monitoring::group { 'cache_text_ulsfo': description => 'ulsfo text Varnish' }
+@monitoring::group { 'cache_upload_codfw': description => 'codfw upload 
Varnish' }
+@monitoring::group { 'cache_upload_eqiad': description => 'eqiad upload 
Varnish' }
+@monitoring::group { 'cache_upload_esams': description => 'esams upload 
Varnish' }
+@monitoring::group { 'cache_upload_ulsfo': description => 'ulsfo upload 
Varnish' }
+@monitoring::group { 'cache_mobile_codfw': description => 'codfw mobile 
Varnish' }
+@monitoring::group { 'cache_mobile_eqiad': description => 'eqiad mobile 
Varnish' }
+@monitoring::group { 'cache_mobile_esams': description => 'esams mobile 
Varnish' }
+@monitoring::group { 'cache_mobile_ulsfo': description => 'ulsfo mobile 
Varnish' }
+@monitoring::group { 'cache_parsoid_eqiad': description => 'Parsoid caches 
eqiad' }
+@monitoring::group { 'cache_parsoid_codfw': description => 'Parsoid caches 
codfw' }
+@monitoring::group { 'cache_misc_eqiad': description => 'Misc caches eqiad' }
+@monitoring::group { 'cache_maps_eqiad': description => 'Maps caches eqiad' }
+
+# Elasticsearch
+@monitoring::group { 'elasticsearch_eqiad': description => 'eqiad 
elasticsearch servers' }
+@monitoring::group { 'elasticsearch_codfw': description => 'codfw 
elasticsearch servers' }
+@monitoring::group { 'elasticsearch_esams': description => 'esams 
elasticsearch servers' }
+@monitoring::group { 'elasticsearch_ulsfo': description => 'ulsfo 
elasticsearch servers' }
+
+# Etcd
+@monitoring::group { 'etcd_eqiad': description => 'eqiad Etcd' }
+
+# Ganeti
+@monitoring::group { 'ganeti_eqiad': description => 'Ganeti virt cluster 
eqiad' }
+@monitoring::group { 'ganeti_codfw': description => 'Ganeti virt cluster 
codfw' }
+
+# Labs OpenStack Nova (labvirt***)
+@monitoring::group { 'virt_eqiad': description => 'eqiad virt servers' }
+@monitoring::group { 'virt_codfw': description => 'codfw virt servers' }
+
+# LVS
+@monitoring::group { 'lvs': description => 'LVS' }
+@monitoring::group { 'lvs_eqiad': description => 'eqiad LVS servers' }
+@monitoring::group { 'lvs_codfw': description => 'codfw LVS servers' }
+@monitoring::group { 'lvs_ulsfo': description => 'ulsfo LVS servers' }
+@monitoring::group { 'lvs_esams': description => 'esams LVS servers' }
+
+# Logstash
+@monitoring::group { 'logstash_eqiad': description => 'eqiad logstash' }
+
+# Maps
+@monitoring::group { 'maps_eqiad': description => 'eqiad maps servers' }
+@monitoring::group { 'maps_codfw': description => 'codfw maps servers' }
+
+# MediaWiki
+@monitoring::group { 'appserver_eqiad':     description => 'eqiad application 
servers' }
+@monitoring::group { 'api_appserver_eqiad': description => 'eqiad API 
application servers' }
+@monitoring::group { 'imagescaler_eqiad':   description => 'eqiad image 
scalers' }
+@monitoring::group { 'jobrunner_eqiad':     description => 'eqiad jobrunner 
application servers' }
+@monitoring::group { 'videoscaler_eqiad':   description => 'eqiad video 
scaler' }
+
+@monitoring::group { 'appserver_codfw':     description => 'codfw application 
servers' }
+@monitoring::group { 'api_appserver_codfw': description => 'codfw API 
application servers' }
+@monitoring::group { 'imagescaler_codfw':   description => 'codfw image 
scalers' }
+@monitoring::group { 'jobrunner_codfw':     description => 'codfw jobrunner 
application servers' }
+@monitoring::group { 'videoscaler_codfw':   description => 'codfw video 
scaler' }
+
+# Memcached
+@monitoring::group { 'memcached_eqiad': description => 'eqiad memcached' }
+@monitoring::group { 'memcached_codfw': description => 'codfw memcached' }
+
+# MySQL
+@monitoring::group { 'es_eqiad': description => 'eqiad External Storage' }
+@monitoring::group { 'mysql_eqiad': description => 'eqiad mysql core' }
+@monitoring::group { 'mysql_codfw': description => 'codfw mysql core' }
+
+# OCG
+@monitoring::group { 'ocg_eqiad': description => 'offline content generator 
eqiad' }
+
+# OpenLDAP (Corp IT)
+@monitoring::group { 'openldap_corp_mirror_eqiad': description => 'Corp OIT 
LDAP Mirror' }
+@monitoring::group { 'openldap_corp_mirror_codfw': description => 'Corp OIT 
LDAP Mirror codfw' }
+
+# Parsoid
+@monitoring::group { 'parsoid_eqiad': description => 'eqiad parsoid servers' }
+@monitoring::group { 'parsoid_codfw': description => 'codfw parsoid servers' }
+
+# RCStream
+@monitoring::group { 'rcstream_eqiad': description => 'eqiad rcstream' }
+
+# RedisDB
+@monitoring::group { 'redis_eqiad': description => 'eqiad Redis' }
+@monitoring::group { 'redis_codfw': description => 'codfw Redis' }
+
+# RESTBase
+@monitoring::group { 'restbase_eqiad': description => 'Restbase eqiad' }
+@monitoring::group { 'restbase_codfw': description => 'Restbase codfw' }
+
+# Service Clusters
+@monitoring::group { 'sca_eqiad': description => 'Service Cluster A servers' }
+@monitoring::group { 'scb_eqiad': description => 'Service Cluster B servers' }
+
+# Swift
+@monitoring::group { 'swift': description => 'swift servers' }
+
+# Wikidata Query Service
+@monitoring::group{ 'wdqs_eqiad': description => 'Wikidata Query Service 
(eqiad)' }
+
+# Zotero
+@monitoring::group { 'zotero_eqiad': description => 'Zotero eqiad' }
+@monitoring::group { 'zotero_codfw': description => 'Zotero codfw' }
diff --git a/manifests/role/analytics.pp b/manifests/role/analytics.pp
index b6270bd..747d38f 100644
--- a/manifests/role/analytics.pp
+++ b/manifests/role/analytics.pp
@@ -1,7 +1,4 @@
 # analytics servers (RT-1985)
-
-@monitoring::group { 'analytics_eqiad': description => 'analytics servers in 
eqiad' }
-
 # == Class role::analytics
 # Base class for all analytics nodes.
 # All analytics nodes should include this.
diff --git a/manifests/role/aqs.pp b/manifests/role/aqs.pp
index 24c20a5..5e692be 100644
--- a/manifests/role/aqs.pp
+++ b/manifests/role/aqs.pp
@@ -1,6 +1,3 @@
-@monitoring::group { 'aqs_eqiad': description => 'Analytics Query Service 
eqiad' }
-@monitoring::group { 'aqs_codfw': description => 'Analytics Query Service 
codfw' }
-
 # == Class role::aqs
 # Analytics Query Service
 #
diff --git a/manifests/role/cache.pp b/manifests/role/cache.pp
deleted file mode 100644
index b5b7895..0000000
--- a/manifests/role/cache.pp
+++ /dev/null
@@ -1,20 +0,0 @@
-# XXX this needs to be refactored Elsewhere
-# Virtual resources for the monitoring server
-@monitoring::group { 'cache_text_codfw': description => 'codfw text Varnish' }
-@monitoring::group { 'cache_text_eqiad': description => 'eqiad text Varnish' }
-@monitoring::group { 'cache_text_esams': description => 'esams text Varnish' }
-@monitoring::group { 'cache_text_ulsfo': description => 'ulsfo text Varnish' }
-@monitoring::group { 'cache_upload_codfw': description => 'codfw upload 
Varnish' }
-@monitoring::group { 'cache_upload_eqiad': description => 'eqiad upload 
Varnish' }
-@monitoring::group { 'cache_upload_esams': description => 'esams upload 
Varnish' }
-@monitoring::group { 'cache_upload_ulsfo': description => 'ulsfo upload 
Varnish' }
-@monitoring::group { 'cache_mobile_codfw': description => 'codfw mobile 
Varnish' }
-@monitoring::group { 'cache_mobile_eqiad': description => 'eqiad mobile 
Varnish' }
-@monitoring::group { 'cache_mobile_esams': description => 'esams mobile 
Varnish' }
-@monitoring::group { 'cache_mobile_ulsfo': description => 'ulsfo mobile 
Varnish' }
-@monitoring::group { 'cache_parsoid_eqiad': description => 'Parsoid caches 
eqiad' }
-@monitoring::group { 'cache_parsoid_codfw': description => 'Parsoid caches 
codfw' }
-@monitoring::group { 'cache_misc_eqiad': description => 'Misc caches eqiad' }
-@monitoring::group { 'cache_maps_eqiad': description => 'Maps caches eqiad' }
-
-# If you're looking for something that used to be here, check 
modules/role/manifests/cache/...
diff --git a/manifests/role/coredb.pp b/manifests/role/coredb.pp
index ce757a0..fcb4ea0 100644
--- a/manifests/role/coredb.pp
+++ b/manifests/role/coredb.pp
@@ -1,8 +1,4 @@
 # Virtual resource for the monitoring server
-@monitoring::group { 'es_eqiad': description => 'eqiad External Storage' }
-@monitoring::group { 'mysql_eqiad': description => 'eqiad mysql core' }
-@monitoring::group { 'mysql_codfw': description => 'codfw mysql core' }
-
 ## for describing replication topology
 ## hosts must be added here in addition to site.pp
 class role::coredb::config {
diff --git a/manifests/role/elasticsearch.pp b/manifests/role/elasticsearch.pp
index f86f894..241d31f 100644
--- a/manifests/role/elasticsearch.pp
+++ b/manifests/role/elasticsearch.pp
@@ -2,12 +2,6 @@
 #
 # This class sets up Elasticsearch in a WMF-specific way.
 #
-
-@monitoring::group { 'elasticsearch_eqiad': description => 'eqiad 
elasticsearch servers' }
-@monitoring::group { 'elasticsearch_codfw': description => 'codfw 
elasticsearch servers' }
-@monitoring::group { 'elasticsearch_esams': description => 'esams 
elasticsearch servers' }
-@monitoring::group { 'elasticsearch_ulsfo': description => 'ulsfo 
elasticsearch servers' }
-
 class role::elasticsearch::server{
 
     if ($::realm == 'production' and hiera('elasticsearch::rack', undef) == 
undef) {
diff --git a/manifests/role/etcd.pp b/manifests/role/etcd.pp
index cd53efb..011d854 100644
--- a/manifests/role/etcd.pp
+++ b/manifests/role/etcd.pp
@@ -1,10 +1,4 @@
 # === Class role::etcd
-#
-# Virtual resource for the monitoring server
-@monitoring::group { 'etcd_eqiad':
-    description => 'eqiad Etcd',
-}
-
 class role::etcd {
     system::role { 'role::etcd':
         description => 'Highly-consistent distributed k/v store'
diff --git a/manifests/role/ganeti.pp b/manifests/role/ganeti.pp
index 2f73518..4850189 100644
--- a/manifests/role/ganeti.pp
+++ b/manifests/role/ganeti.pp
@@ -1,8 +1,4 @@
 # Role classes for ganeti
-
-@monitoring::group { 'ganeti_eqiad': description => 'Ganeti virt cluster 
eqiad' }
-@monitoring::group { 'ganeti_codfw': description => 'Ganeti virt cluster 
codfw' }
-
 class role::ganeti {
     include ::ganeti
 
diff --git a/manifests/role/logstash.pp b/manifests/role/logstash.pp
index af92ad3..2f8da5f 100644
--- a/manifests/role/logstash.pp
+++ b/manifests/role/logstash.pp
@@ -1,6 +1,4 @@
 # vim:sw=4 ts=4 sts=4 et:
-@monitoring::group { 'logstash_eqiad': description => 'eqiad logstash' }
-
 # == Class: role::logstash
 #
 # Provisions Logstash and ElasticSearch.
diff --git a/manifests/role/lvs.pp b/manifests/role/lvs.pp
deleted file mode 100644
index 0829ab5..0000000
--- a/manifests/role/lvs.pp
+++ /dev/null
@@ -1,8 +0,0 @@
-# role/lvs.pp
-
-# TODO: Refactor this somewhere else
-@monitoring::group { 'lvs': description => 'LVS' }
-@monitoring::group { 'lvs_eqiad': description => 'eqiad LVS servers' }
-@monitoring::group { 'lvs_codfw': description => 'codfw LVS servers' }
-@monitoring::group { 'lvs_ulsfo': description => 'ulsfo LVS servers' }
-@monitoring::group { 'lvs_esams': description => 'esams LVS servers' }
diff --git a/manifests/role/maps.pp b/manifests/role/maps.pp
index e05034c..2f167f9 100644
--- a/manifests/role/maps.pp
+++ b/manifests/role/maps.pp
@@ -1,6 +1,3 @@
-@monitoring::group { 'maps_eqiad': description => 'eqiad maps servers' }
-@monitoring::group { 'maps_codfw': description => 'codfw maps servers' }
-
 # This role class sets up a maps server with
 # the services kartotherian and tilerator
 class role::maps {
diff --git a/manifests/role/mediawiki.pp b/manifests/role/mediawiki.pp
index 150a08a..fd12760 100644
--- a/manifests/role/mediawiki.pp
+++ b/manifests/role/mediawiki.pp
@@ -1,15 +1,3 @@
-@monitoring::group { 'appserver_eqiad':     description => 'eqiad application 
servers' }
-@monitoring::group { 'api_appserver_eqiad': description => 'eqiad API 
application servers' }
-@monitoring::group { 'imagescaler_eqiad':   description => 'eqiad image 
scalers' }
-@monitoring::group { 'jobrunner_eqiad':     description => 'eqiad jobrunner 
application servers' }
-@monitoring::group { 'videoscaler_eqiad':   description => 'eqiad video 
scaler' }
-
-@monitoring::group { 'appserver_codfw':     description => 'codfw application 
servers' }
-@monitoring::group { 'api_appserver_codfw': description => 'codfw API 
application servers' }
-@monitoring::group { 'imagescaler_codfw':   description => 'codfw image 
scalers' }
-@monitoring::group { 'jobrunner_codfw':     description => 'codfw jobrunner 
application servers' }
-@monitoring::group { 'videoscaler_codfw':   description => 'codfw video 
scaler' }
-
 class role::mediawiki::common {
     include ::standard
     include ::geoip
diff --git a/manifests/role/memcached.pp b/manifests/role/memcached.pp
index 99c965e..c96a993 100644
--- a/manifests/role/memcached.pp
+++ b/manifests/role/memcached.pp
@@ -1,14 +1,4 @@
 # vim: noet
-
-# Virtual resource for monitoring server
-@monitoring::group { 'memcached_eqiad':
-    description => 'eqiad memcached',
-}
-
-@monitoring::group { 'memcached_codfw':
-    description => 'codfw memcached',
-}
-
 class role::memcached {
     system::role { 'role::memcached': }
 
diff --git a/manifests/role/ocg.pp b/manifests/role/ocg.pp
index 4413c3a..8af7e15 100644
--- a/manifests/role/ocg.pp
+++ b/manifests/role/ocg.pp
@@ -1,10 +1,6 @@
 # vim: set ts=4 et sw=4:
 # role/ocg.pp
 # Offline content generator for the MediaWiki collection extension
-
-# Virtual resources for the monitoring server
-@monitoring::group { 'ocg_eqiad': description => 'offline content generator 
eqiad' }
-
 class role::ocg {
     include base::firewall
     include standard
diff --git a/manifests/role/openldap.pp b/manifests/role/openldap.pp
index a8c1ddf..e69de29 100644
--- a/manifests/role/openldap.pp
+++ b/manifests/role/openldap.pp
@@ -1,7 +0,0 @@
-# TODO: Move this elsewhere
-@monitoring::group { 'openldap_corp_mirror_eqiad':
-    description => 'Corp OIT LDAP Mirror'
-}
-@monitoring::group { 'openldap_corp_mirror_codfw':
-    description => 'Corp OIT LDAP Mirror codfw'
-}
diff --git a/manifests/role/parsoid.pp b/manifests/role/parsoid.pp
index 69160fd..fc59fd7 100644
--- a/manifests/role/parsoid.pp
+++ b/manifests/role/parsoid.pp
@@ -1,9 +1,4 @@
 # vim: set ts=4 et sw=4:
-
-# TODO: Hiera for this
-@monitoring::group { 'parsoid_eqiad': description => 'eqiad parsoid servers' }
-@monitoring::group { 'parsoid_codfw': description => 'codfw parsoid servers' }
-
 class role::parsoid::common {
     package { [
         'nodejs',
diff --git a/manifests/role/rcstream.pp b/manifests/role/rcstream.pp
index c318945..0103b33 100644
--- a/manifests/role/rcstream.pp
+++ b/manifests/role/rcstream.pp
@@ -1,5 +1,3 @@
-@monitoring::group { 'rcstream_eqiad': description => 'eqiad rcstream' }
-
 # == Class: role::rcstream
 #
 # Provisions a recent changes -> redis -> socket.io -> Nginx setup
diff --git a/manifests/role/redisdb.pp b/manifests/role/redisdb.pp
index 6089270..af7714d 100644
--- a/manifests/role/redisdb.pp
+++ b/manifests/role/redisdb.pp
@@ -2,14 +2,6 @@
 # db::redis
 
 # Virtual resource for the monitoring server
-@monitoring::group { 'redis_eqiad':
-    description => 'eqiad Redis',
-}
-
-@monitoring::group { 'redis_codfw':
-    description => 'codfw Redis',
-}
-
 class role::redisdb (
     $maxmemory         = inline_template('<%= (Float(@memorysize.split[0]) * 
0.82).round %>Gb'),
     $redis_replication = undef,
diff --git a/manifests/role/restbase.pp b/manifests/role/restbase.pp
index 52e121a..20c4527 100644
--- a/manifests/role/restbase.pp
+++ b/manifests/role/restbase.pp
@@ -1,9 +1,4 @@
 # == Class role::restbase
-#
-
-@monitoring::group { 'restbase_eqiad': description => 'Restbase eqiad' }
-@monitoring::group { 'restbase_codfw': description => 'Restbase codfw' }
-
 # Config should be pulled from hiera
 class role::restbase {
     system::role { 'restbase': description => "Restbase ${::realm}" }
diff --git a/manifests/role/sca.pp b/manifests/role/sca.pp
index 2a6afce..3ccf665 100644
--- a/manifests/role/sca.pp
+++ b/manifests/role/sca.pp
@@ -1,6 +1,5 @@
 # "Compendium" class for nodes supporting various *oid services
 # This class is an intermediate step to better design
-@monitoring::group { 'sca_eqiad': description => 'Service Cluster A servers' }
 class role::sca {
     include role::apertium
     include role::citoid
diff --git a/manifests/role/scb.pp b/manifests/role/scb.pp
index 6e28576..1a49d51 100644
--- a/manifests/role/scb.pp
+++ b/manifests/role/scb.pp
@@ -1,6 +1,5 @@
 # "Compendium" class for nodes supporting various *oid services
 # This class is an intermediate step to better design
-@monitoring::group { 'scb_eqiad': description => 'Service Cluster B servers' }
 class role::scb {
     include role::mobileapps
 
diff --git a/manifests/role/swift.pp b/manifests/role/swift.pp
index 9cab26f..bdd90d6 100644
--- a/manifests/role/swift.pp
+++ b/manifests/role/swift.pp
@@ -1,8 +1,3 @@
-@monitoring::group { 'swift':
-    description => 'swift servers',
-}
-
-
 class role::swift::stats_reporter {
     system::role { 'role::swift::stats_reporter':
         description => 'swift statistics reporter',
diff --git a/manifests/role/wdqs.pp b/manifests/role/wdqs.pp
index d1eee26..4ce260a 100644
--- a/manifests/role/wdqs.pp
+++ b/manifests/role/wdqs.pp
@@ -1,6 +1,3 @@
-@monitoring::group{ 'wdqs_eqiad':
-    description => 'Wikidata Query Service (eqiad)',
-}
 # = Class: role::wdqs
 #
 # This class sets up Wikidata Query Service
diff --git a/manifests/role/zotero.pp b/manifests/role/zotero.pp
index f7e69f8..38f8cea 100644
--- a/manifests/role/zotero.pp
+++ b/manifests/role/zotero.pp
@@ -4,9 +4,6 @@
 # for bibliographic data and related research materials.
 # See <https://en.wikipedia.org/wiki/Zotero>.
 #
-@monitoring::group { 'zotero_eqiad': description => 'Zotero eqiad' }
-@monitoring::group { 'zotero_codfw': description => 'Zotero codfw' }
-
 class role::zotero {
     system::role { 'zotero': description => "Zotero ${::realm}" }
 
diff --git a/manifests/site.pp b/manifests/site.pp
index c3f2b34..6f656c7 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -2,6 +2,7 @@
 # site.pp
 
 import 'realm.pp' # These ones first
+import 'monitoring_groups.pp'
 import 'misc/*.pp'
 import 'network.pp'
 import 'role/*.pp'
diff --git a/modules/role/manifests/labs/openstack/nova.pp 
b/modules/role/manifests/labs/openstack/nova.pp
index 9ee2799..43b2564 100644
--- a/modules/role/manifests/labs/openstack/nova.pp
+++ b/modules/role/manifests/labs/openstack/nova.pp
@@ -261,7 +261,3 @@
         }
     }
 }
-
-# global icinga hostgroups for virt/labs hosts
-@monitoring::group { 'virt_eqiad': description => 'eqiad virt servers' }
-@monitoring::group { 'virt_codfw': description => 'codfw virt servers' }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieb322327e5471c97a5d7707ae25d90972482f61a
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Yuvipanda <[email protected]>

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

Reply via email to