This is an automated email from the ASF dual-hosted git repository.

wu-sheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-swck.git


The following commit(s) were added to refs/heads/master by this push:
     new d299bc0  feat: support Horizon UI in UI CRD via spec.kind 
discriminator (#199)
d299bc0 is described below

commit d299bc05ee230f5f366584054db5b099ca60166f
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Tue May 19 09:47:59 2026 +0800

    feat: support Horizon UI in UI CRD via spec.kind discriminator (#199)
    
    Add `spec.kind` (enum: horizon|booster, default horizon) to the UI CRD
    so the operator can deploy either the legacy booster-ui image or the
    next-generation horizon-ui image from a single CRD.
    
    For kind=horizon the operator:
    - defaults image to apache/skywalking-horizon-ui:<version>
    - generates a ConfigMap with horizon.yaml and mounts it at
      /app/horizon.yaml (read-only) on the container
    - mounts an emptyDir at /data for Horizon's writable state
    - listens on port 8081 and updates probes + Service targetPort
    - derives oap.adminUrl from <name>-oap.<ns>:17128 and oap.zipkinUrl
      from <OAPServerAddress>/zipkin when not explicitly set
    
    For kind=booster the existing behavior (image apache/skywalking-ui,
    port 8080, SW_OAP_ADDRESS env var) is preserved unchanged.
    
    Also exposes port 17128 (admin) on the OAPServer Service so Horizon can
    reach runtime-rule, DSL/MQE debug, and inspect endpoints.
    
    Existing e2e + sample YAMLs are pinned to `kind: booster` so their
    `apache/skywalking-ui:9.5.0` references keep working under the new
    horizon default.
---
 docs/getting-started.md                            | 44 ++++++++++++-
 operator/apis/operator/v1alpha1/ui_types.go        | 24 ++++++-
 operator/apis/operator/v1alpha1/ui_webhook.go      | 22 ++++++-
 .../operator/v1alpha1/zz_generated.deepcopy.go     |  2 +-
 .../bases/operator.skywalking.apache.org_uis.yaml  | 31 ++++++++-
 operator/config/samples/default.yaml               | 11 +++-
 operator/config/samples/fetcher.yaml               |  1 +
 operator/controllers/operator/ui_controller.go     |  2 +
 .../manifests/oapserver/templates/service.yaml     |  2 +
 .../operator/manifests/ui/templates/configmap.yaml | 77 ++++++++++++++++++++++
 .../manifests/ui/templates/deployment.yaml         | 30 ++++++++-
 .../operator/manifests/ui/templates/service.yaml   |  4 +-
 test/e2e/skywalking-components-with-banyandb.yaml  |  1 +
 test/e2e/skywalking-components-with-satellite.yaml |  1 +
 test/e2e/skywalking-components-with-storage.yaml   |  1 +
 ...ywalking-components-with-swagent-configmap.yaml |  1 +
 test/e2e/skywalking-components-with-swagent.yaml   |  1 +
 test/e2e/skywalking-components.yaml                |  1 +
 18 files changed, 245 insertions(+), 11 deletions(-)

diff --git a/docs/getting-started.md b/docs/getting-started.md
index a8f2ce7..9cf683b 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -175,11 +175,14 @@ spec:
       type: ClusterIP
 ---
 apiVersion: operator.skywalking.apache.org/v1alpha1
-kind: UI 
+kind: UI
 metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  # spec.kind selects the UI flavor. Default is "horizon" (next-gen UI).
+  # Use "booster" to deploy the legacy apache/skywalking-ui image.
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
@@ -192,6 +195,45 @@ spec:
 EOF
 ```
 
+#### UI flavors (`spec.kind`)
+
+The `UI` resource supports two flavors via `spec.kind`:
+
+| `spec.kind`           | Default image                         | Listens on | 
OAP wire-up                                    |
+|-----------------------|---------------------------------------|------------|------------------------------------------------|
+| `horizon` *(default)* | `apache/skywalking-horizon-ui:<ver>`  | `8081`     | 
YAML config mounted at `/app/horizon.yaml`     |
+| `booster`             | `apache/skywalking-ui:<ver>`          | `8080`     | 
`SW_OAP_ADDRESS` env var                       |
+
+When `spec.kind: horizon`, the operator additionally:
+
+- Creates `ConfigMap/<name>-ui-horizon` with key `horizon.yaml`, populated 
from `spec.OAPServerAddress` (→ `oap.queryUrl`), `spec.OAPServerAdminAddress` 
(default `http://<name>-oap.<ns>:17128` → `oap.adminUrl`), and 
`spec.OAPServerZipkinAddress` (default `<OAPServerAddress>/zipkin` → 
`oap.zipkinUrl`).
+- Mounts that ConfigMap as `/app/horizon.yaml` (read-only) on the Horizon UI 
container.
+- Mounts an `emptyDir` at `/data` for Horizon's writable state (audit log, 
setup state, alarm state, wire-debug log). State is lost on pod restart.
+
+Set `spec.config` to a raw `horizon.yaml` string to fully override the 
operator-generated config (e.g. to configure local users, LDAP, RBAC, or 
session settings). When set, the operator-generated fields above are ignored.
+
+Note: the `OAPServer` Service exposes port `17128` (admin) in addition to 
`12800`/`11800`/`1234` so Horizon UI can reach runtime-rule, DSL/MQE debug, and 
inspect endpoints. The admin port must be enabled in your OAP configuration for 
Horizon's admin features to work.
+
+Minimal horizon example (defaults pick image, admin URL, and Zipkin URL):
+
+```yaml
+apiVersion: operator.skywalking.apache.org/v1alpha1
+kind: UI
+metadata:
+  name: skywalking-system
+  namespace: skywalking-system
+spec:
+  kind: horizon              # default — can be omitted
+  version: 9.5.0
+  instances: 1
+  OAPServerAddress: http://skywalking-system-oap.skywalking-system:12800
+  service:
+    template:
+      type: ClusterIP
+    ingress:
+      host: demo.ui.skywalking
+```
+
 Check the status of the skywalking components.
 
 ```shell
diff --git a/operator/apis/operator/v1alpha1/ui_types.go 
b/operator/apis/operator/v1alpha1/ui_types.go
index 22d2050..b4d7e79 100644
--- a/operator/apis/operator/v1alpha1/ui_types.go
+++ b/operator/apis/operator/v1alpha1/ui_types.go
@@ -24,6 +24,13 @@ import (
 
 // UISpec defines the desired state of UI
 type UISpec struct {
+       // Kind selects which SkyWalking web UI to deploy.
+       // "horizon" deploys the next-generation Horizon UI (default).
+       // "booster" deploys the legacy Booster UI image.
+       // +kubebuilder:validation:Enum=horizon;booster
+       // +kubebuilder:default=horizon
+       // +kubebuilder:validation:Optional
+       Kind string `json:"kind,omitempty"`
        // Version of UI.
        // +kubebuilder:validation:Required
        Version string `json:"version"`
@@ -32,9 +39,24 @@ type UISpec struct {
        // Count is the number of UI pods
        // +kubebuilder:validation:Required
        Instances int32 `json:"instances"`
-       // Backend OAP server address
+       // Backend OAP server address.
+       // For kind=booster, exported as the SW_OAP_ADDRESS env var.
+       // For kind=horizon, used as oap.queryUrl in the generated horizon.yaml.
        // +kubebuilder:validation:Optional
        OAPServerAddress string `json:"OAPServerAddress,omitempty"`
+       // OAPServerAdminAddress is the OAP admin host (port 17128 by default; 
runtime-rule,
+       // dsl-debug, inspect, status). Only used when kind=horizon. If unset, 
defaults to
+       // http://<name>-oap.<namespace>:17128.
+       // +kubebuilder:validation:Optional
+       OAPServerAdminAddress string `json:"OAPServerAdminAddress,omitempty"`
+       // OAPServerZipkinAddress is the OAP Zipkin REST host. Only used when 
kind=horizon.
+       // If unset, defaults to <OAPServerAddress>/zipkin.
+       // +kubebuilder:validation:Optional
+       OAPServerZipkinAddress string `json:"OAPServerZipkinAddress,omitempty"`
+       // Config is a raw horizon.yaml that, when set, fully replaces the 
operator-generated
+       // config mounted into the Horizon UI container. Only used when 
kind=horizon.
+       // +kubebuilder:validation:Optional
+       Config string `json:"config,omitempty"`
        // Service relevant settings
        // +kubebuilder:validation:Optional
        Service Service `json:"service,omitempty"`
diff --git a/operator/apis/operator/v1alpha1/ui_webhook.go 
b/operator/apis/operator/v1alpha1/ui_webhook.go
index 0368d5c..8227de6 100644
--- a/operator/apis/operator/v1alpha1/ui_webhook.go
+++ b/operator/apis/operator/v1alpha1/ui_webhook.go
@@ -43,14 +43,31 @@ func (r *UI) SetupWebhookWithManager(mgr ctrl.Manager) 
error {
 func (r *UI) Default(_ context.Context, ui *UI) error {
        uilog.Info("default", "name", ui.Name)
 
+       if ui.Spec.Kind == "" {
+               ui.Spec.Kind = "horizon"
+       }
+
        if ui.Spec.Image == "" {
-               ui.Spec.Image = fmt.Sprintf("apache/skywalking-ui:%s", 
ui.Spec.Version)
+               switch ui.Spec.Kind {
+               case "booster":
+                       ui.Spec.Image = fmt.Sprintf("apache/skywalking-ui:%s", 
ui.Spec.Version)
+               default:
+                       ui.Spec.Image = 
fmt.Sprintf("apache/skywalking-horizon-ui:%s", ui.Spec.Version)
+               }
        }
 
        ui.Spec.Service.Template.Default()
        if ui.Spec.OAPServerAddress == "" {
                ui.Spec.OAPServerAddress = 
fmt.Sprintf("http://%s-oap.%s:12800";, ui.Name, ui.Namespace)
        }
+       if ui.Spec.Kind == "horizon" {
+               if ui.Spec.OAPServerAdminAddress == "" {
+                       ui.Spec.OAPServerAdminAddress = 
fmt.Sprintf("http://%s-oap.%s:17128";, ui.Name, ui.Namespace)
+               }
+               if ui.Spec.OAPServerZipkinAddress == "" {
+                       ui.Spec.OAPServerZipkinAddress = 
ui.Spec.OAPServerAddress + "/zipkin"
+               }
+       }
 
        return nil
 }
@@ -77,6 +94,9 @@ func (r *UI) ValidateDelete(_ context.Context, ui *UI) 
(admission.Warnings, erro
 }
 
 func (r *UI) validate() error {
+       if r.Spec.Kind != "" && r.Spec.Kind != "booster" && r.Spec.Kind != 
"horizon" {
+               return fmt.Errorf("unknown ui kind %q (allowed: horizon, 
booster)", r.Spec.Kind)
+       }
        if r.Spec.Image == "" {
                return fmt.Errorf("image is absent")
        }
diff --git a/operator/apis/operator/v1alpha1/zz_generated.deepcopy.go 
b/operator/apis/operator/v1alpha1/zz_generated.deepcopy.go
index 812490c..08f0a35 100644
--- a/operator/apis/operator/v1alpha1/zz_generated.deepcopy.go
+++ b/operator/apis/operator/v1alpha1/zz_generated.deepcopy.go
@@ -25,7 +25,7 @@ import (
        v1 "k8s.io/api/apps/v1"
        corev1 "k8s.io/api/core/v1"
        networkingv1 "k8s.io/api/networking/v1"
-       runtime "k8s.io/apimachinery/pkg/runtime"
+       "k8s.io/apimachinery/pkg/runtime"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
diff --git a/operator/config/crd/bases/operator.skywalking.apache.org_uis.yaml 
b/operator/config/crd/bases/operator.skywalking.apache.org_uis.yaml
index 5682aca..23016f2 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_uis.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_uis.yaml
@@ -87,7 +87,26 @@ spec:
             description: UISpec defines the desired state of UI
             properties:
               OAPServerAddress:
-                description: Backend OAP server address
+                description: |-
+                  Backend OAP server address.
+                  For kind=booster, exported as the SW_OAP_ADDRESS env var.
+                  For kind=horizon, used as oap.queryUrl in the generated 
horizon.yaml.
+                type: string
+              OAPServerAdminAddress:
+                description: |-
+                  OAPServerAdminAddress is the OAP admin host (port 17128 by 
default; runtime-rule,
+                  dsl-debug, inspect, status). Only used when kind=horizon. If 
unset, defaults to
+                  http://<name>-oap.<namespace>:17128.
+                type: string
+              OAPServerZipkinAddress:
+                description: |-
+                  OAPServerZipkinAddress is the OAP Zipkin REST host. Only 
used when kind=horizon.
+                  If unset, defaults to <OAPServerAddress>/zipkin.
+                type: string
+              config:
+                description: |-
+                  Config is a raw horizon.yaml that, when set, fully replaces 
the operator-generated
+                  config mounted into the Horizon UI container. Only used when 
kind=horizon.
                 type: string
               image:
                 description: Image is the UI Docker image to deploy.
@@ -96,6 +115,16 @@ spec:
                 description: Count is the number of UI pods
                 format: int32
                 type: integer
+              kind:
+                default: horizon
+                description: |-
+                  Kind selects which SkyWalking web UI to deploy.
+                  "horizon" deploys the next-generation Horizon UI (default).
+                  "booster" deploys the legacy Booster UI image.
+                enum:
+                - horizon
+                - booster
+                type: string
               service:
                 description: Service relevant settings
                 properties:
diff --git a/operator/config/samples/default.yaml 
b/operator/config/samples/default.yaml
index bbd78a3..20d0680 100644
--- a/operator/config/samples/default.yaml
+++ b/operator/config/samples/default.yaml
@@ -29,14 +29,21 @@ spec:
   
 ---
 apiVersion: operator.skywalking.apache.org/v1alpha1
-kind: UI 
+kind: UI
 metadata:
   name: default
 spec:
+  # spec.kind selects the UI flavor:
+  #   horizon (default) -> apache/skywalking-horizon-ui, config mounted at 
/app/horizon.yaml
+  #   booster           -> apache/skywalking-ui,         OAP address via 
SW_OAP_ADDRESS env var
+  kind: horizon
   version: 9.5.0
   instances: 1
-  image: apache/skywalking-ui:9.5.0
+  # image defaults to apache/skywalking-horizon-ui:<version> when omitted.
   OAPServerAddress: http://default-oap.default:12800
+  # The following two are horizon-only and default to derived URLs if omitted:
+  # OAPServerAdminAddress: http://default-oap.default:17128
+  # OAPServerZipkinAddress: http://default-oap.default:12800/zipkin
   service:
     template:
       type: ClusterIP
diff --git a/operator/config/samples/fetcher.yaml 
b/operator/config/samples/fetcher.yaml
index 92de199..4ce860d 100644
--- a/operator/config/samples/fetcher.yaml
+++ b/operator/config/samples/fetcher.yaml
@@ -46,6 +46,7 @@ kind: UI
 metadata:
   name: default
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
diff --git a/operator/controllers/operator/ui_controller.go 
b/operator/controllers/operator/ui_controller.go
index 85b22e0..5290b3e 100644
--- a/operator/controllers/operator/ui_controller.go
+++ b/operator/controllers/operator/ui_controller.go
@@ -50,6 +50,7 @@ type UIReconciler struct {
 // 
+kubebuilder:rbac:groups=operator.skywalking.apache.org,resources=uis,verbs=get;list;watch;create;update;patch;delete
 // 
+kubebuilder:rbac:groups=operator.skywalking.apache.org,resources=uis/status,verbs=get;update;patch
 // 
+kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;patch;delete
+// 
+kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
 
 func (r *UIReconciler) Reconcile(ctx context.Context, req ctrl.Request) 
(ctrl.Result, error) {
@@ -150,6 +151,7 @@ func (r *UIReconciler) SetupWithManager(mgr ctrl.Manager) 
error {
                For(&uiv1alpha1.UI{}).
                Owns(&apps.Deployment{}).
                Owns(&core.Service{}).
+               Owns(&core.ConfigMap{}).
                Owns(&networkingv1.Ingress{}).
                Complete(r)
 }
diff --git a/operator/pkg/operator/manifests/oapserver/templates/service.yaml 
b/operator/pkg/operator/manifests/oapserver/templates/service.yaml
index 65f2389..7014803 100644
--- a/operator/pkg/operator/manifests/oapserver/templates/service.yaml
+++ b/operator/pkg/operator/manifests/oapserver/templates/service.yaml
@@ -35,6 +35,8 @@ spec:
     name: grpc
   - port: 1234
     name: http-monitoring
+  - port: 17128
+    name: admin
   {{- if $svc.ExternalIPs }}
   externalIPs:
     {{- range $value := $svc.ExternalIPs }}
diff --git a/operator/pkg/operator/manifests/ui/templates/configmap.yaml 
b/operator/pkg/operator/manifests/ui/templates/configmap.yaml
new file mode 100644
index 0000000..ce64773
--- /dev/null
+++ b/operator/pkg/operator/manifests/ui/templates/configmap.yaml
@@ -0,0 +1,77 @@
+# Licensed to Apache Software Foundation (ASF) under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Apache Software Foundation (ASF) licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+{{- if eq .Spec.Kind "horizon" }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ .Name }}-ui-horizon
+  namespace: {{ .Namespace }}
+  labels:
+    app: ui
+    operator.skywalking.apache.org/ui-name: {{ .Name }}
+    operator.skywalking.apache.org/application: ui
+    operator.skywalking.apache.org/component: configmap
+data:
+  horizon.yaml: |
+{{- if .Spec.Config }}
+{{ .Spec.Config | indent 4 }}
+{{- else }}
+    server:
+      host: 0.0.0.0
+      port: 8081
+    oap:
+      queryUrl: {{ .Spec.OAPServerAddress }}
+      adminUrl: {{ .Spec.OAPServerAdminAddress }}
+      zipkinUrl: {{ .Spec.OAPServerZipkinAddress }}
+      timeoutMs: 15000
+    auth:
+      backend: local
+      local:
+        users: []
+    rbac:
+      enabled: true
+      roles:
+        viewer:
+          - metrics:read
+          - alarms:read
+          - traces:read
+          - logs:read
+          - topology:read
+          - profile:read
+        admin:
+          - "*"
+      landingByRole:
+        viewer: /
+        admin: /admin/cluster
+    session:
+      ttlMinutes: 60
+      cookieName: horizon_sid
+      cookieSecure: false
+    audit:
+      file: /data/horizon-audit.jsonl
+    setup:
+      file: /data/horizon-setup.json
+    alarms:
+      file: /data/horizon-alarms.json
+    debugLog:
+      enabled: false
+      file: /data/horizon-wire.jsonl
+      maxBodyChars: 8192
+      redactAuthHeaders: true
+{{- end }}
+{{- end }}
diff --git a/operator/pkg/operator/manifests/ui/templates/deployment.yaml 
b/operator/pkg/operator/manifests/ui/templates/deployment.yaml
index 998a366..39cdb50 100644
--- a/operator/pkg/operator/manifests/ui/templates/deployment.yaml
+++ b/operator/pkg/operator/manifests/ui/templates/deployment.yaml
@@ -15,6 +15,9 @@
 # specific language governing permissions and limitations
 # under the License.
 
+{{- $isHorizon := eq .Spec.Kind "horizon" }}
+{{- $port := 8080 }}
+{{- if $isHorizon }}{{ $port = 8081 }}{{ end }}
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -55,7 +58,7 @@ spec:
         image: {{ .Spec.Image }}
         imagePullPolicy: IfNotPresent
         ports:
-        - containerPort: 8080
+        - containerPort: {{ $port }}
           name: page
         livenessProbe:
           initialDelaySeconds: 10
@@ -65,7 +68,7 @@ spec:
           successThreshold: 1
           httpGet:
             path: /
-            port: 8080
+            port: {{ $port }}
         readinessProbe:
           initialDelaySeconds: 10
           timeoutSeconds: 10
@@ -74,7 +77,28 @@ spec:
           successThreshold: 1
           httpGet:
             path: /
-            port: 8080
+            port: {{ $port }}
+        {{- if $isHorizon }}
+        volumeMounts:
+          - name: horizon-config
+            mountPath: /app/horizon.yaml
+            subPath: horizon.yaml
+            readOnly: true
+          - name: horizon-data
+            mountPath: /data
+        {{- else }}
         env:
           - name: SW_OAP_ADDRESS
             value: {{ .Spec.OAPServerAddress }}
+        {{- end }}
+      {{- if $isHorizon }}
+      volumes:
+        - name: horizon-config
+          configMap:
+            name: {{ .Name }}-ui-horizon
+            items:
+              - key: horizon.yaml
+                path: horizon.yaml
+        - name: horizon-data
+          emptyDir: {}
+      {{- end }}
diff --git a/operator/pkg/operator/manifests/ui/templates/service.yaml 
b/operator/pkg/operator/manifests/ui/templates/service.yaml
index 2deb15b..19b527a 100644
--- a/operator/pkg/operator/manifests/ui/templates/service.yaml
+++ b/operator/pkg/operator/manifests/ui/templates/service.yaml
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 {{- $svc := .Spec.Service.Template }}
+{{- $targetPort := 8080 }}
+{{- if eq .Spec.Kind "horizon" }}{{ $targetPort = 8081 }}{{ end }}
 apiVersion: v1
 kind: Service
 metadata:
@@ -27,7 +29,7 @@ spec:
   type: {{ $svc.Type }}
   ports:
     - port: 80
-      targetPort: 8080
+      targetPort: {{ $targetPort }}
       name: page
   {{- if $svc.ExternalIPs }}
   externalIPs:
diff --git a/test/e2e/skywalking-components-with-banyandb.yaml 
b/test/e2e/skywalking-components-with-banyandb.yaml
index 304a2dd..5a30619 100644
--- a/test/e2e/skywalking-components-with-banyandb.yaml
+++ b/test/e2e/skywalking-components-with-banyandb.yaml
@@ -36,6 +36,7 @@ metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
diff --git a/test/e2e/skywalking-components-with-satellite.yaml 
b/test/e2e/skywalking-components-with-satellite.yaml
index 85d75b1..8caa327 100644
--- a/test/e2e/skywalking-components-with-satellite.yaml
+++ b/test/e2e/skywalking-components-with-satellite.yaml
@@ -55,6 +55,7 @@ metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
diff --git a/test/e2e/skywalking-components-with-storage.yaml 
b/test/e2e/skywalking-components-with-storage.yaml
index 3018851..f8ff6b0 100644
--- a/test/e2e/skywalking-components-with-storage.yaml
+++ b/test/e2e/skywalking-components-with-storage.yaml
@@ -35,6 +35,7 @@ metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
diff --git a/test/e2e/skywalking-components-with-swagent-configmap.yaml 
b/test/e2e/skywalking-components-with-swagent-configmap.yaml
index 3b89dd9..8dfb2c7 100644
--- a/test/e2e/skywalking-components-with-swagent-configmap.yaml
+++ b/test/e2e/skywalking-components-with-swagent-configmap.yaml
@@ -35,6 +35,7 @@ metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
diff --git a/test/e2e/skywalking-components-with-swagent.yaml 
b/test/e2e/skywalking-components-with-swagent.yaml
index 4150a5a..9c6ac97 100644
--- a/test/e2e/skywalking-components-with-swagent.yaml
+++ b/test/e2e/skywalking-components-with-swagent.yaml
@@ -35,6 +35,7 @@ metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0
diff --git a/test/e2e/skywalking-components.yaml 
b/test/e2e/skywalking-components.yaml
index 2e9b1d0..ff4aaff 100644
--- a/test/e2e/skywalking-components.yaml
+++ b/test/e2e/skywalking-components.yaml
@@ -34,6 +34,7 @@ metadata:
   name: skywalking-system
   namespace: skywalking-system
 spec:
+  kind: booster
   version: 9.5.0
   instances: 1
   image: apache/skywalking-ui:9.5.0

Reply via email to