BBlack has uploaded a new change for review.

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

Change subject: cache_misc: declarative req.http.host=>backend map
......................................................................

cache_misc: declarative req.http.host=>backend map

Bug: T131501
Change-Id: I5f7ed0cfaf71553818d9e162f7d9ff9cd58d89a6
---
M modules/role/manifests/cache/misc.pp
M templates/varnish/misc-backend.inc.vcl.erb
2 files changed, 81 insertions(+), 59 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/51/282151/1

diff --git a/modules/role/manifests/cache/misc.pp 
b/modules/role/manifests/cache/misc.pp
index 3a2dc85..aa4a286 100644
--- a/modules/role/manifests/cache/misc.pp
+++ b/modules/role/manifests/cache/misc.pp
@@ -33,138 +33,199 @@
         'max_connections'       => 100,
     }
 
+    # misc-cluster specific (for now!):
+    #   every director must have exactly one of...
+    #     'req_host' => request hostname (or array of them)
+    #     'req_host_re' => request hostname regex
+    # ...and for sanity's sake, there should be no overlap among them
     $app_directors = {
         'analytics1027' => { # Hue (Hadoop GUI)
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['analytics1027.eqiad.wmnet'],
             'be_opts'  => merge($app_def_be_opts, { 'port' => 8888 }),
+            'req_host' => 'hue.wikimedia.org',
         },
         'antimony' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['antimony.wikimedia.org'],
             'be_opts'  => merge($app_def_be_opts, { 'port' => 8080 }),
+            'req_host' => 'git.wikimedia.org',
         },
         'bromine' => { # ganeti VM for misc. static HTML sites
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['bromine.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'static-bugzilla.wikimedia.org',
+                'annual.wikimedia.org',
+                'transparency.wikimedia.org',
+                '15.wikipedia.org',
+                'releases.wikimedia.org'
+            ],
         },
         'bohrium' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['bohrium.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'piwik.wikimedia.org',
         },
         'californium' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['californium.wikimedia.org'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'horizon.wikimedia.org',
         },
         'labtestweb2001' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['labtestweb2001.wikimedia.org'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'labtesthorizon.wikimedia.org',
         },
         'dataset1001' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['dataset1001.wikimedia.org'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'download.wikimedia.org',
         },
         'etherpad1001' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['etherpad1001.eqiad.wmnet'],
             'be_opts'  => merge($app_def_be_opts, { 'port' => 9001 }),
+            'req_host' => 'etherpad.wikimedia.org',
         },
         'gallium' => { # CI server
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['gallium.wikimedia.org' ],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'doc.wikimedia.org',
+                'integration.wikimedia.org'
+            ],
         },
         'graphite1001' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['graphite1001.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'performance.wikimedia.org',
+                'graphite.wikimedia.org'
+            ],
         },
         'iridium' => { # main phab
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['iridium.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'phabricator.wikimedia.org',
+                'phab.wmfusercontent.org',
+                'bugzilla.wikimedia.org',
+                'bugs.wikimedia.org'
+            ],
         },
         'krypton' => { # ganeti VM for misc. PHP apps
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['krypton.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'scholarships.wikimedia.org',
+                'iegreview.wikimedia.org',
+                'racktables.wikimedia.org',
+                'grafana.wikimedia.org',
+                'grafana-admin.wikimedia.org'
+            ],
         },
         'magnesium' => { # RT and racktables
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['magnesium.wikimedia.org'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'rt.wikimedia.org',
         },
         'netmon1001' => { # servermon
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['netmon1001.wikimedia.org'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'servermon.wikimedia.org',
+                'smokeping.wikimedia.org',
+                'torrus.wikimedia.org'
+            ],
         },
         'noc' => { # noc.wikimedia.org and dbtree.wikimedia.org
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['mw1152.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'noc.wikimedia.org',
+                'dbtree.wikimedia.org'
+            ],
         },
         'palladium' => {
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['palladium.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'config-master.wikimedia.org',
         },
         'planet1001' => {
-            'dynamic'  => 'no',
-            'type'     => 'random',
-            'backends' => ['planet1001.eqiad.wmnet'],
-            'be_opts'  => $app_def_be_opts,
+            'dynamic'     => 'no',
+            'type'        => 'random',
+            'backends'    => ['planet1001.eqiad.wmnet'],
+            'be_opts'     => $app_def_be_opts,
+            'req_host_re' => '(?i)^([^.]+\.)?planet\.wikimedia\.org$'
         },
         'ruthenium' => { # parsoid rt test server
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['ruthenium.eqiad.wmnet'],
             'be_opts'  => merge($app_def_be_opts, { 'port' => 8001 }),
+            'req_host' => 'parsoid-tests.wikimedia.org',
         },
         'rutherfordium' => { # people.wikimedia.org
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['rutherfordium.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'people.wikimedia.org',
         },
         'stat1001' => { # metrics and metrics-api
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['stat1001.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => [
+                'metrics.wikimedia.org',
+                'stats.wikimedia.org',
+                'datasets.wikimedia.org'
+            ],
         },
         'mendelevium' => { # OTRS
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['mendelevium.eqiad.wmnet'],
             'be_opts'  => $app_def_be_opts,
+            'req_host' => 'ticket.wikimedia.org',
         },
         'ytterbium' => { # Gerrit
             'dynamic'  => 'no',
             'type'     => 'random',
             'backends' => ['ytterbium.wikimedia.org'],
             'be_opts'  => merge($app_def_be_opts, { 'port' => 8080 }),
+            'req_host' => 'gerrit.wikimedia.org',
         },
         'logstash_director' => {
             'dynamic'  => 'no',
@@ -175,6 +236,7 @@
                 'logstash1003.eqiad.wmnet',
             ],
             'be_opts'  => merge($app_def_be_opts, { 'probe' => 'logstash' }),
+            'req_host' => 'logstash.wikimedia.org',
         },
         'wdqs_director' => {
             'dynamic'  => 'no',
@@ -184,6 +246,7 @@
                 'wdqs1002.eqiad.wmnet'
             ],
             'be_opts'  => merge($app_def_be_opts, { 'probe' => 'wdqs' }),
+            'req_host' => 'query.wikidata.org',
         },
     }
 
