devtools: add sourcegraph

Change-Id: Ic3c40768c761e598e0f42b17a4b9f0d4ebcb2bb2
diff --git a/kube/mirko.libsonnet b/kube/mirko.libsonnet
index b35833f..6703381 100644
--- a/kube/mirko.libsonnet
+++ b/kube/mirko.libsonnet
@@ -31,6 +31,12 @@
                     service: component.svc,
                     port: component.cfg.ports.publicHTTP[p].port,
                     dns: component.cfg.ports.publicHTTP[p].dns,
+                    // Extra headers to set.
+                    // BUG(q3k): these headers are applied to all components in the environment!
+                    // We should be splitting up ingresses where necessary to combat this.
+                    setHeaders: [],
+                    // Extra paths to add to ingress. These are bare HTTPIngressPaths.
+                    extraPaths: component.cfg.extraPaths,
                 }
                 for p in std.objectFields(env.components[c].cfg.ports.publicHTTP)
             ]
@@ -50,6 +56,9 @@
                 annotations+: {
                     "kubernetes.io/tls-acme": "true",
                     "certmanager.k8s.io/cluster-issuer": "letsencrypt-prod",
+                    [if env.ingressServerSnippet != null]: "nginx.ingress.kubernetes.io/server-snippet": env.ingressServerSnippet,
+                    [if std.length(env.extraHeaders) > 0 then "nginx.ingress.kubernetes.io/configuration-snippet"]:
+                        std.join("\n", ["proxy_set_header %s;" % [h] for h in env.extraHeaders]),
                 },
             },
             spec+: {
@@ -65,13 +74,27 @@
                         http: {
                             paths: [
                                 { path: "/", backend: { serviceName: p.service.metadata.name, servicePort: p.port }},
-                            ],
+                            ] + p.extraPaths,
                         },
                     }
                     for p in env.publicHTTPPorts
                 ],
             },
-        } else {}
+        } else {},
+
+        // Nginx Ingress Controller server configuration snippet to add.
+        ingressServerSnippet:: null,
+
+        // Extra request headers to add to ingress
+        extraHeaders:: std.flattenArrays([
+            std.flattenArrays([
+
+                local portc = env.components[c].cfg.ports.publicHTTP[p];
+                if std.objectHas(portc, "setHeaders") then portc.setHeaders else []
+                for p in std.objectFields(env.components[c].cfg.ports.publicHTTP)
+            ])
+            for c in std.objectFields(env.components)
+        ]),
     },
 
     Component(env, name): {
@@ -110,7 +133,7 @@
                 publicHTTP: {}, // name -> { port: no, dns: fqdn }
                 grpc: { main: 4200 }, // name -> port no
             },
-
+            extraPaths:: [],
         },
 
         allPorts:: {