Repository: kinvolk/lokomotive
Pull request #1100 (2020-10-19 16:36:22)

Rename Headlamp to Web UI and add OIDC support
This PR renames the Headlamp component to Web UI as discussed OOB. The reasoning is that this component is the main UI for Lokomotive clusters and we'll probably add more functionality than what is in upstream Headlamp.

It also switches to a released version of Headlamp (v0.1.1) and exposes OIDC authentication.

iaguis: > * If Dex and Gangway are already installed in an existing cluster and then I install web-ui, how will this change affect the existing setup.

If OIDC is disabled it won't do anything.

If OIDC is enabled you'd need to add the Web UI callback URL to the `static_client.redirect_uris` attribute of the dex component like mentioned in the docs.

> * On a fresh cluster, if the installation is of the order : dex, web-ui and then gangway, does it ensure that nothing is broken for Gangway ?

Yes, that works.
iaguis: Pushed an update.

Originally I missed changing the default `cluster.oidc { cluster_id }` from `gangway` to `cluster-auth` so this push fixes that. This means we need to add something like this to the release notes:

> This release changes the default `cluster.oidc.client_id` parameter from `gangway` to `cluster-auth`. This setting must match `gangway.client_id` and `dex.static_client.client_id`. If you were default settings for `oidc` you'll need to add `client_id = "gangway"` or change the `client_id` parameters to on dex and gangway to `cluster-auth`.
knrt10: @iaguis linter and build is failing. Can you please check

Patch:
diff --git a/assets/charts/components/headlamp/.helmignore b/assets/charts/components/web-ui/.helmignore
similarity index 100%
rename from assets/charts/components/headlamp/.helmignore
rename to assets/charts/components/web-ui/.helmignore
diff --git a/assets/charts/components/headlamp/Chart.yaml b/assets/charts/components/web-ui/Chart.yaml
similarity index 89%
rename from assets/charts/components/headlamp/Chart.yaml
rename to assets/charts/components/web-ui/Chart.yaml
index 503aaf3b..e1179902 100644
--- a/assets/charts/components/headlamp/Chart.yaml
+++ b/assets/charts/components/web-ui/Chart.yaml
@@ -4,4 +4,4 @@ description: An easy-to-use and versatile dashboard for Kubernetes brought to yo
 type: application
 
 version: 0.1.0
-appVersion: 0.0.0
+appVersion: 0.1.1
diff --git a/assets/charts/components/headlamp/templates/_helpers.tpl b/assets/charts/components/web-ui/templates/_helpers.tpl
similarity index 100%
rename from assets/charts/components/headlamp/templates/_helpers.tpl
rename to assets/charts/components/web-ui/templates/_helpers.tpl
diff --git a/assets/charts/components/headlamp/templates/deployment.yaml b/assets/charts/components/web-ui/templates/deployment.yaml
similarity index 88%
rename from assets/charts/components/headlamp/templates/deployment.yaml
rename to assets/charts/components/web-ui/templates/deployment.yaml
index 5c91e6ba..26cc281d 100644
--- a/assets/charts/components/headlamp/templates/deployment.yaml
+++ b/assets/charts/components/web-ui/templates/deployment.yaml
@@ -32,6 +32,11 @@ spec:
           args:
           - -in-cluster
           - -plugins-dir=/headlamp/plugins/
+          {{- if .Values.oidc }}
+          - -oidc-client-id={{ .Values.oidc.clientID }}
+          - -oidc-client-secret={{ .Values.oidc.clientSecret }}
+          - -oidc-idp-issuer-url={{ .Values.oidc.issuerURL }}
+          {{- end }}
           ports:
             - name: http
               containerPort: {{ .Values.service.targetPort }}
diff --git a/assets/charts/components/headlamp/templates/ingress.yaml b/assets/charts/components/web-ui/templates/ingress.yaml
similarity index 100%
rename from assets/charts/components/headlamp/templates/ingress.yaml
rename to assets/charts/components/web-ui/templates/ingress.yaml
diff --git a/assets/charts/components/headlamp/templates/service.yaml b/assets/charts/components/web-ui/templates/service.yaml
similarity index 100%
rename from assets/charts/components/headlamp/templates/service.yaml
rename to assets/charts/components/web-ui/templates/service.yaml
diff --git a/assets/charts/components/headlamp/values.yaml b/assets/charts/components/web-ui/values.yaml
similarity index 99%
rename from assets/charts/components/headlamp/values.yaml
rename to assets/charts/components/web-ui/values.yaml
index 15495e85..ecb30533 100644
--- a/assets/charts/components/headlamp/values.yaml
+++ b/assets/charts/components/web-ui/values.yaml
@@ -8,7 +8,7 @@ image:
   repository: quay.io/kinvolk/headlamp
   pullPolicy: IfNotPresent
   # Overrides the image tag whose default is the chart appVersion.
-  tag: l8e
+  tag: v0.1.1
 
 imagePullSecrets: []
 nameOverride: ""
diff --git a/ci/aks/aks-cluster.lokocfg.envsubst b/ci/aks/aks-cluster.lokocfg.envsubst
index 3612025b..04401e10 100644
--- a/ci/aks/aks-cluster.lokocfg.envsubst
+++ b/ci/aks/aks-cluster.lokocfg.envsubst
@@ -119,9 +119,9 @@ component "experimental-istio-operator" {
   enable_monitoring = true
 }
 