diff --git a/templates/varnish/misc-backend.inc.vcl.erb 
b/templates/varnish/misc-backend.inc.vcl.erb
index a91f1bf..9be4313 100644
--- a/templates/varnish/misc-backend.inc.vcl.erb
+++ b/templates/varnish/misc-backend.inc.vcl.erb
@@ -3,61 +3,20 @@
 sub cluster_be_recv_pre_purge { }
 
 sub cluster_be_recv_applayer_backend {
-    if (req.http.Host == "git.wikimedia.org") {
-        set req.backend = antimony;
-    } elsif (req.http.Host == "doc.wikimedia.org" || req.http.Host == 
"integration.wikimedia.org") {
-        set req.backend = gallium;
-    } elsif (req.http.Host == "download.wikimedia.org") {
-        set req.backend = dataset1001;
-    } elsif (req.http.Host == "gerrit.wikimedia.org") {
-        set req.backend = ytterbium;
-    } elsif (req.http.Host == "performance.wikimedia.org" || req.http.Host == 
"graphite.wikimedia.org") {
-        set req.backend = graphite1001;
-    } elsif (req.http.Host == "logstash.wikimedia.org"){
-        set req.backend = logstash_director;
-    } elsif (req.http.Host == "query.wikidata.org"){
-        set req.backend = wdqs_director;
-    } elsif (req.http.Host == "releases.wikimedia.org") {
-        set req.backend = bromine;
-    } elsif (req.http.Host == "piwik.wikimedia.org") {
-        set req.backend = bohrium;
-    } elsif (req.http.Host == "grafana.wikimedia.org" || req.http.host == 
"grafana-admin.wikimedia.org") {
-        set req.backend = krypton;
-    } elsif (req.http.Host == "parsoid-tests.wikimedia.org") {
-        set req.backend = ruthenium;
-    } elsif (req.http.Host == "horizon.wikimedia.org") {
-        set req.backend = californium;
-    } elsif (req.http.Host == "labtesthorizon.wikimedia.org") {
-        set req.backend = labtestweb2001;
-    } elsif (req.http.Host == "phabricator.wikimedia.org" || req.http.Host == 
"phab.wmfusercontent.org" || req.http.Host == "bugzilla.wikimedia.org" || 
req.http.Host == "bugs.wikimedia.org") {
-        set req.backend = iridium;
-    } elsif (req.http.Host == "static-bugzilla.wikimedia.org" || req.http.Host 
== "annual.wikimedia.org" || req.http.Host == "transparency.wikimedia.org" || 
req.http.Host == "15.wikipedia.org") {
-        set req.backend = bromine;
-    } elsif (req.http.Host == "servermon.wikimedia.org" || req.http.Host == 
"smokeping.wikimedia.org" || req.http.Host == "torrus.wikimedia.org") {
-        set req.backend = netmon1001;
-    } elsif (req.http.Host == "ticket.wikimedia.org") {
-        set req.backend = mendelevium;
-    } elsif (req.http.Host == "people.wikimedia.org") {
-        set req.backend = rutherfordium;
-    } elsif (req.http.Host == "rt.wikimedia.org") {
-        set req.backend = magnesium;
-    } elsif (req.http.Host == "metrics.wikimedia.org" || req.http.Host == 
"stats.wikimedia.org") {
-        set req.backend = stat1001;
-    } elsif (req.http.Host == "datasets.wikimedia.org") {
-        set req.backend = stat1001;
-    } elsif (req.http.Host == "config-master.wikimedia.org") {
-        set req.backend = palladium;
-    } elsif (req.http.Host == "noc.wikimedia.org" || req.http.Host == 
"dbtree.wikimedia.org") {
-        set req.backend = noc;
-    } elsif (req.http.Host == "scholarships.wikimedia.org" || req.http.Host == 
"iegreview.wikimedia.org" || req.http.Host == "racktables.wikimedia.org") {
-        set req.backend = krypton;
-    } elsif (req.http.Host == "hue.wikimedia.org") {
-        set req.backend = analytics1027;
-    } elsif (req.http.Host ~ ".*\.planet\.wikimedia\.org" || req.http.Host == 
"planet.wikimedia.org") {
-        set req.backend = planet1001;
-    } elsif (req.http.Host == "etherpad.wikimedia.org") {
-        set req.backend = etherpad1001;
-    } else {
+<%
+    if_stmts = []
+    @app_directors.keys.sort.each do |dirname|
+        dir = @app_directors[dirname]
+        if dir.key?('req_hosts')
+            hostcmp = [*dir['req_host']].map { |h| %Q[req.http.Host == "#{h}"] 
}.join(' || ')
+        else
+            hostcmp = %Q[req.http.Host ~ "#{dir['req_host_re']}"]
+        end
+        if_stmts.push("if (%{hostcmp}) {\n        set req.backend = 
#{dirname};\n    }")
+    end
+    all_ifs = if_stmts.join('    els')
+%>
+    <%= all_ifs -%> else {
         error 404 "Domain not served here";
     }
 }

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

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

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

Reply via email to