-component "headlamp" {
+component "web-ui" {
   ingress {
-    host                       = "headlamp.${var.cluster_name}.${var.aws_dns_zone}"
+    host                       = "web-ui.${var.cluster_name}.${var.aws_dns_zone}"
     certmanager_cluster_issuer = "letsencrypt-staging"
   }
 }
diff --git a/ci/aws/aws-cluster.lokocfg.envsubst b/ci/aws/aws-cluster.lokocfg.envsubst
index 998ccf40..d69409f2 100644
--- a/ci/aws/aws-cluster.lokocfg.envsubst
+++ b/ci/aws/aws-cluster.lokocfg.envsubst
@@ -193,8 +193,8 @@ component "dex" {
 
   static_client {
     name   = "gangway"
-    id     = "$DEX_STATIC_CLIENT_GANGWAY_ID"
-    secret = "$DEX_STATIC_CLIENT_GANGWAY_SECRET"
+    id     = "$DEX_STATIC_CLIENT_CLUSTERAUTH_ID"
+    secret = "$DEX_STATIC_CLIENT_CLUSTERAUTH_SECRET"
 
     redirect_uris = ["$GANGWAY_REDIRECT_URL"]
   }
@@ -215,8 +215,8 @@ component "gangway" {
 
   token_url = "$TOKEN_URL"
 
-  client_id     = "$DEX_STATIC_CLIENT_GANGWAY_ID"
-  client_secret = "$DEX_STATIC_CLIENT_GANGWAY_SECRET"
+  client_id     = "$DEX_STATIC_CLIENT_CLUSTERAUTH_ID"
+  client_secret = "$DEX_STATIC_CLIENT_CLUSTERAUTH_SECRET"
 
   redirect_url = "$GANGWAY_REDIRECT_URL"
 }
@@ -239,9 +239,14 @@ component "experimental-istio-operator" {
   enable_monitoring = true
 }
 
-component "headlamp" {
+component "web-ui" {
   ingress {
-    host                       = "headlamp.$CLUSTER_ID.$AWS_DNS_ZONE"
+    host                       = "web-ui.$CLUSTER_ID.$AWS_DNS_ZONE"
     certmanager_cluster_issuer = "letsencrypt-staging"
   }
+  oidc {
+    client_id     = "$DEX_STATIC_CLIENT_CLUSTERAUTH_ID"
+    client_secret = "$DEX_STATIC_CLIENT_CLUSTERAUTH_SECRET"
+    issuer_url    = "$ISSUER_HOST"
+  }
 }
diff --git a/ci/packet/packet-cluster.lokocfg.envsubst b/ci/packet/packet-cluster.lokocfg.envsubst
index 8e489adb..49db5ef7 100644
--- a/ci/packet/packet-cluster.lokocfg.envsubst
+++ b/ci/packet/packet-cluster.lokocfg.envsubst
@@ -151,8 +151,8 @@ component "dex" {
 
   static_client {
     name   = "gangway"
-    id     = "$DEX_STATIC_CLIENT_GANGWAY_ID"
-    secret = "$DEX_STATIC_CLIENT_GANGWAY_SECRET"
+    id     = "$DEX_STATIC_CLIENT_CLUSTERAUTH_ID"
+    secret = "$DEX_STATIC_CLIENT_CLUSTERAUTH_SECRET"
 
     redirect_uris = ["$GANGWAY_REDIRECT_URL"]
   }
@@ -173,8 +173,8 @@ component "gangway" {
 
   token_url = "$TOKEN_URL"
 
-  client_id     = "$DEX_STATIC_CLIENT_GANGWAY_ID"
-  client_secret = "$DEX_STATIC_CLIENT_GANGWAY_SECRET"
+  client_id     = "$DEX_STATIC_CLIENT_CLUSTERAUTH_ID"
+  client_secret = "$DEX_STATIC_CLIENT_CLUSTERAUTH_SECRET"
 
   redirect_url = "$GANGWAY_REDIRECT_URL"
 }
@@ -211,9 +211,14 @@ component "experimental-istio-operator" {
   enable_monitoring = true
 }
 
-component "headlamp" {
+component "web-ui" {
   ingress {
-    host                       = "headlamp.$CLUSTER_ID.$AWS_DNS_ZONE"
+    host                       = "web-ui.$CLUSTER_ID.$AWS_DNS_ZONE"
     certmanager_cluster_issuer = "letsencrypt-staging"
   }
+  oidc {
+    client_id     = "$DEX_STATIC_CLIENT_CLUSTERAUTH_ID"
+    client_secret = "$DEX_STATIC_CLIENT_CLUSTERAUTH_SECRET"
+    issuer_url    = "$ISSUER_HOST"
+  }
 }
diff --git a/cli/cmd/component.go b/cli/cmd/component.go
index fea27143..dd2adbb5 100644
--- a/cli/cmd/component.go
+++ b/cli/cmd/component.go
@@ -26,7 +26,6 @@ import (
 	_ "github.com/kinvolk/lokomotive/pkg/components/external-dns"
 	_ "github.com/kinvolk/lokomotive/pkg/components/flatcar-linux-update-operator"
 	_ "github.com/kinvolk/lokomotive/pkg/components/gangway"
-	_ "github.com/kinvolk/lokomotive/pkg/components/headlamp"
 	_ "github.com/kinvolk/lokomotive/pkg/components/httpbin"
 	_ "github.com/kinvolk/lokomotive/pkg/components/istio-operator"
 	_ "github.com/kinvolk/lokomotive/pkg/components/linkerd"
@@ -38,6 +37,7 @@ import (
 	_ "github.com/kinvolk/lokomotive/pkg/components/rook"
 	_ "github.com/kinvolk/lokomotive/pkg/components/rook-ceph"
 	_ "github.com/kinvolk/lokomotive/pkg/components/velero"
+	_ "github.com/kinvolk/lokomotive/pkg/components/web-ui"
 )
 
 var componentCmd = &cobra.Command{
diff --git a/docs/concepts/components.md b/docs/concepts/components.md
index bd231b22..f271a826 100644
--- a/docs/concepts/components.md
+++ b/docs/concepts/components.md
@@ -84,7 +84,7 @@ Available components:
 	 external-dns
 	 flatcar-linux-update-operator
 	 gangway
-	 headlamp
+	 web-ui
 	 httpbin
 	 metallb
 	 metrics-server
diff --git a/docs/configuration-reference/components/dex.md b/docs/configuration-reference/components/dex.md
index 0a80e3b5..65d39c55 100644
--- a/docs/configuration-reference/components/dex.md
+++ b/docs/configuration-reference/components/dex.md
@@ -53,11 +53,11 @@ variable "github_client_secret" {
   type = "string"
 }
 
-variable "dex_static_client_gangway_id" {
+variable "dex_static_client_clusterauth_id" {
   type = "string"
 }
 
-variable "dex_static_client_gangway_secret" {
+variable "dex_static_client_clusterauth_secret" {
   type = "string"
 }
 
@@ -123,9 +123,9 @@ component "dex" {
   gsuite_json_config_path = "project-testing-123456-er12t34y56ui.json"
 
   static_client {
-    name   = "gangway"
-    id     = var.dex_static_client_gangway_id
-    secret = var.dex_static_client_gangway_secret
+    name   = "clusterauth"
+    id     = var.dex_static_client_clusterauth_id
+    secret = var.dex_static_client_clusterauth_secret
     redirect_uris = [var.gangway_redirect_url]
   }
 }
@@ -138,8 +138,8 @@ google_client_id     = "1234567890123-SqDIX1KFvKPYmuV9Sa8eL92cvxtS3TuP.apps.goog
 google_client_secret = "63zYPITtigLxLaYBEjNP9Taw"
 
 # A random secret key (create one with `openssl rand -base64 32`)
-dex_static_client_gangway_secret = "2KBvQkjOZdc3iHt4KSb9GUECdenH/VDl04TwMdSyPcs="
-dex_static_client_gangway_id     = "gangway"
+dex_static_client_clusterauth_secret = "2KBvQkjOZdc3iHt4KSb9GUECdenH/VDl04TwMdSyPcs="
+dex_static_client_clusterauth_id     = "clusterauth"
 
 gangway_redirect_url = "https://gangway.example.lokomotive-k8s.org/callback"
 ```
diff --git a/docs/configuration-reference/components/gangway.md b/docs/configuration-reference/components/gangway.md
index cb5abcc1..e595e3f2 100644
--- a/docs/configuration-reference/components/gangway.md
+++ b/docs/configuration-reference/components/gangway.md
@@ -52,8 +52,8 @@ component "gangway" {
   token_url = "https://dex.example.lokomotive-k8s.org/token"
 
   # The static client id and secret
-  client_id     = var.dex_static_client_gangway_id
-  client_secret = var.dex_static_client_gangway_secret
+  client_id     = var.dex_static_client_clusterauth_id
+  client_secret = var.dex_static_client_clusterauth_secret
 
   # gangway's redirect URL, i.e. where the OIDC endpoint should callback to
   redirect_url = var.gangway_redirect_url
@@ -67,8 +67,8 @@ gangway_redirect_url         = "https://gangway.example.lokomotive-k8s.org/callb
 
 # A random secret key (create one with `openssl rand -base64 32`)
 gangway_session_key              = "5Rsz5C4qRqYFoAfYcXOedQOyQpHTXyLiWFYvtjwjtm0="
-dex_static_client_gangway_secret = "2KBvQkjOZdc3iHt4KSb9GUECdenH/VDl04TwMdSyPcs="
-dex_static_client_gangway_id     = "gangway"
+dex_static_client_clusterauth_secret = "2KBvQkjOZdc3iHt4KSb9GUECdenH/VDl04TwMdSyPcs="
+dex_static_client_clusterauth_id     = "clusterauth"
 ```
 ## Attribute reference
 
diff --git a/docs/configuration-reference/components/headlamp.md b/docs/configuration-reference/components/headlamp.md
deleted file mode 100644
index b6ff757f..00000000
--- a/docs/configuration-reference/components/headlamp.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# Headlamp configuration reference for Lokomotive
-
-## Contents
-
-* [Introduction](#introduction)
-* [Prerequisites](#prerequisites)
-* [Configuration](#configuration)
-* [Attribute reference](#attribute-reference)
-* [Applying](#applying)
-* [Deleting](#deleting)
-
-## Introduction
-
-[Headlamp](https://github.com/kinvolk/headlamp) is an easy-to-use and versatile
-dashboard for Kubernetes.
-
-It has a clean and modern UI, it is vendor independent, generic, and supports
-the most common operations for Kubernetes clusters.
-
-## Prerequisites
-
-* A Kubernetes cluster accessible via `kubectl`.
-
-* An ingress controller such as [Contour](contour.md) for HTTP ingress.
-
-* [cert-manager](cert-manager.md) to generate TLS certificates.
-
-## Configuration
-
-```tf
-# headlamp.lokocfg
-
-component "headlamp" {
-  ingress {
-    host                       = "headlamp.example.lokomotive-k8s.org"
-    class                      = "contour"
-    certmanager_cluster_issuer = "letsencrypt-production"
-  }
-}
-```
-
-## Attribute reference
-
-Table of all the arguments accepted by the component.
-
-| Argument                             | Description                                                                                                                                   | Default                  | Type   | Required |
-|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|--------|----------|
-| `namespace`                          | Namespace where Headlamp will be installed.                                                                                                   | "lokomotive-system"      | string | false    |
-| `ingress`                            | Configuration block for exposing Headlamp through an Ingress resource.                                                                        | -                        | block  | false    |
-| `ingress.host`                       | Used as the `hosts` domain in the Ingress resource for headlamp that is automatically created.                                                | -                        | string | true     |
-| `ingress.class`                      | Ingress class to use for the Headlamp Ingress.                                                                                                | `contour`                | string | false    |
-| `ingress.certmanager_cluster_issuer` | `ClusterIssuer` to be used by cert-manager while issuing TLS certificates. Supported values: `letsencrypt-production`, `letsencrypt-staging`. | `letsencrypt-production` | string | false    |
-
-## Applying
-
-To apply the Headlamp component:
-
-```bash
-lokoctl component apply headlamp
-```
-
-## Deleting
-
-To destroy the component:
-
-```bash
-lokoctl component delete headlamp
-```
diff --git a/docs/configuration-reference/components/web-ui.md b/docs/configuration-reference/components/web-ui.md
new file mode 100644
index 00000000..8687edc5
--- /dev/null
+++ b/docs/configuration-reference/components/web-ui.md
@@ -0,0 +1,110 @@
+# Web UI configuration reference for Lokomotive
+
+## Contents
+
+* [Introduction](#introduction)
+* [Prerequisites](#prerequisites)
+* [Configuration](#configuration)
+* [Attribute reference](#attribute-reference)
+* [Applying](#applying)
+* [Deleting](#deleting)
+
+## Introduction
+
+Web UI is a web interface to your Lokomotive cluster. It is based on the
+[Headlamp](https://github.com/kinvolk/headlamp) project, an easy-to-use and
+versatile dashboard for Kubernetes.
+
+It has a clean and modern UI and supports the most common operations for
+Kubernetes clusters.
+
+## Prerequisites
+
+* A Kubernetes cluster accessible via `kubectl`.
+
+* An ingress controller such as [Contour](contour.md) for HTTP ingress.
+
+* [cert-manager](cert-manager.md) to generate TLS certificates.
+
+* Optionally [dex](dex.md) to use OIDC for authentication.
+
+## Configuration
+
+```tf
+# web-ui.lokocfg
+
+component "web-ui" {
+  ingress {
+    host                       = "web-ui.example.lokomotive-k8s.org"
+    class                      = "contour"
+    certmanager_cluster_issuer = "letsencrypt-production"
+  }
+  oidc {
+    client_id     = var.dex_static_client_clusterauth_id
+    client_secret = var.dex_static_client_clusterauth_secret
+    issuer_url    = "https://dex.example.lokomotive-k8s.org"
+  }
+}
+```
+
+Secrets can be defined in another file (`lokocfg.vars`) like following:
+
+```tf
+# A random secret key (create one with `openssl rand -base64 32`)
+dex_static_client_clusterauth_secret = "2KBvQkjOZdc3iHt4KSb9GUECdenH/VDl04TwMdSyPcs="
+dex_static_client_clusterauth_id     = "clusterauth"
+```
+
+### OIDC
+
+To use OIDC for authentication make sure you first have [authentication with
+Dex and Gangway](../../how-to-guides/authentication-with-dex-gangway.md)
+configured. Additionally, you need to add the Web UI redirect URL to the
+`static_client.redirect_uris` argument in the dex configuration.
+
+The Web UI redirect URL is `https://web-ui.<CLUSTER_NAME>.<DOMAIN_NAME>/oidc-callback`.
+
+Example:
+
+```tf
+  static_client {
+    ...
+
+    redirect_uris = [..., "https://web-ui.example.lokomotive-k8s.org/oidc-callback"]
+  }
+```
+
+Finally, configure the oidc arguments in the Web UI component following the
+description in the [Attribute reference](#attribute-reference).
+
+## Attribute reference
+
+Table of all the arguments accepted by the component.
+
+| Argument                             | Description                                                                                                                                   | Default                  | Type   | Required |
+|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|--------|----------|
+| `namespace`                          | Namespace where the Web UI will be installed.                                                                                                 | "lokomotive-system"      | string | false    |
+| `ingress`                            | Configuration block for exposing the Web UI through an Ingress resource.                                                                      | -                        | block  | false    |
+| `ingress.host`                       | Used as the `hosts` domain in the Ingress resource for web-ui that is automatically created.                                                  | -                        | string | true     |
+| `ingress.class`                      | Ingress class to use for the Web UI Ingress.                                                                                                  | `contour`                | string | false    |
+| `ingress.certmanager_cluster_issuer` | `ClusterIssuer` to be used by cert-manager while issuing TLS certificates. Supported values: `letsencrypt-production`, `letsencrypt-staging`. | `letsencrypt-production` | string | false    |
+| `oidc`                               | Configuration block for setting up OIDC authentication against dex.                                                                           | -                        | block  | false    |
+| `oidc.client_id`                     | Static client id. It must match the dex `static_client` name.                                                                                 | -                        | string | true     |
+| `oidc.client_secret`                 | Static client secret. It must match the dex `static_client` secret.                                                                           | -                        | string | true     |
+| `oidc.issuer_url`                    | Dex's issuer URL. It must match the dex `issuer_host`.                                                                                        | -                        | string | true     |
+
+## Applying
+
+To apply the Web UI component:
+
+```bash
+lokoctl component apply web-ui
+```
+
+## Deleting
+
+To destroy the component:
+
+```bash
+lokoctl component delete web-ui
+```
diff --git a/docs/how-to-guides/authentication-with-dex-gangway.md b/docs/how-to-guides/authentication-with-dex-gangway.md
index 012882c4..9eed225f 100644
--- a/docs/how-to-guides/authentication-with-dex-gangway.md
+++ b/docs/how-to-guides/authentication-with-dex-gangway.md
@@ -93,11 +93,11 @@ variable "github_client_secret" {
   type = "string"
 }
 
-variable "dex_static_client_gangway_id" {
+variable "dex_static_client_clusterauth_id" {
   type = "string"
 }
 
-variable "dex_static_client_gangway_secret" {
+variable "dex_static_client_clusterauth_secret" {
   type = "string"
 }
 
@@ -143,11 +143,11 @@ component "dex" {
     }
   }
 
-  # Static client details - Gangway.
+  # Static client details - Cluster Auth.
   static_client {
-    name   = "gangway"
-    id     = var.dex_static_client_gangway_id
-    secret = var.dex_static_client_gangway_secret
+    name   = "clusterauth"
+    id     = var.dex_static_client_clusterauth_id
+    secret = var.dex_static_client_clusterauth_secret
 
     redirect_uris = [var.gangway_redirect_url]
   }
@@ -170,8 +170,8 @@ component "gangway" {
   token_url = "https://dex.<CLUSTER_NAME>.<DOMAIN_NAME>/token"
 
   # The static client id and secret.
-  client_id     = var.dex_static_client_gangway_id
-  client_secret = var.dex_static_client_gangway_secret
+  client_id     = var.dex_static_client_clusterauth_id
+  client_secret = var.dex_static_client_clusterauth_secret
 
   # Gangway's redirect URL.
   redirect_url = var.gangway_redirect_url
@@ -201,8 +201,8 @@ Create another file `lokocfg.vars` for variables and secrets that should be refe
 
 ```hcl
 # A random secret key (create one with `openssl rand -base64 32`)
-dex_static_client_gangway_secret="vJ09ouDw1BXEz6onT2+xW8PdofWIG8cN8+f0bv1zKZI="
-dex_static_client_gangway_id="gangway"
+dex_static_client_clusterauth_secret="vJ09ouDw1BXEz6onT2+xW8PdofWIG8cN8+f0bv1zKZI="
+dex_static_client_clusterauth_id="clusterauth"
 
 # A random secret key (create one with `openssl rand -base64 32`)
 gangway_session_key="PMXEGiQ7fScPxuKS/DAimsCHueeWxT7HBL6I16sZzHE="
@@ -257,7 +257,7 @@ cluster "aws" {
 
   oidc {
     issuer_url     = https://dex.<CLUSTER_NAME>.<DOMAIN_NAME>
-    client_id      = gangway
+    client_id      = clusterauth
     username_claim = email
     groups_claim   = groups
   }
diff --git a/pkg/assets/generated_assets.go b/pkg/assets/generated_assets.go
index 44e9ab5f..dfe9db67 100644
--- a/pkg/assets/generated_assets.go
+++ b/pkg/assets/generated_assets.go
@@ -1091,63 +1091,6 @@ var vfsgenAssets = func() http.FileSystem {
 
 			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xcd\x4b\x0a\xc2\x40\x10\x84\xe1\x7d\x9f\xc2\x73\xf4\x56\x17\x06\x1f\x0b\x83\x07\x18\xc6\x22\x36\xc6\x1e\xa9\xee\x11\xf4\xf4\x42\x82\xbb\xaf\xa0\xe0\xaf\x73\x8f\x04\xcf\xe5\x09\xdd\x88\xf9\x44\x44\xec\x5b\xa4\x4a\x20\xc2\x9a\x1f\xf0\x51\x29\x2f\x1b\xc1\x37\x78\xbd\x1c\x55\x4a\xcf\x7b\xa3\x7d\xb1\xac\x6c\x0f\xf8\xa2\x3a\x1b\x3c\x87\xdd\x5f\x23\x2a\x91\x2a\xc4\xcd\x88\x9a\xeb\x09\xcc\x53\xf1\x32\x81\xdb\x35\x3e\x44\x74\x50\xe5\x17\x00\x00\xff\xff\x68\xbe\xdb\x11\x8c\x00\x00\x00"),
 		},
-		"/charts/components/headlamp": &vfsgen۰DirInfo{
-			name:    "headlamp",
-			modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-		},
-		"/charts/components/headlamp/.helmignore": &vfsgen۰CompressedFileInfo{
-			name:             ".helmignore",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 349,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x41\x6e\xe3\x30\x0c\x45\xf7\x3c\xc5\x1f\x78\x33\x63\x0c\xe4\x43\x24\xb3\x98\x55\x0b\xa4\xc8\xb6\x90\x6d\x46\x62\x22\x8b\x82\x44\x27\x6d\x17\x3d\x7b\x91\x04\x41\xbb\x79\x20\x3f\xc8\x8f\xd7\xe1\xd9\x9b\x71\xcd\x0d\xa6\x90\x90\xb5\x32\x2e\x91\x33\xc6\x55\xd2\x2c\x39\xa0\xf8\xe9\xe4\x03\x37\x47\x1d\x5e\xa2\x34\xb4\xb5\x14\xad\xd6\xd0\x22\xa7\x84\x90\x74\xc4\xe2\x6d\x8a\x92\xc3\x5f\x54\x4e\xde\xe4\xcc\x28\xde\xe2\x8f\xdc\xe7\x99\x3a\x64\x0e\xde\x44\x33\x7e\x97\xca\x07\x79\xe3\x19\x17\xb1\x88\x5f\x7f\x1c\x9e\x72\x7a\x87\xe6\xdb\xe7\x55\x09\x85\x2b\x92\x64\x76\xe4\xb6\xbb\xd7\x9d\x69\x65\xea\xb0\xd1\x65\xd1\x8c\xfd\x66\x87\x59\x6a\x23\x17\xc4\x86\x1b\xef\xfa\xe4\xc6\x8f\x3a\xdc\xf8\x08\x62\x18\xae\x78\xac\xed\x9c\x87\xef\xa2\xd1\x4f\xa7\xb5\xe0\x20\x89\x1b\xf5\xae\x5d\x0a\xf5\x6e\xf4\x27\xea\x9d\x2d\xd7\x59\xab\x04\xea\x3f\xa9\xc3\xde\x57\xd1\xb5\xe1\xff\xf6\x5f\x23\x57\xaa\x1e\x79\x32\x72\x32\xb3\x1f\xee\xe7\x55\x8f\xe4\xce\x6d\xd2\x99\x07\xfa\x0a\x00\x00\xff\xff\x16\xec\x32\x27\x5d\x01\x00\x00"),
-		},
-		"/charts/components/headlamp/Chart.yaml": &vfsgen۰CompressedFileInfo{
-			name:             "Chart.yaml",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 176,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x8e\x3d\xae\xc3\x20\x10\x06\x7b\x4e\xf1\x5d\xc0\x88\xf7\x4a\x77\xa9\xdd\xbb\x5f\xcc\x26\x46\xc1\xec\x8a\x3f\x89\xdb\x47\x89\x14\xa5\x9d\x29\x66\x48\xe3\xce\xa5\x46\xc9\x2b\xc6\xbf\xc9\x74\xf1\x8a\x93\x29\x24\xba\xd4\x04\xae\x47\x89\xda\x3e\xfa\x96\xc1\x54\xe7\xd2\x64\xe9\x95\x41\x39\x60\x70\xa9\xd4\x62\x62\x04\xaa\xa7\x17\x2a\x01\x77\x29\xd8\xba\xe7\x92\xb9\x71\x85\x2f\xd2\x1f\x67\x43\x13\x4c\xe9\xf0\x13\x5b\xcc\x43\xd2\xd3\x9a\x36\x95\x57\x90\x6a\x8a\x07\xbd\x1b\xc6\x8c\xef\x8b\xb3\x7f\xd6\x19\x52\xdd\x7f\xc4\x59\x67\x5e\x01\x00\x00\xff\xff\x83\x30\x02\xa9\xb0\x00\x00\x00"),
-		},
-		"/charts/components/headlamp/templates": &vfsgen۰DirInfo{
-			name:    "templates",
-			modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-		},
-		"/charts/components/headlamp/templates/_helpers.tpl": &vfsgen۰CompressedFileInfo{
-			name:             "_helpers.tpl",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 1792,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x4d\x6b\xdb\x40\x10\xbd\xeb\x57\x0c\x4b\x03\x49\x8a\xd6\x87\x42\x0f\x81\x1e\x42\xda\x43\x69\x49\xa1\x86\xf4\x58\x56\xab\x51\xb4\x74\xb5\x52\xf6\xc3\x8d\x91\xfd\xdf\xcb\x7e\x58\x96\x65\xd9\x75\x6e\x8b\xf5\xf6\xcd\x7b\x6f\x66\xd6\x7d\xbf\xb8\xcd\xbe\xbc\x76\x4c\x95\x60\x6b\x04\xc5\x1a\x84\xb6\x0a\x67\x5e\x33\x6d\x69\x76\xbb\xd8\x6e\xb3\xbe\xcf\xa1\xc4\x4a\x28\x04\x52\x23\x2b\x25\x6b\x3a\xea\xc1\x04\xf2\xfd\x67\xe6\xa4\x05\xfa\x10\xee\x3d\x7a\x26\xfa\xc4\xa4\x43\x13\x90\x3f\x56\xa8\xb5\x28\x11\x36\x60\xb5\x53\x1c\x3e\x7e\x08\x47\xd1\x2c\x5d\x55\x89\x57\x20\x39\x81\xc4\x85\xaa\xf4\xc7\x2c\xc8\x7b\xd0\xc8\x2c\x02\x1b\x2a\x54\x4e\xca\x35\xbc\x38\x26\x45\x25\xb0\x04\xd6\x75\x41\x38\xcd\x7e\x61\xe4\x0e\x78\xeb\x2b\x78\x13\x06\x0a\xe4\xcc\x19\x04\xd3\x36\x08\xdf\x5c\x81\x5a\xa1\x45\x13\xed\x56\x02\x65\x69\x80\x69\x04\x29\x1a\x61\xb1\x04\xdb\x82\xad\x85\x81\xeb\x62\x1d\xa2\xf8\xfc\xb8\xf4\x58\xa1\x9e\xc1\x74\xc8\x6f\x68\xf6\xb5\x02\x8d\x12\x99\x49\x99\xf1\x56\x59\x26\x94\x89\xa9\xc5\xdf\x84\x85\xbf\x42\x4a\x28\x10\x9c\xf1\x3a\x0d\xb0\x20\x3e\xa9\x3d\x9d\xac\x07\x1d\xa6\x2b\xaa\x21\xcc\xdd\xc7\x21\xd0\x04\x39\xf9\xfd\x92\xc0\xa5\x19\x78\xde\x05\xf1\x77\x9f\x2e\xef\xe8\x5e\xe3\x10\x43\x24\xa1\x3f\x63\x46\xf1\xee\x4e\xe7\xc1\x8f\x6f\x14\xd7\x69\xa1\x6c\x05\xe4\xca\xe4\x57\x86\x4c\xb8\x62\xd1\xcb\xe7\x6b\xfe\x78\x30\x75\xa3\x76\xfa\x1d\x59\xa1\x36\xa2\x55\xbe\x95\xa1\xa5\x69\x3e\x22\x4a\xb2\x02\xe5\xb9\xb6\x06\xd8\xbe\xa7\x53\x2f\xe3\x98\xe3\xf9\x29\x95\xdb\x80\xc6\x4e\x32\x8e\x40\xde\x13\x20\xbf\xc9\xdb\x97\xa8\x6d\x9a\x56\x45\x89\xe6\x8c\xc4\x08\x88\x1a\x6b\x94\x0d\x35\xf5\x22\xc8\xbe\x83\xbe\x07\xa1\xb8\x74\xe5\x8c\x25\x1a\x8b\xce\x00\x0c\x4a\xe4\xb6\xd5\xdf\x13\x31\x1d\x4d\x4b\x72\x79\xdf\x75\x3b\xa3\xdb\x6d\xc6\xba\x8e\xfe\x19\x56\x94\x8a\x76\x91\x42\x0f\x0a\x8e\xaf\x6c\xe0\xc5\xb5\x16\x27\xae\x8f\x59\x1a\xa6\xd8\x33\x96\x79\xb1\x8e\x44\xbb\xc9\x59\xa2\x5e\x09\x3e\xbd\x1f\x53\x5b\x26\xf1\xff\xcf\x6d\x6a\x33\x9f\xd5\xe0\xe7\xe8\x44\x90\x71\xdd\xe9\xbc\x76\xa1\x8c\x65\x8a\xe3\xa1\xf2\xf1\x52\xcd\xcd\xee\xf4\x41\x37\xc9\x29\xe3\xbc\x75\xca\xfa\x57\xce\x19\x3c\x6b\x2a\x5c\xb8\x8f\xf8\xc7\x53\x0f\xd2\x21\x8c\xf2\x58\x7d\xf2\xb7\x70\x7d\x6c\x79\xff\xca\xd1\x9b\x53\x64\x6a\xec\x71\xf4\x0e\xec\x68\x49\x3a\x90\x8b\x08\x8e\x76\xfd\x5f\x00\x00\x00\xff\xff\x9f\x46\x7b\x85\x00\x07\x00\x00"),
-		},
-		"/charts/components/headlamp/templates/deployment.yaml": &vfsgen۰CompressedFileInfo{
-			name:             "deployment.yaml",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 1839,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x54\x4d\x8b\xdb\x3c\x10\xbe\xe7\x57\x0c\xb9\xdb\x61\x5f\x5e\x4a\x31\xf4\xb0\xa4\xd0\xcb\x52\x02\x29\x0b\x3d\xce\x4a\x93\x58\x54\x96\x84\x34\x4e\x1b\xb2\xfe\xef\x45\xeb\x38\x96\x1c\xa7\x1f\xdb\x42\x7d\x9c\xd1\xf3\x35\x1a\x0b\x9d\x7a\x24\x1f\x94\x35\x15\xa0\x73\x61\x75\xb8\x5b\x7c\x51\x46\x56\xf0\x9e\x9c\xb6\xc7\x86\x0c\x2f\x1a\x62\x94\xc8\x58\x2d\x00\x0c\x36\x54\xc1\xe9\x04\xca\x08\xdd\x4a\x82\x65\x4d\x28\x35\x36\xae\xdc\xb5\x5a\xc7\xf6\x12\x4a\xe8\xba\x05\x80\xc6\x27\xd2\x21\xa2\x00\x4e\xa7\x62\x06\xd2\x9f\x88\x80\x67\x30\xca\x48\x32\x0c\xff\x47\x70\x70\x24\x22\x30\x90\x26\xc1\xd6\xf7\x24\x0d\xb2\xa8\x1f\x12\xd6\x5b\xbc\x03\xec\x61\x86\xff\x4d\x6f\x8e\xa9\x71\x1a\x99\xce\xcc\x49\xc4\x9e\xf4\xab\xe2\x1a\xca\x47\xd4\x2d\x85\xd2\x59\x79\x6f\x8c\x65\x64\x65\x4d\xe8\x09\xe2\x87\x63\x71\x30\xd4\xa3\xd9\x7e\xc6\x46\x67\xba\x6f\x07\x58\xec\x93\x91\x23\x8b\xce\x12\xbd\x26\xd3\x85\x7b\x98\xdb\x6c\x0a\xd5\xe0\x9e\x36\xad\xd6\x5b\x12\x9e\x38\xc9\x31\xed\xfc\x7a\x98\x99\x38\x81\x44\xeb\x15\x1f\xd7\xd6\x30\x7d\xe3\x79\xae\x71\xb0\xdb\xfc\xf8\xbc\x88\xb0\x86\x51\x19\xf2\x89\xb5\x62\x5c\xc6\x72\x5d\xa3\xe7\xf2\x23\x36\x34\x62\x7e\xe8\xe5\x86\x9f\x70\xd3\xcc\xdd\x7f\x39\xf3\xcb\xc8\x2a\x58\x46\xf5\x74\xbe\xa5\x27\x67\x83\x62\xeb\x8f\xd0\x75\xd5\x55\x9b\x71\x0f\xcf\x20\x69\x87\xad\xe6\xc1\xf8\xbd\x73\xe7\xdf\x10\xba\x6e\x39\x55\x89\x17\xb3\xb1\x5a\x89\x63\x1f\x36\xe3\x73\x97\x66\xee\x0f\xfd\x3e\xa4\x71\x0b\x28\x94\x29\x84\x6e\x03\x93\xcf\xeb\x4e\xb7\x7b\x65\x42\x21\x95\x7f\xb7\x1a\xf6\x6d\x75\xae\xae\x92\xb3\xce\x7a\x0e\xf9\x0c\x87\x4b\xa8\x99\x5d\xd6\x48\xee\x6c\x63\x3d\x67\xce\x03\xf9\x83\x12\x71\x16\x7e\x4f\x1c\xdb\xb9\xf7\x17\x2d\x6f\xd9\x0a\xab\x2b\xf8\xb4\xde\x24\x3d\xad\x0e\x64\x28\x84\x8d\xb7\x4f\x94\x7b\x89\x1e\x3e\xd0\xe4\x92\x01\x1c\x72\x5d\xc1\x6a\x5a\xfd\x5d\x53\x9e\x50\xaa\x7f\xa4\x1c\x6c\xeb\x05\x85\x9f\xae\xef\xe5\xe4\x8d\xc5\xbd\x7a\x12\x8c\x95\xb4\x3d\x3f\x2c\xe3\xb1\xb4\xfa\x47\x4f\xc1\x95\x1e\xee\x76\xca\x28\x4e\x76\x75\xa8\xfc\x5d\x1d\xb6\x9a\xfc\xf4\xb5\x4e\x8a\xaf\x54\xfb\x1e\x00\x00\xff\xff\xa9\xad\x86\xd3\x2f\x07\x00\x00"),
-		},
-		"/charts/components/headlamp/templates/ingress.yaml": &vfsgen۰CompressedFileInfo{
-			name:             "ingress.yaml",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 1054,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\xc1\x8a\xdb\x40\x0c\x86\xef\x7e\x0a\x11\x7a\xcd\xb4\x81\x3d\x14\xc3\xf6\xb2\x87\x52\x0a\xa1\xa7\x85\x1e\x65\x5b\x89\x45\xc6\x1a\x77\x46\xce\x16\x5c\xbf\x7b\x19\x8f\x4d\xec\x4d\xcc\xde\x66\xa4\xef\x97\xf4\xcb\x9e\xbe\xdf\x03\x9f\xc0\xbc\xa2\xed\x28\x18\x96\xb3\xa7\x10\x0c\x09\x16\x96\x2a\xd8\x0f\x43\x16\x91\x4f\xa7\xce\xda\x23\x36\x04\xf9\x33\xb0\x94\xb6\xab\x08\x76\x35\x61\x65\xb1\x69\x4d\xcc\x0a\x36\xb4\x03\x73\x93\x84\x6b\xf9\xcb\x79\x8d\x8a\xb9\x7c\x20\x7f\xe5\x92\x4c\x1b\xe3\x33\xc8\x27\x08\xd4\x5c\xc9\xbf\xb8\xa6\x45\x4f\xb0\xfb\xf6\x7c\x30\x87\xa7\xfd\x97\x1d\x98\x17\x6c\xb1\x60\xcb\xca\x14\xcc\xcf\xae\xa0\x57\xf2\x81\x9d\x98\xef\xac\xd3\x71\x2c\x84\x2d\x4f\xd7\x1c\x84\xf4\xcd\xf9\x0b\xcb\xd9\x5c\xbe\x06\xc3\xee\xf3\xf5\x50\x90\xe2\x61\x6c\x47\x36\xd0\x9d\x84\xfe\x2a\x49\x3c\x86\x35\x2b\x15\x0c\x43\x76\x61\xa9\x72\xf8\x91\x76\x93\x35\xa4\x58\xa1\x62\x9e\x01\x44\xd3\x39\xf4\xfd\x62\x41\xc3\x90\x01\x58\x2c\xc8\x86\x48\x00\x8c\x1e\xef\x56\x96\x88\xb8\xb0\x7f\x20\x2c\x15\x89\xc2\x53\x12\x47\xc1\x1b\x6b\x7d\xf7\x55\x50\xc4\x29\x6a\x1c\x33\x91\x8b\xc0\xad\x97\xba\xdf\xd8\xd8\xad\xc2\x93\xa5\xd0\x52\x99\x4f\xa1\x07\xdf\x5f\xed\xd4\x41\x97\x2e\x3c\xca\x99\xb6\x59\x80\x3d\xd4\x2e\xe8\xa4\x78\xa7\x1a\x33\x33\x98\xe0\xbe\x1f\xa7\xfc\xd3\x39\xa5\x65\x66\x31\x67\x0a\x04\x2a\x3d\xe9\x71\x5e\xb6\xb9\xdd\x67\x66\x25\x59\x5d\x7c\x67\xe9\x43\x0f\xab\xe1\x92\x8b\xd4\x29\x9e\xee\x47\xac\x55\xdb\x9b\xc9\x16\xb5\x5e\x78\x5e\xf5\x19\x73\x4b\x6f\xb1\x7c\x0c\xa6\xf2\xeb\x0c\x40\x81\xe5\x85\xa4\xca\x57\xc1\xe8\x7f\x7c\x37\xc7\x8d\xbf\xed\x01\x1a\x5f\x5e\x42\xe7\x67\xb8\x22\xdf\x6d\x78\x6b\x7b\xff\x03\x00\x00\xff\xff\x36\xe9\xb3\x7e\x1e\x04\x00\x00"),
-		},
-		"/charts/components/headlamp/templates/service.yaml": &vfsgen۰CompressedFileInfo{
-			name:             "service.yaml",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 392,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\xc1\x4e\x43\x21\x10\x45\xf7\x7c\xc5\x4d\xf7\x25\x31\x71\xc5\xd6\xad\x8b\x26\x9a\xee\x47\x18\x2d\x71\x1e\x10\x98\xd7\xc4\x60\xff\xdd\x20\x35\xdd\xf4\xc9\x0e\xee\x39\xb9\xcc\x50\x89\x47\xae\x2d\xe6\xe4\x70\x7e\x30\x9f\x31\x05\x87\x17\xae\xe7\xe8\xd9\x2c\xac\x14\x48\xc9\x19\x20\xd1\xc2\x0e\xbd\x23\x26\x2f\x6b\x60\xec\x4e\x4c\x41\x68\x29\xf6\x7d\x15\x19\xf1\x0e\x16\x97\x8b\x01\x84\xde\x58\xda\xb0\x80\xde\xf7\x77\x94\x49\x0c\xe1\x1b\x29\xa6\xc0\x49\xf1\x38\xe4\x56\xd8\x0f\x51\xbf\xca\xac\xb3\x47\x92\x95\x9b\x6d\xf3\x4f\x76\x04\xb3\xa5\xe4\xaa\xd7\x92\xfd\xef\xe5\x2e\x3f\x82\xc9\x8f\xa3\x54\x3f\x58\x0f\x5b\xf0\x2d\xbe\x29\xa5\x66\xcd\x3e\x8b\xc3\xeb\xd3\xe1\xfa\x36\x97\x71\x52\x2d\x06\x68\x2c\xec\x35\xd7\xff\xe6\xfd\x63\x9e\xb7\xe6\xfe\x09\x00\x00\xff\xff\x25\x3b\x95\xee\x88\x01\x00\x00"),
-		},
-		"/charts/components/headlamp/values.yaml": &vfsgen۰CompressedFileInfo{
-			name:             "values.yaml",
-			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
-			uncompressedSize: 1402,
-
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x4d\x6f\x1b\x47\x0c\xbd\xcf\xaf\x20\xe2\x43\x2e\x91\x6c\x07\x41\x60\xec\xcd\x70\xd0\xc2\x80\xed\x18\x75\x3f\x50\x04\x39\xd0\xb3\x5c\x69\x6a\xee\x70\x43\x72\x64\x2f\x8a\xfe\xf7\x62\x66\x25\xbb\x49\x53\xa0\x27\xcd\xf2\xeb\x3d\xf2\x91\x3a\x82\x0f\x34\x60\x61\x87\x1d\x72\x21\x83\x41\x14\xb6\x84\x3d\xe3\x38\xad\xc3\x11\xfc\xbc\x4d\x06\xc9\x00\xe1\xf7\xf3\xeb\xab\xd5\x20\x3a\xa2\x3b\xf5\x30\x24\xa6\x1a\xf0\x81\x22\xa3\x12\xec\x50\x13\xde\x33\x19\xb8\xc0\x3d\xc1\x84\x66\xd4\x43\xca\x2e\x30\x4b\x51\x70\x1a\x27\x46\x27\x5b\x87\xa0\x34\x71\x8a\x78\x21\x25\x7b\x07\xa7\x21\xa4\x11\x37\xd4\x05\x00\xa5\x49\x2c\xb9\xe8\xdc\xc1\x97\x82\xf3\x3a\xc9\xf1\x43\xca\x3b\xe1\x87\xe3\x03\xaf\x00\x30\x15\xe6\x5b\xe1\x14\xe7\x0e\x2e\x87\x1b\xf1\x5b\x25\xa3\xec\x01\xe0\x08\x3e\xee\x48\x35\xf5\x95\xca\x96\xa0\x95\x06\xc7\x0d\x3c\x6e\xc5\x08\xfa\x7d\xc3\x69\x71\xc7\x2d\xaa\x03\x4e\xd3\xaf\xa4\x96\x24\xaf\x03\xd4\xe0\x0e\xf8\x8c\xf6\xbc\x6e\x0b\xf3\x1d\x45\x25\xb7\x0e\x3e\x7d\x0e\x19\x47\x3a\x60\x74\xf0\xea\x55\x18\x0a\xf3\xbf\x8c\x61\x92\xfe\x3c\x67\x71\xf4\x24\xd9\x3a\xf8\xf3\xaf\x66\xbb\xa3\x58\x34\xf9\x7c\x21\xd9\xe9\xc9\x9b\xbd\xb2\x1e\xec\x47\x95\x32\x75\xf0\xf6\xe4\xe4\x24\x04\xfb\x8f\xb0\x88\x13\xde\x27\x4e\x9e\xc8\xba\x66\x01\xe8\x55\xa6\xc3\x7b\x05\xe7\x57\x57\xed\xad\x84\xfd\xc7\xcc\xf3\x4f\x22\xfe\x43\x62\xb2\xd9\x9c\xc6\x0e\x5c\x0b\x2d\x01\x25\x9f\xdb\x8d\xe4\x1a\xf0\xad\xf9\x17\x23\xed\xe0\x74\x4f\x45\x77\x29\x36\x79\x7c\x9e\xa8\x83\x0b\x2e\xe6\xa4\x97\xb7\x55\x09\x51\xef\xe0\xec\xa4\x8d\x4d\x37\xe4\xb7\xcd\xf0\xee\xdd\xfb\xf7\x21\xa4\xbc\x51\xb2\xc6\x93\x72\xdd\x8e\xbe\x83\x01\xd9\x2a\x10\x7e\x33\x1b\x80\x0a\xfe\x50\xee\x49\x33\xd5\x35\x49\x72\xbc\xcf\x5f\x47\x46\xb3\x0e\xf2\x26\xe5\xa7\xef\x06\x3a\xdb\x0a\xe3\x58\x27\x5f\xfb\x78\x15\x00\xb6\x62\xde\x90\xeb\x4c\xea\x47\xb7\x68\xbd\xa2\x27\x1c\x27\xa6\x35\x4b\x44\x6e\x7e\x80\x09\x7d\xbb\x88\x0b\xe0\x7c\x78\x1d\xd5\x54\x6b\xca\xdf\x60\x2d\xfe\x55\x81\x95\xb3\xed\x87\xfe\x02\x76\xb4\xd4\x5b\x7d\x17\x2b\x28\x99\x14\x8d\x64\xcf\x72\xfe\x46\x50\xac\x20\xf3\x0c\x4a\x51\xc6\x91\x72\x0f\x59\xbc\x5e\x91\x4d\x14\xd3\x30\x3f\x6f\xec\x73\x36\x60\xee\x6b\x00\x13\xee\x08\xbc\x9e\x28\xd6\x13\x8d\x92\x2d\x26\x29\x0b\xad\xb8\x95\x14\xa9\x5d\x74\x5d\xf4\x62\xa4\xeb\xe5\x9e\x91\x4d\x20\xe5\xa8\x84\x46\x56\xa9\xe6\xb8\xfc\xaa\x5b\xd5\x1f\x24\x03\xe5\x5d\x52\xc9\x23\x65\x37\x78\x4c\xbe\x05\x4e\xee\xbc\xdf\x91\x03\x95\x37\x60\x25\x6e\x2b\xfc\x75\xca\xa9\x8a\xb2\x86\xcb\xa1\x5e\x3c\xf4\x02\x8f\x98\xbf\xea\xe4\x1f\x69\x25\x2f\xdd\x7a\x23\x37\x08\xb3\x3c\xa6\xbc\x69\xd5\x39\xe5\x1a\x82\xfd\x1f\xc5\x9a\x7f\xac\x00\x99\x22\x99\xa1\xce\x6f\x5a\xff\x4a\xa3\xb4\xee\x09\x62\x51\x9e\xe1\x5e\xb1\xcd\x66\x70\x52\x78\xfd\x32\xea\xd7\xeb\x7d\xd1\x31\xbd\x68\x14\xa7\xd2\xd6\x7b\xdc\x7f\x8f\x34\xb6\xff\x9c\xd3\xb7\x67\xd7\x69\xdf\xe2\x97\x42\xf6\x7f\x33\x42\x96\x9e\xee\x88\x29\xba\xe8\x72\xeb\x2e\x4c\x7a\x58\xf0\x4f\x9f\x43\xc0\x61\x48\x39\xf9\xdc\xdc\x7f\x07\x00\x00\xff\xff\xaf\xd0\x24\xe6\x7a\x05\x00\x00"),
-		},
 		"/charts/components/httpbin": &vfsgen۰DirInfo{
 			name:    "httpbin",
 			modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
@@ -4402,6 +4345,63 @@ var vfsgenAssets = func() http.FileSystem {
 
 			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x6f\x6f\x1b\x39\x73\x7f\xbf\x9f\x62\x20\x01\x4d\x52\x48\xab\xd8\x4e\x72\xc9\xe2\x1a\x40\xe7\xf8\x0e\xc6\x39\xb6\x61\xf9\x12\x14\x45\x11\x53\xcb\x59\x89\x67\x2e\xb9\x47\x72\xa5\xec\x15\x05\xfa\x35\xfa\xf5\xfa\x49\x8a\x21\xb9\x7f\x24\xcb\xb9\xb8\xe8\xf3\xe0\xb9\x7b\x61\x7b\x49\xfe\xe6\x0f\x67\x86\xbf\x21\x33\x1e\x27\xe3\x31\x9c\x6a\x55\x88\x55\x6d\x98\x13\x5a\x81\x45\xe7\x84\x5a\x59\x70\x6b\xe6\x80\x0b\x83\xb9\x93\x0d\xb0\xa2\xc0\xdc\x81\x5b\x23\x7c\x42\x89\x46\x03\xc7\x4a\xea\xa6\x44\xe5\xe0\x5f\xe7\x1f\x2f\xd2\x64\x3c\x4e\x92\x31\x7c\x40\xc7\x84\xb4\xa0\x0b\x3f\x39\xd7\xca\x31\xa1\xd0\x80\x28\xd9\x0a\xc1\x69\xa8\x2d\x82\x50\x8f\x40\xfd\x13\x70\x86\xa5\x56\x16\x1d\x3c\x17\x45\x32\x06\x54\x6c\x29\x85\x5a\x81\x41\xeb\x44\xfe\x22\x85\x1b\xfc\xa3\x16\x06\x79\x9a\x78\xcc\x2c\x01\x30\x58\x69\x2b\x9c\x36\x4d\x06\x1b\x0f\x3a\x0b\x3f\x12\x00\xc7\x56\x19\x6c\x8e\xd2\x57\xe9\x71\x02\x30\x86\x0f\x62\x85\xd6\xc1\x86\xc9\x1a\x01\xbf\xb2\xb2\x92\x98\x81\x5d\xb3\xe3\xd7\x6f\x32\x7e\x7c\xf2\xf6\xed\xc9\x6b\x3c\x7a\x7d\x94\x63\xfe\xee\x28\x7f\xc3\xde\x1e\x1d\x15\x78\xc2\xde\xbe\x63\x6f\xde\xf0\x93\xe3\x93\x23\xfe\xae\x78\xf3\x8a\xbf\x7c\x87\xaf\x8b\x93\xfc\xd5\xbb\xd7\xaf\x8f\xdf\xfc\x70\xcc\x8f\x7f\x38\x2a\x4e\xde\xa6\x70\x5e\x90\x85\x7c\x02\xc2\xc1\x56\x48\xe9\x65\x3a\x76\x8f\x50\x19\xcc\x91\xa3\xca\x11\xf4\x06\x8d\xf7\x80\xb7\x20\x75\x6c\x95\xfa\x79\xdc\xeb\x46\x16\x55\xb5\x94\xd7\x5a\x8a\xbc\xc9\xe0\xbc\xb8\xd4\xee\xda\xa0\x45\xe5\xc8\xc7\x73\xa5\xb4\xf3\xdb\x65\xc9\xa1\x8c\x73\xfa\x71\xd0\xa1\xcf\x2c\x54\x9a\x83\xc3\xb2\x92\xcc\x61\x0a\x57\x15\xad\x63\x32\x4d\xc6\xc9\x38\x28\x4b\xce\xbd\xaf\x97\x78\x2c\x58\x09\xda\xc0\xbd\x60\xe5\xc4\x6f\x13\x41\x16\x5a\x4a\xbd\xa5\x39\xac\x13\x0b\x5b\xe1\xd6\xd0\xe8\xda\xc0\xfc\xf3\xe2\xcb\xfc\xf4\xf4\xea\xb7\xcb\xdb\x2f\xe7\x1f\x92\x31\x30\xc5\xe1\xd3\xd9\xc5\xd9\xcd\xd5\x97\x9b\xab\x8b\xb3\x2f\x97\xf3\x8f\x67\x50\x08\x29\x91\x83\x50\x59\x32\x06\x10\xac\x4c\x59\xc9\xfe\xd4\x8a\x6d\x6d\x9a\xeb\x72\x66\x34\xed\x01\x33\x2a\x63\x5b\x9b\x09\x56\x66\xd9\x8f\xbb\xc8\xef\x33\x9a\x33\xfb\x71\x1f\xfa\x7d\x52\x69\x3e\x70\x48\x06\xff\xf1\x9f\xde\x47\x9c\x8b\x60\xa9\x77\x80\x64\x4b\x94\x16\x0a\x6d\x0e\xfa\xe8\xa1\x7f\x92\x31\x18\x2c\x32\x58\x3b\x57\xd9\x6c\x36\x23\x07\x19\x85\x0e\x6d\x2a\xf4\x8c\xeb\xdc\xce\x72\xad\x72\xac\x9c\x9d\xd1\x6e\x6e\x04\x6e\x67\x5b\x6d\xee\x85\x5a\x4d\xc9\x3d\x53\xbd\xfc\x1d\x73\x67\x67\x41\xf4\x8c\xf4\xbc\xf0\xbf\xb6\x2a\xde\xa0\xd5\xb5\xc9\x11\x0c\xfe\x51\xa3\xa5\xa9\xa2\x14\xce\xef\xa9\xad\x30\x17\x45\xe3\x15\x3e\xb8\xb1\xc3\x9d\x34\x11\xa8\x43\x3e\x57\xc2\xf5\xa9\xf7\xbd\x41\x42\x32\x53\x98\x3b\x90\xc8\xac\x03\xad\x10\x2a\x59\xaf\x84\x82\xca\xe8\x8d\xe0\x5d\x12\x0b\xeb\x55\x8e\x39\xa8\x84\x3b\xed\x44\x65\xf0\x6f\xff\xee\x23\x79\x0a\x8a\x95\xd8\x66\xe3\x34\x00\x4d\x0b\x6d\xa6\x6c\x6b\xfd\x0c\x08\x68\x7b\x09\xbb\x37\x33\xdb\x1c\xa5\x47\xe9\xcb\xe1\x82\xeb\xc7\x32\x23\xcc\xd9\x68\x59\x97\xf8\x51\xd7\xca\xd9\x2c\x7e\x03\x98\x42\x49\x5f\xae\x99\x5b\x67\x30\x73\xcc\xac\xd0\x75\x83\x10\x75\x0d\xa2\x2d\x79\x70\x81\x79\x6d\x84\x6b\xc8\x32\xfc\xea\xda\xba\xf5\x5d\xdb\x41\xab\x1d\x14\xf6\x17\xa3\xeb\xca\x2f\xb9\x9b\x7f\x5e\xc0\xf9\xfc\x23\xdc\x68\x89\x21\x0a\x17\x14\x32\x39\xc2\x3c\xcf\xbd\xaa\x77\xc9\x18\x2c\x22\x94\xda\x50\x79\x2c\xb4\x29\x63\x86\x33\xd7\x47\x21\xc5\x5d\x4a\x49\x13\xd2\xc7\xe7\x0e\xde\x53\x8c\x39\xb4\x6e\x56\x5b\x34\xab\x5a\x70\x9c\x09\x56\x4e\x29\x61\xac\x77\xa4\x0d\xc2\xa6\x2c\x0a\x4b\xd7\xae\x94\x89\xdd\xb5\xd1\x07\x0f\xb9\x24\x6a\x9e\xc1\xd1\xc9\xc9\x0f\xe4\x8c\x5b\x2d\xd1\xf4\xf5\xe6\xbb\x1d\xe1\xfa\x75\x3e\x2e\x28\x2d\x8b\x82\x02\xa6\x79\x12\x0e\x8b\x8b\xda\xf0\xbe\xd4\x1c\xc1\xa2\xc4\xdc\xd1\xf2\x27\x20\x29\xcd\x71\x11\x17\xb6\x68\x67\x5f\x9d\x61\x31\x6c\xec\xf7\xc1\x20\x2d\xf9\x14\x56\xb4\x96\x0d\x61\x42\xf4\x3d\x19\x2b\x06\x6d\x04\x5c\xb4\x27\x71\x5f\xb4\x28\x51\x8d\x2e\xd1\xad\xb1\xb6\x50\xa2\x33\x22\xb7\x29\x9c\xd1\x11\x89\x1c\x96\x0d\x70\x2c\x58\x2d\x5d\x9a\xc4\x41\xca\x00\x0c\xc3\x19\x38\x53\x63\xe2\xb7\xf8\x5a\xf3\x41\x39\x0f\x22\xae\x3b\x64\x3a\x7e\x76\x8b\x6a\x42\x49\xd2\x8b\xa6\x12\x68\x73\xc3\x2a\xcc\x60\x44\xa8\xa3\x03\x13\x2a\x6d\x5c\x06\xa3\xb7\x2f\xdf\xbe\x3e\x38\xec\x53\x71\x34\x8b\x8a\x8e\x42\xdd\xb2\x8e\x49\x09\xa7\x37\x1f\x2c\x30\x0b\xac\x2b\xcc\x8f\x58\x29\xc2\x02\x9a\xdf\x9a\x17\x48\xcd\x99\xe2\x44\x41\x7a\x97\x4f\x0d\x12\x0e\xef\x08\x4e\x20\x2c\x71\xfa\x35\x33\xac\x44\x47\xb5\xb2\xdd\xb4\xbb\x28\xe4\x0e\x7e\x62\xf9\x7d\x5d\x2d\x9c\x36\x6c\x85\x17\x3a\x0f\x47\xa0\x3f\xe7\xfc\xb6\x2d\x14\xab\xec\x5a\xbb\x76\x68\x42\x88\x34\xcc\xfa\x33\x88\x32\x10\xcd\xae\xf0\x7c\x48\xbc\x42\xa9\x3a\x95\xba\xe6\x7d\xb9\x5d\x22\x9d\xbb\x44\x27\xe0\x39\xa6\xab\x14\xd8\xd6\x4e\x80\xfd\x59\x1b\x9c\xc0\x2a\xaf\x5e\x10\x6b\x68\x67\x67\x71\x6b\x9f\x6c\x4a\x0a\x0b\x44\xbf\xb6\x2d\x33\xa1\x14\x77\x07\x1d\x91\xa7\x19\xab\xc4\xd4\x35\x15\xda\xd9\xd2\x83\xd8\x00\x22\x23\xc8\x2c\x01\x58\x1e\x42\x0f\xb1\x33\xf6\x25\x96\x4e\x0e\x52\xc8\xff\x1e\x19\x62\x58\x04\x11\x0e\x5a\x3c\xd8\xae\xd1\xb4\xa3\x16\xec\x5a\xd7\x92\xc3\x12\xfd\x44\xe4\x9e\x67\xb1\x0e\x54\x69\xd7\xfa\x81\x4f\xa2\x40\xf6\x38\xb4\x90\x92\xa0\x72\x83\x3e\x24\x3c\x9b\xe9\xf4\x1a\x45\x6f\x8d\x86\x59\xda\x1d\x12\x11\xbc\x3f\x11\x07\x16\xb5\xfe\x7e\x4c\x6e\xbb\xc8\x2b\xaf\x4b\xe1\x1c\xf2\x88\x77\xb7\x13\x0c\x69\x3b\xf3\xae\xd3\xd5\x07\x01\x85\x3b\x32\x9e\xb6\xe9\x14\xf7\x3d\x40\x2c\xeb\xfc\x1e\xdd\x41\x17\x87\x11\xa2\x15\xe4\xbc\xce\xa9\x42\x0d\xc9\x34\xa1\x84\x99\x2d\x62\xce\x4e\xd1\x38\xca\x36\xa1\xd0\x7a\x87\x5a\x7c\xf3\x0a\x50\xe5\x9a\x23\x87\xd3\x39\x2c\x6b\xc5\x65\x47\xeb\xb7\x6b\x54\xb0\x41\x23\x8a\x86\x02\xf7\xf6\x62\x41\x2c\x44\x61\xde\x9d\x1d\xa4\x4e\xe7\x06\x2f\x26\x08\xe9\xfd\x8a\x85\xf8\xda\x1a\x11\xda\x0f\x6d\x1a\xa8\x15\x39\x7b\xbb\x16\xf9\x1a\xa8\x42\xb4\x25\x95\x39\xf6\x20\x36\xfc\x7e\xc6\x0e\x23\x18\xb4\xbf\x93\x41\x4a\x2b\x73\x48\x15\xa3\x6a\xd3\xc0\xbf\x44\x0e\xbb\xfb\x42\x99\x02\x52\xa8\x7b\x60\x4b\xbd\xc1\x08\x40\xfb\xce\xfb\xbe\xa7\xe5\x46\x33\x1d\x85\x42\x21\x50\xf2\x90\x8f\x9e\x34\xef\x79\xc0\x8b\x88\xc7\xaf\xe7\x24\x06\x57\x83\xcc\x01\x7b\xf2\xb3\x36\x39\x12\x79\x59\xb8\x46\xe2\x60\xe0\x37\x23\xbb\xbf\xee\x4b\xfb\x2b\x36\xe7\x3c\xeb\x61\x02\x2f\x0c\xc7\x79\xfb\xf5\x76\x8d\x70\xfe\xa1\x8d\x0d\x5b\x2f\x6d\x6e\x84\xd7\xb4\xa5\x8c\xb4\x77\x7e\x2c\x06\x70\xa4\x0d\x13\x10\x05\x70\x51\x14\x68\xa8\x55\x2b\x8c\x2e\x43\x8f\x27\x6b\xeb\xd0\xfc\xcf\x7f\xfd\xb7\xdd\x81\x4b\xe1\xf9\x9c\x4a\x15\x68\x25\x9b\x17\x9d\xce\x83\x19\x03\x5d\xa3\xac\x48\x87\xba\xcf\x55\xbd\x94\x22\x1f\x5a\x79\x39\x08\xec\x5f\x4e\xaf\x21\x72\x9b\x56\xc9\x5d\x3a\x20\xec\x63\xc9\x98\xc2\x22\x52\x6c\xb7\xc6\x4e\x89\x3d\x2c\x5f\x82\x44\x41\x9b\x06\x5b\xd6\x83\x13\xcf\x97\x9a\x71\x10\x1c\x95\x23\x3a\x13\x33\x93\x14\x0b\x9b\xdb\xfa\xf0\x1e\x1b\xea\x7e\x30\x7d\x4e\xca\xee\x7a\x22\x48\xeb\x4c\xfe\xeb\xf2\x7d\xf8\xbc\x79\x6a\xfd\x8e\x54\x27\xa2\x0c\x0b\xf8\xe6\x20\xfe\x5f\x55\xf0\xb0\x0a\x5a\xc0\xfd\x12\xde\x7e\xb7\xc0\xa8\xf6\xf8\x23\x8d\xfa\xe1\x07\xc5\xe7\xbb\xeb\xeb\xbe\xc0\xbf\x6d\x5d\xfd\x87\x2a\x0f\xbe\x61\xe9\xcb\x83\xff\x93\x55\xc2\x89\x12\x75\xed\xb2\x7e\xc6\x5e\xe6\xfb\xaf\xdf\xc8\xfc\xb0\x55\x7b\x8e\x7d\x78\xec\x3e\xbd\x04\x9c\x17\xb1\x97\x15\xb4\x9a\x49\xab\x5b\x07\xd8\xfd\xcd\x39\x1c\x7d\x69\x98\x94\xee\x98\x74\xe7\xb4\x57\x8a\x4a\xfb\x5e\x91\xf1\x96\x3e\x2c\x32\xe1\xf3\x81\xc8\x1e\xc7\x3d\xa7\x66\x3d\xe6\xe0\xed\x1a\x2d\xfa\x68\x0d\xb4\x6d\x2a\x71\x83\xb2\xbf\x1a\xab\x98\xa5\xa8\x61\x16\x4e\x2f\xce\xa1\x90\x6c\xd5\x9d\x6d\x77\x21\xf5\xe2\xc2\x3b\xc8\x75\x59\x32\xc5\xd3\x78\x60\x79\xf8\xda\xa2\x6d\x29\x6c\xb8\x86\xb2\xe4\x56\xb7\xc6\xe6\x99\xc1\xc0\x65\x82\x04\xa1\x26\x60\x3d\x70\xe3\xed\x03\x85\xe8\xdb\xf8\x25\x02\x7e\xad\xa4\xc8\x85\x93\x4d\xef\xe0\x50\x04\x62\xd1\x0a\x17\x3b\x0c\x94\x56\xd3\x1d\x69\xa9\x0f\x84\x7d\x4d\xf7\x14\xf2\xd6\xaf\xf5\x56\xc5\xbb\x3a\x0f\x4d\xd6\x20\x75\x36\x4b\x94\x7a\x1b\xae\xac\xa6\x07\xfe\xf3\x03\x8f\x08\xc8\xe0\xa8\xec\xb9\x62\xa3\xf2\x6b\x34\x42\xc7\x3d\x7a\x7c\xcd\xda\xdf\xf2\x59\x27\xf2\xdb\x61\xac\x3f\xba\x80\x0a\x86\xad\x58\x8e\x76\x52\xa1\xb1\xc2\x3a\x54\x2e\x56\xbe\x07\x5f\x72\xc9\x44\x69\x27\x16\x73\x83\xce\x4e\x42\xc4\x95\xac\xa2\x4f\xbe\x46\xb7\x8d\xf3\xc4\xdf\xd0\x18\xa6\x56\x84\xa2\xb9\x8d\x5a\x69\x83\xed\x6d\xce\xb5\x11\xda\x08\x27\xd0\xfe\x85\x86\x05\x93\x16\xfb\xf5\x57\x4a\x36\x1f\x35\xc7\x18\x83\x83\xde\xe1\x1e\x9b\x59\xb8\xad\xac\x98\x08\xb7\x39\x6d\xe1\x62\x16\x50\x6d\x84\xd1\xca\xdf\x9e\x6e\x98\x11\xd4\x24\x51\x12\x12\x51\xb2\x30\x9a\x7f\x5e\x7c\x39\xbd\xf8\x6d\x71\x7b\x76\xe3\xef\xcb\x32\x78\x46\x35\x26\x26\x6c\xca\x75\xc9\x84\x4a\x9d\xe4\xcf\xa8\x49\xf3\xcd\xe8\x99\xda\x7c\x62\x26\x5e\x26\xf9\xae\x84\x82\x18\x2c\x56\xcc\x78\xbe\x2c\x85\x75\x54\x45\xa2\x65\x05\x32\x47\x19\xe8\x13\x21\xed\x0d\xc4\xb2\x72\x4d\x02\xed\xb8\x8d\x96\x2d\x90\x8e\x88\x55\x4c\xaa\xc1\x8d\x5c\xa5\x79\x0a\x1f\xda\xd5\x42\x15\x3a\x85\x2b\xb7\x46\x03\xa1\x52\xda\x0c\x38\x2e\xeb\xd5\x04\xb6\xcc\x10\x49\x99\x00\x1a\xa3\xcd\x04\x0a\xe6\x98\x9c\x40\xc5\x94\xc8\x29\x2a\xa5\x5e\x5d\x10\xfa\x9e\xc4\x70\xa9\xf2\xb8\x48\x87\x5f\xdd\xae\xc8\x0c\x7e\xb7\x5a\x45\xc8\x9f\xfd\xf2\x6c\xaf\xc5\x0c\x81\x3c\x7b\x78\xfa\x1d\x6c\x34\x77\x9a\xfa\xc1\x1e\x47\x7d\xba\x9b\xbc\xb0\xc8\x2c\x59\x1e\xa2\xe8\xf3\x1a\xbd\x5a\x4e\xc7\xae\x65\x78\xb1\x60\xb4\x44\xdf\x70\xfa\x5f\x96\x42\x05\xf6\xa1\x61\x25\x36\xe8\xe9\x72\x85\xa6\x14\xd6\x0e\x59\x78\x97\x20\xf4\x21\x00\x91\x9d\x01\x3d\x36\xd3\x8f\x4b\x8e\xf1\xf3\x88\x44\x5e\x0a\x25\xac\x33\xcc\x69\xb3\x2f\xbb\x2b\x84\x11\x62\x3e\x9c\xdc\x35\xf1\x70\xde\x5f\x81\xd1\x61\x5a\x87\xb7\x87\x5f\xbb\x5b\xd8\x07\x5c\x2d\xfa\x82\x8a\x6b\x9a\xec\x53\x2b\x88\xe9\x17\xce\xf4\x3d\x1b\x87\xcc\x83\x0d\x2f\x3d\xa2\x1a\x03\xf9\xa1\x42\x0c\x33\x70\xd9\x1c\xbe\xe2\x99\x84\x66\x25\x19\xb7\x67\x68\xe4\xd6\x24\xdc\x93\x46\x26\x7b\x86\x97\xef\xb6\xfd\xe7\xf3\x8f\x9d\x59\x8d\xae\x9f\x6d\xd0\x5f\x0e\x3a\x88\xd7\x89\xed\x6e\x0d\xa0\x76\xa3\x84\xb5\x8a\xf6\xe7\x77\x5b\x2e\xbc\x15\xe1\xda\x59\x17\x43\x49\xa1\xc0\xf7\x88\xa9\x4f\x1b\xa7\x43\x9d\x02\x51\x4c\xbc\xec\xf8\x60\x32\x79\xf8\x6e\xe0\x01\xee\xe9\x77\xa7\x5b\x5b\xbc\x80\x43\x16\x0f\xf2\x2f\x01\x52\x6e\xe1\x15\x1e\xc4\x5d\xcb\xf3\x19\x75\x6b\x53\xfc\x2a\x2c\x25\x4e\x6b\xd8\x73\x51\x00\x53\xcd\x8b\xbd\x97\xa4\x2e\xa8\xc3\xab\xcb\x9a\x3d\x70\x01\xc5\x28\xba\x1d\x17\xef\x18\x3d\x6c\x14\x5b\xa1\x51\xb7\xf0\x7a\x44\x1d\x67\x64\x1f\xa1\xdb\xdc\xd5\x20\xe8\xe7\x79\xd2\x5d\x67\xd6\x1d\x88\x70\xe7\x4d\xd6\xf9\x4c\xbd\xdb\xc5\xa6\x09\xa1\x5e\xd2\xe1\x2c\x86\xc4\xab\x7d\x45\xa3\x73\xd7\x63\xe8\x22\xb0\xc4\x07\xae\xa5\x2e\xc3\x47\x3a\x21\x9e\xc6\x25\x1d\x6f\xfc\xff\x3a\x50\x3e\x9c\xff\x72\x7e\x3b\xbf\xb8\x3a\x3d\x9b\x5f\x7e\xb9\xbd\xfa\xf5\xec\x32\x83\x1f\x49\xa1\xe9\x3d\x36\xef\x47\x29\x7c\x0a\x04\xa2\x25\xd8\xbb\x5e\x0a\xca\xa5\x07\x8f\x9a\x43\xb5\xe6\xe0\x5d\x13\xe4\x26\x30\xd1\x10\x9a\xff\xf2\x1e\xb8\xf6\xb4\x29\x2e\x62\x1d\x99\x89\xcd\x5f\xbb\x30\x89\x70\x67\x3b\x37\xa2\x87\xe4\x1e\xee\x91\x0e\x08\x16\x96\xa0\xfa\x5e\x24\x1e\x76\x49\xc7\xa1\x77\x65\xed\x0a\x0b\xe5\xc2\x3b\x26\x70\x9b\xfe\xf5\x33\x4d\xc2\xe0\x8d\xff\xde\xb2\x85\x24\x4c\xcb\xc2\x0d\x6d\x68\x07\xe3\x9b\xc6\x86\x99\x99\x14\x4b\xff\x50\x25\xd1\xcd\x22\x3b\xa9\x8c\xd8\x08\x89\x2b\xd2\xa0\x65\x1c\xe1\xfe\xb7\x0a\x44\xa5\x81\x5c\x32\x6b\x43\x87\xb5\x77\x97\x7e\xb3\xaf\xd4\x4e\x7a\xb4\x00\xa7\xb4\xfe\xd2\xbf\xa0\xc4\x58\x7b\xca\xcb\xd6\xbe\x8c\x47\xae\xc9\xfb\x9e\xa6\x0f\xe9\x6f\xbc\x4b\x7c\x5b\xf3\x07\x0f\x13\x84\x76\xf8\x1d\xe0\xdb\x40\x0f\x1f\x02\xf6\x91\xf6\x9e\x02\xbe\x1b\x6e\xf8\x16\x10\x38\xcc\xff\xfd\x41\xaa\xe5\x40\x4f\x7e\x92\xa2\x85\x7f\xe7\x47\x29\x5f\xbf\x0e\x3c\x4b\x1d\x7c\x98\xfa\x29\xde\xed\xe4\x6b\xe4\x35\x99\xd1\x25\x70\x9a\x8c\xe1\x6c\x95\xd1\xb9\xd9\x0e\xfa\xa7\x67\x28\x9b\x50\x03\xc2\x5f\x00\xf1\x65\xb8\xfb\x93\x66\xa0\xda\x64\x50\x68\x1d\xbf\xb5\x08\x19\x8c\x5e\xc2\x4b\xf8\x67\xfa\x7f\x14\xc7\xda\xf7\x89\x7e\xbd\x73\x32\x83\xd1\xf1\xab\x97\xeb\x51\xf7\x4d\xa8\x5c\xd6\x1c\xf9\x65\xd7\x94\x0c\xe4\x4d\xbd\xa8\x5e\xcd\x58\x0b\xe3\x8e\x86\x7f\x9d\xf1\x91\x55\xb6\x37\x29\xef\xbe\x05\x98\x50\x14\xa6\xb1\x91\x98\x32\x7f\xdd\x3a\x8d\xf7\x06\x51\xd0\xbe\x99\xfd\x15\x51\x7c\x70\x6d\xaf\x19\x46\xa3\x03\x73\x62\xd9\xf1\xe1\xab\x0d\x9e\x3b\x2c\xe7\x5e\x4a\x9c\xcb\x99\x63\x3d\xf6\xc1\x77\xdd\x3d\x25\xd7\x28\x2b\x34\xd9\xe6\x28\x3d\x49\x8f\x92\x81\x45\xc1\xfc\x21\xc3\x7e\x9c\x26\xef\x72\xec\xff\x0d\x00\x00\xff\xff\x62\x21\xfd\xa4\xcf\x22\x00\x00"),
 		},
+		"/charts/components/web-ui": &vfsgen۰DirInfo{
+			name:    "web-ui",
+			modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+		},
+		"/charts/components/web-ui/.helmignore": &vfsgen۰CompressedFileInfo{
+			name:             ".helmignore",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 349,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x41\x6e\xe3\x30\x0c\x45\xf7\x3c\xc5\x1f\x78\x33\x63\x0c\xe4\x43\x24\xb3\x98\x55\x0b\xa4\xc8\xb6\x90\x6d\x46\x62\x22\x8b\x82\x44\x27\x6d\x17\x3d\x7b\x91\x04\x41\xbb\x79\x20\x3f\xc8\x8f\xd7\xe1\xd9\x9b\x71\xcd\x0d\xa6\x90\x90\xb5\x32\x2e\x91\x33\xc6\x55\xd2\x2c\x39\xa0\xf8\xe9\xe4\x03\x37\x47\x1d\x5e\xa2\x34\xb4\xb5\x14\xad\xd6\xd0\x22\xa7\x84\x90\x74\xc4\xe2\x6d\x8a\x92\xc3\x5f\x54\x4e\xde\xe4\xcc\x28\xde\xe2\x8f\xdc\xe7\x99\x3a\x64\x0e\xde\x44\x33\x7e\x97\xca\x07\x79\xe3\x19\x17\xb1\x88\x5f\x7f\x1c\x9e\x72\x7a\x87\xe6\xdb\xe7\x55\x09\x85\x2b\x92\x64\x76\xe4\xb6\xbb\xd7\x9d\x69\x65\xea\xb0\xd1\x65\xd1\x8c\xfd\x66\x87\x59\x6a\x23\x17\xc4\x86\x1b\xef\xfa\xe4\xc6\x8f\x3a\xdc\xf8\x08\x62\x18\xae\x78\xac\xed\x9c\x87\xef\xa2\xd1\x4f\xa7\xb5\xe0\x20\x89\x1b\xf5\xae\x5d\x0a\xf5\x6e\xf4\x27\xea\x9d\x2d\xd7\x59\xab\x04\xea\x3f\xa9\xc3\xde\x57\xd1\xb5\xe1\xff\xf6\x5f\x23\x57\xaa\x1e\x79\x32\x72\x32\xb3\x1f\xee\xe7\x55\x8f\xe4\xce\x6d\xd2\x99\x07\xfa\x0a\x00\x00\xff\xff\x16\xec\x32\x27\x5d\x01\x00\x00"),
+		},
+		"/charts/components/web-ui/Chart.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "Chart.yaml",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 176,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\xb1\x8e\xc3\x20\x10\x05\x7b\xbe\xe2\xfd\x80\x2d\xfb\x4a\x77\x57\xbb\x77\xbf\x98\xbd\x33\x0a\x66\x57\xb0\x20\xf1\xf7\x51\x22\x45\x4a\x3b\x53\xcc\x90\xc6\x83\x4b\x8d\x92\x37\xf4\x1f\x97\xe9\xe6\x0d\x17\x53\x48\x74\xab\x0b\x5c\xcf\x12\xd5\xde\xfa\x37\x83\xa9\x8e\xc9\x64\x6a\x95\x41\x39\xa0\x73\xa9\x64\x31\x31\x02\xd5\xcb\x0b\x95\x80\x3f\x29\xd8\x9b\xe7\x92\xd9\xb8\xc2\x17\x69\xff\x97\xc1\x04\x43\x1a\xfc\xc0\x1e\x73\x97\xf4\x98\x9d\x0d\xe5\x0d\xa4\x9a\xe2\x49\xaf\x86\x73\xfd\xf3\xb2\xcc\xeb\xbc\x38\x52\x3d\xbe\xc9\xea\x9e\x01\x00\x00\xff\xff\xa7\x66\xa5\x08\xb0\x00\x00\x00"),
+		},
+		"/charts/components/web-ui/templates": &vfsgen۰DirInfo{
+			name:    "templates",
+			modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+		},
+		"/charts/components/web-ui/templates/_helpers.tpl": &vfsgen۰CompressedFileInfo{
+			name:             "_helpers.tpl",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 1792,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x4d\x6b\xdb\x40\x10\xbd\xeb\x57\x0c\x4b\x03\x49\x8a\xd6\x87\x42\x0f\x81\x1e\x42\xda\x43\x69\x49\xa1\x86\xf4\x58\x56\xab\x51\xb4\x74\xb5\x52\xf6\xc3\x8d\x91\xfd\xdf\xcb\x7e\x58\x96\x65\xd9\x75\x6e\x8b\xf5\xf6\xcd\x7b\x6f\x66\xd6\x7d\xbf\xb8\xcd\xbe\xbc\x76\x4c\x95\x60\x6b\x04\xc5\x1a\x84\xb6\x0a\x67\x5e\x33\x6d\x69\x76\xbb\xd8\x6e\xb3\xbe\xcf\xa1\xc4\x4a\x28\x04\x52\x23\x2b\x25\x6b\x3a\xea\xc1\x04\xf2\xfd\x67\xe6\xa4\x05\xfa\x10\xee\x3d\x7a\x26\xfa\xc4\xa4\x43\x13\x90\x3f\x56\xa8\xb5\x28\x11\x36\x60\xb5\x53\x1c\x3e\x7e\x08\x47\xd1\x2c\x5d\x55\x89\x57\x20\x39\x81\xc4\x85\xaa\xf4\xc7\x2c\xc8\x7b\xd0\xc8\x2c\x02\x1b\x2a\x54\x4e\xca\x35\xbc\x38\x26\x45\x25\xb0\x04\xd6\x75\x41\x38\xcd\x7e\x61\xe4\x0e\x78\xeb\x2b\x78\x13\x06\x0a\xe4\xcc\x19\x04\xd3\x36\x08\xdf\x5c\x81\x5a\xa1\x45\x13\xed\x56\x02\x65\x69\x80\x69\x04\x29\x1a\x61\xb1\x04\xdb\x82\xad\x85\x81\xeb\x62\x1d\xa2\xf8\xfc\xb8\xf4\x58\xa1\x9e\xc1\x74\xc8\x6f\x68\xf6\xb5\x02\x8d\x12\x99\x49\x99\xf1\x56\x59\x26\x94\x89\xa9\xc5\xdf\x84\x85\xbf\x42\x4a\x28\x10\x9c\xf1\x3a\x0d\xb0\x20\x3e\xa9\x3d\x9d\xac\x07\x1d\xa6\x2b\xaa\x21\xcc\xdd\xc7\x21\xd0\x04\x39\xf9\xfd\x92\xc0\xa5\x19\x78\xde\x05\xf1\x77\x9f\x2e\xef\xe8\x5e\xe3\x10\x43\x24\xa1\x3f\x63\x46\xf1\xee\x4e\xe7\xc1\x8f\x6f\x14\xd7\x69\xa1\x6c\x05\xe4\xca\xe4\x57\x86\x4c\xb8\x62\xd1\xcb\xe7\x6b\xfe\x78\x30\x75\xa3\x76\xfa\x1d\x59\xa1\x36\xa2\x55\xbe\x95\xa1\xa5\x69\x3e\x22\x4a\xb2\x02\xe5\xb9\xb6\x06\xd8\xbe\xa7\x53\x2f\xe3\x98\xe3\xf9\x29\x95\xdb\x80\xc6\x4e\x32\x8e\x40\xde\x13\x20\xbf\xc9\xdb\x97\xa8\x6d\x9a\x56\x45\x89\xe6\x8c\xc4\x08\x88\x1a\x6b\x94\x0d\x35\xf5\x22\xc8\xbe\x83\xbe\x07\xa1\xb8\x74\xe5\x8c\x25\x1a\x8b\xce\x00\x0c\x4a\xe4\xb6\xd5\xdf\x13\x31\x1d\x4d\x4b\x72\x79\xdf\x75\x3b\xa3\xdb\x6d\xc6\xba\x8e\xfe\x19\x56\x94\x8a\x76\x91\x42\x0f\x0a\x8e\xaf\x6c\xe0\xc5\xb5\x16\x27\xae\x8f\x59\x1a\xa6\xd8\x33\x96\x79\xb1\x8e\x44\xbb\xc9\x59\xa2\x5e\x09\x3e\xbd\x1f\x53\x5b\x26\xf1\xff\xcf\x6d\x6a\x33\x9f\xd5\xe0\xe7\xe8\x44\x90\x71\xdd\xe9\xbc\x76\xa1\x8c\x65\x8a\xe3\xa1\xf2\xf1\x52\xcd\xcd\xee\xf4\x41\x37\xc9\x29\xe3\xbc\x75\xca\xfa\x57\xce\x19\x3c\x6b\x2a\x5c\xb8\x8f\xf8\xc7\x53\x0f\xd2\x21\x8c\xf2\x58\x7d\xf2\xb7\x70\x7d\x6c\x79\xff\xca\xd1\x9b\x53\x64\x6a\xec\x71\xf4\x0e\xec\x68\x49\x3a\x90\x8b\x08\x8e\x76\xfd\x5f\x00\x00\x00\xff\xff\x9f\x46\x7b\x85\x00\x07\x00\x00"),
+		},
+		"/charts/components/web-ui/templates/deployment.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "deployment.yaml",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 2075,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x55\x4d\x6b\x1b\x3d\x10\xbe\xfb\x57\x0c\xbe\xef\x9a\xbc\xbc\x94\xb2\x90\x43\x48\xa0\x14\x42\x31\x4d\x1b\xe8\x71\x22\x8d\xed\xa1\x5a\x49\x48\xb3\x69\x8d\xe3\xff\x5e\x94\xf5\xda\x92\xbd\x4e\xdb\xb4\xd0\x3d\xce\xa3\xe7\x63\xa4\x91\x16\x3d\xdf\x53\x88\xec\x6c\x03\xe8\x7d\x9c\x3d\x5e\x4c\xbe\xb2\xd5\x0d\xdc\x90\x37\x6e\xdd\x92\x95\x49\x4b\x82\x1a\x05\x9b\x09\x80\xc5\x96\x1a\xd8\x6c\x80\xad\x32\x9d\x26\x98\xae\x08\xb5\xc1\xd6\xd7\x8b\xce\x98\x04\x4f\xa1\x86\xed\x76\x02\x60\xf0\x81\x4c\x4c\x2c\x80\xcd\xa6\x1a\xa1\xf4\x2b\x12\xe1\x09\x2c\x5b\x4d\x56\xe0\xff\x44\x8e\x9e\x54\x22\x46\x32\xa4\xc4\x85\x5e\xa4\x45\x51\xab\xdb\x4c\xf5\x9c\xee\x40\xbb\x1d\xd1\x7f\xd3\x87\x13\x6a\xbd\x41\xa1\x9d\x72\xd6\x62\x2f\xfa\x8d\x65\x05\xf5\x3d\x9a\x8e\x62\xed\x9d\xbe\xb2\xd6\x09\x0a\x3b\x1b\x7b\x81\xf4\xe1\xa1\x38\x04\xea\xd9\xe2\xbe\x60\x6b\x0a\xdf\xb7\x03\x2d\xe1\x64\xf5\x41\xc5\x14\x1d\xbd\xa6\xa7\xbd\xf6\xb0\x6f\xa3\x5d\x70\x8b\x4b\x9a\x77\xc6\xdc\x91\x0a\x24\x59\x1f\xc7\xc8\xaf\x37\x33\xd2\x4e\x24\xd5\x05\x96\xf5\xb5\xb3\x42\xdf\x65\x5c\xeb\xb0\xb1\x77\xe5\xf2\x71\x13\xe5\xac\x20\x5b\x0a\x59\xb4\xea\x30\x8c\xf5\xf5\x0a\x83\xd4\x1f\xb0\xa5\x03\xe7\xc5\x2c\x67\xf2\xc4\xb3\x61\x2e\xfe\x2b\x95\x9f\xb7\xac\x81\x69\x72\xcf\xf7\xb7\x0e\xe4\x5d\x64\x71\x61\x0d\xdb\x6d\x73\x02\x0b\x2e\xe1\x09\x34\x2d\xb0\x33\x32\x04\xbf\xf2\x7e\x77\x0d\x61\xbb\x9d\x1e\xbb\xa4\x83\x99\x3b\xc3\x6a\xdd\x37\x5b\xe8\xf9\x3d\x58\xe6\xc3\xb0\x8c\x79\xbb\x15\x54\x6c\x2b\x65\xba\x28\x14\xca\xba\x37\xdd\x92\x6d\xac\x34\x87\xcb\xd9\x30\x6f\xb3\x5d\x75\x36\x29\x37\x8c\x17\xfb\x00\x8e\xb5\x2a\x4d\x2b\xa8\x52\xb1\x52\x86\xc9\x4a\xc5\xfa\x32\xcb\x9b\x90\xba\x47\xde\xdf\xbc\xc8\x8b\xcf\x53\x78\x86\xdb\x8f\xe8\x38\x9f\xb5\xaf\x38\xc6\x8e\x42\xd5\x05\x73\x22\xd0\x43\x9f\x3f\xde\x96\xec\x93\x09\x4e\x9f\x77\x41\x62\x39\x2f\xc3\xc0\xad\x44\x7c\x01\x64\xf3\x39\x77\x41\x8a\x53\x8a\x14\x1e\x59\xa5\x73\x0f\x4b\x92\x04\x97\x3e\xcf\x5e\xc1\x89\x53\xce\x34\xf0\xe9\x7a\x9e\x61\x86\x1f\xc9\x52\x8c\xf3\xe0\x1e\xa8\xcc\x92\x32\xbc\xa3\xa3\x81\x06\xf0\x28\xab\x06\x66\xc7\xd5\xdf\x0d\x15\x08\x35\xff\x23\xe7\xe8\xba\xa0\x28\xfe\xf4\xaa\xee\x57\x9e\xb9\xa4\x27\xcf\x9f\x75\x9a\xee\x76\x8f\xe8\x61\x59\x5e\xfd\xa3\x67\xef\xc4\x0f\x17\x0b\xb6\x2c\xd9\xbd\x1c\x2a\x7f\xd7\x47\x9c\xa1\x70\xfc\x67\xca\x8a\xaf\x74\xfb\x11\x00\x00\xff\xff\x9d\x64\x47\x02\x1b\x08\x00\x00"),
+		},
+		"/charts/components/web-ui/templates/ingress.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "ingress.yaml",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 1054,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\xc1\x8a\xdb\x40\x0c\x86\xef\x7e\x0a\x11\x7a\xcd\xb4\x81\x3d\x14\xc3\xf6\xb2\x87\x52\x0a\xa1\xa7\x85\x1e\x65\x5b\x89\x45\xc6\x1a\x77\x46\xce\x16\x5c\xbf\x7b\x19\x8f\x4d\xec\x4d\xcc\xde\x66\xa4\xef\x97\xf4\xcb\x9e\xbe\xdf\x03\x9f\xc0\xbc\xa2\xed\x28\x18\x96\xb3\xa7\x10\x0c\x09\x16\x96\x2a\xd8\x0f\x43\x16\x91\x4f\xa7\xce\xda\x23\x36\x04\xf9\x33\xb0\x94\xb6\xab\x08\x76\x35\x61\x65\xb1\x69\x4d\xcc\x0a\x36\xb4\x03\x73\x93\x84\x6b\xf9\xcb\x79\x8d\x8a\xb9\x7c\x20\x7f\xe5\x92\x4c\x1b\xe3\x33\xc8\x27\x08\xd4\x5c\xc9\xbf\xb8\xa6\x45\x4f\xb0\xfb\xf6\x7c\x30\x87\xa7\xfd\x97\x1d\x98\x17\x6c\xb1\x60\xcb\xca\x14\xcc\xcf\xae\xa0\x57\xf2\x81\x9d\x98\xef\xac\xd3\x71\x2c\x84\x2d\x4f\xd7\x1c\x84\xf4\xcd\xf9\x0b\xcb\xd9\x5c\xbe\x06\xc3\xee\xf3\xf5\x50\x90\xe2\x61\x6c\x47\x36\xd0\x9d\x84\xfe\x2a\x49\x3c\x86\x35\x2b\x15\x0c\x43\x76\x61\xa9\x72\xf8\x91\x76\x93\x35\xa4\x58\xa1\x62\x9e\x01\x44\xd3\x39\xf4\xfd\x62\x41\xc3\x90\x01\x58\x2c\xc8\x86\x48\x00\x8c\x1e\xef\x56\x96\x88\xb8\xb0\x7f\x20\x2c\x15\x89\xc2\x53\x12\x47\xc1\x1b\x6b\x7d\xf7\x55\x50\xc4\x29\x6a\x1c\x33\x91\x8b\xc0\xad\x97\xba\xdf\xd8\xd8\xad\xc2\x93\xa5\xd0\x52\x99\x4f\xa1\x07\xdf\x5f\xed\xd4\x41\x97\x2e\x3c\xca\x99\xb6\x59\x80\x3d\xd4\x2e\xe8\xa4\x78\xa7\x1a\x33\x33\x98\xe0\xbe\x1f\xa7\xfc\xd3\x39\xa5\x65\x66\x31\x67\x0a\x04\x2a\x3d\xe9\x71\x5e\xb6\xb9\xdd\x67\x66\x25\x59\x5d\x7c\x67\xe9\x43\x0f\xab\xe1\x92\x8b\xd4\x29\x9e\xee\x47\xac\x55\xdb\x9b\xc9\x16\xb5\x5e\x78\x5e\xf5\x19\x73\x4b\x6f\xb1\x7c\x0c\xa6\xf2\xeb\x0c\x40\x81\xe5\x85\xa4\xca\x57\xc1\xe8\x7f\x7c\x37\xc7\x8d\xbf\xed\x01\x1a\x5f\x5e\x42\xe7\x67\xb8\x22\xdf\x6d\x78\x6b\x7b\xff\x03\x00\x00\xff\xff\x36\xe9\xb3\x7e\x1e\x04\x00\x00"),
+		},
+		"/charts/components/web-ui/templates/service.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "service.yaml",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 392,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\xc1\x4e\x43\x21\x10\x45\xf7\x7c\xc5\x4d\xf7\x25\x31\x71\xc5\xd6\xad\x8b\x26\x9a\xee\x47\x18\x2d\x71\x1e\x10\x98\xd7\xc4\x60\xff\xdd\x20\x35\xdd\xf4\xc9\x0e\xee\x39\xb9\xcc\x50\x89\x47\xae\x2d\xe6\xe4\x70\x7e\x30\x9f\x31\x05\x87\x17\xae\xe7\xe8\xd9\x2c\xac\x14\x48\xc9\x19\x20\xd1\xc2\x0e\xbd\x23\x26\x2f\x6b\x60\xec\x4e\x4c\x41\x68\x29\xf6\x7d\x15\x19\xf1\x0e\x16\x97\x8b\x01\x84\xde\x58\xda\xb0\x80\xde\xf7\x77\x94\x49\x0c\xe1\x1b\x29\xa6\xc0\x49\xf1\x38\xe4\x56\xd8\x0f\x51\xbf\xca\xac\xb3\x47\x92\x95\x9b\x6d\xf3\x4f\x76\x04\xb3\xa5\xe4\xaa\xd7\x92\xfd\xef\xe5\x2e\x3f\x82\xc9\x8f\xa3\x54\x3f\x58\x0f\x5b\xf0\x2d\xbe\x29\xa5\x66\xcd\x3e\x8b\xc3\xeb\xd3\xe1\xfa\x36\x97\x71\x52\x2d\x06\x68\x2c\xec\x35\xd7\xff\xe6\xfd\x63\x9e\xb7\xe6\xfe\x09\x00\x00\xff\xff\x25\x3b\x95\xee\x88\x01\x00\x00"),
+		},
+		"/charts/components/web-ui/values.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "values.yaml",
+			modTime:          time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
+			uncompressedSize: 1405,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x4d\x6f\x1b\x47\x0c\xbd\xcf\xaf\x20\xec\x43\x2e\xd1\xda\x0e\x82\x20\xd8\x9b\xe1\xa0\x85\x01\xdb\x31\xea\x7e\xa0\x08\x72\xa0\x67\xb9\xd2\xd4\xdc\xe1\x86\xe4\xc8\x5e\x14\xfd\xef\xc5\x8c\x24\xbb\x49\x53\xa0\x27\xcd\xf2\xeb\x3d\xf2\x91\x3a\x86\x0f\x34\x62\x61\x87\x2d\x72\x21\x83\x51\x14\x36\x84\x03\xe3\x34\x77\xe1\x18\x7e\xde\x24\x83\x64\x80\xf0\xfb\xf9\xf5\xd5\x6a\x14\x9d\xd0\x9d\x06\x18\x13\x53\x0d\xf8\x40\x91\x51\x09\xb6\xa8\x09\xef\x99\x0c\x5c\xe0\x9e\x60\x46\x33\x1a\x20\x65\x17\x58\xa4\x28\x38\x4d\x33\xa3\x93\x75\x21\x28\xcd\x9c\x22\x5e\x48\xc9\xde\xc3\x59\x08\x69\xc2\x35\xf5\x01\x40\x69\x16\x4b\x2e\xba\xf4\xf0\xa5\xe0\xd2\x25\x39\x79\x48\x79\x2b\xfc\x70\x72\xe0\x15\x00\xe6\xc2\x7c\x2b\x9c\xe2\xd2\xc3\xe5\x78\x23\x7e\xab\x64\x94\x3d\x00\x1c\xc3\xc7\x2d\xa9\xa6\xa1\x52\xd9\x10\xb4\xd2\xe0\xb8\x86\xc7\x8d\x18\xc1\xb0\x6f\x38\xed\xdc\x71\x83\xea\x80\xf3\xfc\x2b\xa9\x25\xc9\x5d\x80\x1a\xdc\xc3\xf6\xb4\x3b\xeb\x0e\xd4\x6e\x0b\xf3\x1d\x45\x25\xb7\x1e\x3e\x7d\x0e\x19\x27\x3a\xc0\xf4\x70\x74\x14\xc6\xc2\xfc\x2f\x63\x98\x65\x38\xcf\x59\x1c\x3d\x49\xb6\x1e\xfe\xfc\xab\xd9\xee\x28\x16\x4d\xbe\x5c\x48\x76\x7a\xf2\x66\xaf\xc4\x47\xfb\x51\xa5\xcc\x3d\xbc\x39\x3d\x3d\x0d\xc1\xfe\x23\x2c\xe2\x8c\xf7\x89\x93\x27\xb2\xbe\x59\x00\x06\x95\xf9\xf0\x5e\xc1\xf9\xd5\x55\x7b\x2b\xe1\xf0\x31\xf3\xf2\x93\x88\xff\x90\x98\x6c\x31\xa7\xa9\x07\xd7\x42\xbb\x80\x92\xcf\xed\x46\x72\x0d\xf8\xd6\xfc\x8b\x91\xf6\x70\xb6\xa7\xa2\xdb\x14\x9b\x42\xbe\xcc\xd4\xc3\x05\x17\x73\xd2\xcb\xdb\x2a\x86\xa8\xf7\xf0\xfe\xb4\x4d\x4e\xd7\xe4\xb7\xcd\xf0\xf6\xed\xbb\x77\x21\xa4\xbc\x56\xb2\xc6\x93\x72\x5d\x90\xa1\x87\x11\xd9\x2a\x10\x7e\x33\x1b\x80\x0a\xfe\x50\xee\x49\x33\xd5\x4d\x49\x72\xb2\xcf\xef\x22\xa3\x59\x0f\x79\x9d\xf2\xd3\x77\x03\x9d\x6d\x85\x71\xaa\x93\xaf\x7d\x1c\x05\x80\x8d\x98\x37\xe4\x3a\x93\xfa\xd1\xef\xe4\x5e\xd1\x13\x4e\x33\x53\xc7\x12\x91\x9b\x1f\x60\x46\xdf\xec\xc4\x05\x70\x3e\xbc\x8e\x6b\xaa\x35\xe5\x6f\xb0\x16\xff\xaa\xc0\xca\xd9\xf6\x43\x7f\x01\x3b\xde\xd5\x5b\x7d\x17\x2b\x28\x99\x14\x8d\x64\xcf\x72\xfe\x46\x50\xac\x20\xf3\x02\x4a\x51\xa6\x89\xf2\x00\x59\xbc\x1e\x92\xcd\x14\xd3\xb8\x3c\x2f\xed\x73\x36\x60\x1e\x6a\x00\x13\x6e\x09\xbc\x5e\x29\xd6\x2b\x8d\x92\x2d\x26\x29\x3b\x5a\x71\x23\x29\x52\x3b\xea\xba\xeb\xc5\x48\xbb\xdd\x49\x23\x9b\x40\xca\x51\x09\x8d\xac\x52\xcd\x71\xf7\xab\x6e\x55\x7f\x90\x0c\x94\xb7\x49\x25\x4f\x94\xdd\xe0\x31\xf9\x06\x38\xb9\xf3\x7e\x47\x0e\x54\x5e\x83\x95\xb8\xa9\xf0\xd7\x29\xa7\x2a\x4a\x07\x97\x63\x3d\x7a\x18\x04\x1e\x31\x7f\xd5\xc9\x3f\xd2\x4a\xde\x75\xeb\x8d\xdc\x28\xcc\xf2\x98\xf2\xba\x55\xe7\x94\x6b\x08\x0e\x7f\x14\x6b\xfe\xa9\x02\x64\x8a\x64\x86\xba\xbc\x6e\xfd\x2b\x4d\xd2\xba\x27\x88\x45\x79\x81\x7b\xc5\x36\x9b\xd1\x49\xe1\xd5\xcb\xa8\x5f\x75\xfb\xa2\x53\x7a\xd1\x28\xce\xa5\xad\xf7\xb4\xff\x9e\x68\x6a\x7f\x3b\x67\x6f\xde\x5f\xa7\x7d\x8b\x5f\x0a\xd9\xff\xcd\x08\x59\x06\xba\x23\xa6\xe8\xa2\xbb\x5b\x77\x61\xd2\xc3\x82\x7f\xfa\x1c\x02\x8e\x63\xca\xc9\x97\xe6\xfe\x3b\x00\x00\xff\xff\x73\xdf\xbd\x66\x7d\x05\x00\x00"),
+		},
 		"/charts/control-plane": &vfsgen۰DirInfo{
 			name:    "control-plane",
 			modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC),
@@ -6291,7 +6291,6 @@ var vfsgenAssets = func() http.FileSystem {
 		fs["/charts/components/external-dns"].(os.FileInfo),
 		fs["/charts/components/flatcar-linux-update-operator"].(os.FileInfo),
 		fs["/charts/components/gangway"].(os.FileInfo),
-		fs["/charts/components/headlamp"].(os.FileInfo),
 		fs["/charts/components/httpbin"].(os.FileInfo),
 		fs["/charts/components/istio-operator"].(os.FileInfo),
 		fs["/charts/components/linkerd2"].(os.FileInfo),
@@ -6300,6 +6299,7 @@ var vfsgenAssets = func() http.FileSystem {
 		fs["/charts/components/prometheus-operator"].(os.FileInfo),
 		fs["/charts/components/rook"].(os.FileInfo),
 		fs["/charts/components/velero"].(os.FileInfo),
+		fs["/charts/components/web-ui"].(os.FileInfo),
 	}
 	fs["/charts/components/aws-ebs-csi-driver"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
 		fs["/charts/components/aws-ebs-csi-driver/Chart.yaml"].(os.FileInfo),
@@ -6491,18 +6491,6 @@ var vfsgenAssets = func() http.FileSystem {
 		fs["/charts/components/gangway/templates/service.yaml"].(os.FileInfo),
 		fs["/charts/components/gangway/templates/serviceaccount.yaml"].(os.FileInfo),
 	}
-	fs["/charts/components/headlamp"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
-		fs["/charts/components/headlamp/.helmignore"].(os.FileInfo),
-		fs["/charts/components/headlamp/Chart.yaml"].(os.FileInfo),
-		fs["/charts/components/headlamp/templates"].(os.FileInfo),
-		fs["/charts/components/headlamp/values.yaml"].(os.FileInfo),
-	}
-	fs["/charts/components/headlamp/templates"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
-		fs["/charts/components/headlamp/templates/_helpers.tpl"].(os.FileInfo),
-		fs["/charts/components/headlamp/templates/deployment.yaml"].(os.FileInfo),
-		fs["/charts/components/headlamp/templates/ingress.yaml"].(os.FileInfo),
-		fs["/charts/components/headlamp/templates/service.yaml"].(os.FileInfo),
-	}
 	fs["/charts/components/httpbin"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
 		fs["/charts/components/httpbin/.helmignore"].(os.FileInfo),
 		fs["/charts/components/httpbin/Chart.yaml"].(os.FileInfo),
@@ -7116,6 +7104,18 @@ var vfsgenAssets = func() http.FileSystem {
 		fs["/charts/components/velero/templates/serviceaccount-server.yaml"].(os.FileInfo),
 		fs["/charts/components/velero/templates/volumesnapshotlocation.yaml"].(os.FileInfo),
 	}
+	fs["/charts/components/web-ui"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
+		fs["/charts/components/web-ui/.helmignore"].(os.FileInfo),
+		fs["/charts/components/web-ui/Chart.yaml"].(os.FileInfo),
+		fs["/charts/components/web-ui/templates"].(os.FileInfo),
+		fs["/charts/components/web-ui/values.yaml"].(os.FileInfo),
+	}
+	fs["/charts/components/web-ui/templates"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
+		fs["/charts/components/web-ui/templates/_helpers.tpl"].(os.FileInfo),
+		fs["/charts/components/web-ui/templates/deployment.yaml"].(os.FileInfo),
+		fs["/charts/components/web-ui/templates/ingress.yaml"].(os.FileInfo),
+		fs["/charts/components/web-ui/templates/service.yaml"].(os.FileInfo),
+	}
 	fs["/charts/control-plane"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
 		fs["/charts/control-plane/bootstrap-secrets"].(os.FileInfo),
 		fs["/charts/control-plane/calico"].(os.FileInfo),
diff --git a/pkg/components/headlamp/component.go b/pkg/components/web-ui/component.go
similarity index 91%
rename from pkg/components/headlamp/component.go
rename to pkg/components/web-ui/component.go
index 9efc3429..32abdb3f 100644
--- a/pkg/components/headlamp/component.go
+++ b/pkg/components/web-ui/component.go
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package headlamp
+package webui
 
 import (
 	"fmt"
@@ -27,16 +27,23 @@ import (
 	"github.com/kinvolk/lokomotive/pkg/k8sutil"
 )
 
-const name = "headlamp"
+const name = "web-ui"
 
 //nolint:gochecknoinits
 func init() {
 	components.Register(name, newComponent())
 }
 
+type oidc struct {
+	ClientID     string `hcl:"client_id"`
+	ClientSecret string `hcl:"client_secret"`
+	IssuerURL    string `hcl:"issuer_url"`
+}
+
 type component struct {
 	Namespace string         `hcl:"namespace,optional"`
 	Ingress   *types.Ingress `hcl:"ingress,block"`
+	OIDC      *oidc          `hcl:"oidc,block"`
 }
 
 func newComponent() *component {
diff --git a/pkg/components/headlamp/doc.go b/pkg/components/web-ui/doc.go
similarity index 88%
rename from pkg/components/headlamp/doc.go
rename to pkg/components/web-ui/doc.go
index 7fbd2d8f..54036121 100644
--- a/pkg/components/headlamp/doc.go
+++ b/pkg/components/web-ui/doc.go
@@ -12,5 +12,5 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-// Package headlamp contains code for the Headlamp component.
-package headlamp
+// Package webui contains code for the Web UI component.
+package webui
diff --git a/pkg/components/headlamp/template.go b/pkg/components/web-ui/template.go
similarity index 81%
rename from pkg/components/headlamp/template.go
rename to pkg/components/web-ui/template.go
index 4bc4c241..a6c3406e 100644
--- a/pkg/components/headlamp/template.go
+++ b/pkg/components/web-ui/template.go
@@ -12,14 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package headlamp
+package webui
 
 const chartValuesTmpl = `
+nameOverride: web-ui
+fullnameOverride: web-ui
 nodeSelector:
   beta.kubernetes.io/os: linux
 image:
-  # TODO: Use v0.1.0 when it's released.
-  tag: l8e
+  repository: quay.io/kinvolk/lokomotive-web-ui
+  tag: v0.1.1
   pullPolicy: Always
 securityContext:
   capabilities:
@@ -43,4 +45,10 @@ ingress:
     cert-manager.io/cluster-issuer: {{ .Ingress.CertManagerClusterIssuer }}
     contour.heptio.com/websocket-routes: "/"
 {{- end }}
+{{- if .OIDC }}
+oidc:
+  clientID: {{ .OIDC.ClientID }}
+  clientSecret: {{ .OIDC.ClientSecret }}
+  issuerURL: {{ .OIDC.IssuerURL }}
+{{- end }}
 `
diff --git a/pkg/oidc/oidc.go b/pkg/oidc/oidc.go
index b5420269..8ac08d73 100644
--- a/pkg/oidc/oidc.go
+++ b/pkg/oidc/oidc.go
@@ -22,7 +22,7 @@ import (
 )
 
 const (
-	defaultClientID      = "gangway"
+	defaultClientID      = "clusterauth"
 	defaultUsernameClaim = "email"
 	defaultGroupsClaim   = "groups"
 )


Test patch:
diff --git a/pkg/components/headlamp/component_test.go b/pkg/components/web-ui/component_test.go
similarity index 79%
rename from pkg/components/headlamp/component_test.go
rename to pkg/components/web-ui/component_test.go
index 64345571..2f6bb09c 100644
--- a/pkg/components/headlamp/component_test.go
+++ b/pkg/components/web-ui/component_test.go
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package headlamp_test
+package webui_test
 
 import (
 	"fmt"
@@ -29,12 +29,12 @@ import (
 )
 
 func renderManifests(configHCL string) (map[string]string, error) {
-	component, err := components.Get("headlamp")
+	component, err := components.Get("web-ui")
 	if err != nil {
 		return nil, err
 	}
 
-	body, diagnostics := util.GetComponentBody(configHCL, "headlamp")
+	body, diagnostics := util.GetComponentBody(configHCL, "web-ui")
 	if diagnostics != nil {
 		return nil, fmt.Errorf("Getting component body: %v", diagnostics)
 	}
@@ -52,7 +52,7 @@ func renderManifests(configHCL string) (map[string]string, error) {
 	return ret, nil
 }
 
-func checkHeadlampDeploymentNotEmpty(t *testing.T, m map[string]string) {
+func checkWebUIDeploymentNotEmpty(t *testing.T, m map[string]string) {
 	dStr, ok := m["headlamp/templates/deployment.yaml"]
 	if !ok {
 		t.Fatalf("deployment config not found")
@@ -84,14 +84,14 @@ func TestRenderManifest(t *testing.T) { //nolint:funlen
 	tcs := []testCase{
 		{
 			"WithEmptyConfig",
-			`component "headlamp" {}`,
+			`component "web-ui" {}`,
 			false,
 			``,
 		},
 		{
 			"WithEmptyIngress",
 			`
-			component "headlamp" {
+			component "web-ui" {
 			  ingress {}
 			}`,
 			true,
@@ -100,9 +100,9 @@ func TestRenderManifest(t *testing.T) { //nolint:funlen
 		{
 			"WithMinimalIngressBlock",
 			`
-component "headlamp" {
+component "web-ui" {
   ingress {
-    host = "headlamp.test.example.com"
+    host = "web-ui.test.example.com"
   }
 }
 `,
@@ -110,12 +110,12 @@ component "headlamp" {
 			`apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
-  name: headlamp
+  name: web-ui
   labels:
     helm.sh/chart: headlamp-0.1.0
-    app.kubernetes.io/name: headlamp
-    app.kubernetes.io/instance: headlamp
-    app.kubernetes.io/version: "0.0.0"
+    app.kubernetes.io/name: web-ui
+    app.kubernetes.io/instance: web-ui
+    app.kubernetes.io/version: "0.1.1"
     app.kubernetes.io/managed-by: Helm
   annotations:
     cert-manager.io/cluster-issuer: letsencrypt-production
@@ -124,23 +124,23 @@ metadata:
 spec:
   tls:
     - hosts:
-        - "headlamp.test.example.com"
-      secretName: headlamp.test.example.com-tls
+        - "web-ui.test.example.com"
+      secretName: web-ui.test.example.com-tls
   rules:
-    - host: "headlamp.test.example.com"
+    - host: "web-ui.test.example.com"
       http:
         paths:
           - path: /
             backend:
-              serviceName: headlamp
+              serviceName: web-ui
               servicePort: 80`,
 		},
 		{
 			"WithAllParameters",
 			`
-			component "headlamp" {
+			component "web-ui" {
 			  ingress {
-			    host = "headlamp.test.example.com"
+			    host = "web-ui.test.example.com"
 			    class = "nginx"
 			    certmanager_cluster_issuer = "letsencrypt-staging"
 			  }
@@ -150,12 +150,12 @@ spec:
 			`apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
-  name: headlamp
+  name: web-ui
   labels:
     helm.sh/chart: headlamp-0.1.0
-    app.kubernetes.io/name: headlamp
-    app.kubernetes.io/instance: headlamp
-    app.kubernetes.io/version: "0.0.0"
+    app.kubernetes.io/name: web-ui
+    app.kubernetes.io/instance: web-ui
+    app.kubernetes.io/version: "0.1.1"
     app.kubernetes.io/managed-by: Helm
   annotations:
     cert-manager.io/cluster-issuer: letsencrypt-staging
@@ -164,15 +164,15 @@ metadata:
 spec:
   tls:
     - hosts:
-        - "headlamp.test.example.com"
-      secretName: headlamp.test.example.com-tls
+        - "web-ui.test.example.com"
+      secretName: web-ui.test.example.com-tls
   rules:
-    - host: "headlamp.test.example.com"
+    - host: "web-ui.test.example.com"
       http:
         paths:
           - path: /
             backend:
-              serviceName: headlamp
+              serviceName: web-ui
               servicePort: 80`,
 		},
 	}
@@ -191,7 +191,7 @@ spec:
 			t.Fatalf("Rendered manifests shouldn't be empty with valid config")
 		}
 
-		checkHeadlampDeploymentNotEmpty(t, m)
+		checkWebUIDeploymentNotEmpty(t, m)
 
 		if tc.expectIngress == "" {
 			return
diff --git a/test/components/component_delete_multiple_release_test.go b/test/components/component_delete_multiple_release_test.go
index 66e91ccb..153ec7db 100644
--- a/test/components/component_delete_multiple_release_test.go
+++ b/test/components/component_delete_multiple_release_test.go
@@ -21,13 +21,13 @@ import (
 	"testing"
 
 	"github.com/kinvolk/lokomotive/pkg/components"
-	_ "github.com/kinvolk/lokomotive/pkg/components/headlamp"
 	"github.com/kinvolk/lokomotive/pkg/components/util"
+	_ "github.com/kinvolk/lokomotive/pkg/components/web-ui"
 	testutil "github.com/kinvolk/lokomotive/test/components/util"
 )
 
 func TestDeleteNamespaceMultipleRelease(t *testing.T) {
-	n := "headlamp"
+	n := "web-ui"
 
 	c, err := components.Get(n)
 	if err != nil {
diff --git a/test/components/headlamp/headlamp_test.go b/test/components/web-ui/webui_test.go
similarity index 90%
rename from test/components/headlamp/headlamp_test.go
rename to test/components/web-ui/webui_test.go
index 34534f5b..1bd5c997 100644
--- a/test/components/headlamp/headlamp_test.go
+++ b/test/components/web-ui/webui_test.go
@@ -15,7 +15,7 @@
 // +build aws aws_edge packet aks
 // +build e2e
 
-package headlamp_test
+package webui_test
 
 import (
 	"testing"
@@ -24,11 +24,11 @@ import (
 )
 
 const (
-	deploymentName = "headlamp"
+	deploymentName = "web-ui"
 	namespace      = "lokomotive-system"
 )
 
-func TestHeadlampDeployment(t *testing.T) {
+func TestWebUIDeployment(t *testing.T) {
 	client := testutil.CreateKubeClient(t)
 
 	testutil.WaitForDeployment(t, client, namespace, deploymentName, testutil.RetryInterval, testutil.TimeoutSlow)
diff --git a/test/ingress/headlamp/ingress_test.go b/test/ingress/web-ui/ingress_test.go
similarity index 84%
rename from test/ingress/headlamp/ingress_test.go
rename to test/ingress/web-ui/ingress_test.go
index 7dd78ac2..4e971eb1 100644
--- a/test/ingress/headlamp/ingress_test.go
+++ b/test/ingress/web-ui/ingress_test.go
@@ -15,7 +15,7 @@
 // +build aws aws_edge
 // +build e2e
 
-package headlamp_test
+package webui_test
 
 import (
 	"testing"
@@ -23,6 +23,6 @@ import (
 	testingress "github.com/kinvolk/lokomotive/test/ingress"
 )
 
-func TestHeadlampIngress(t *testing.T) {
-	testingress.AccessIngress(t, "lokomotive-system", "headlamp", "")
+func TestWebUIIngress(t *testing.T) {
+	testingress.AccessIngress(t, "lokomotive-system", "web-ui", "")
 }