Replace go-bindata with embed lib (#64)

diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index 972bf51..7cb20b1 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -22,6 +22,10 @@
     branches:
       - master
 
+concurrency:
+  group: swck-${{ github.event.pull_request.number || github.ref }}
+  cancel-in-progress: true
+
 jobs:
   check:
     name: Check
diff --git a/docs/operator.md b/docs/operator.md
index 2ae7413..c9ba27b 100644
--- a/docs/operator.md
+++ b/docs/operator.md
@@ -59,7 +59,6 @@
 
 If you want to custom the manifests templates to generate dedicated Kubernetes resources,
 please edit YAMLs in `pkg/operator/manifests`.
-After saving your changes, issue `make update-templates` to transfer them to binary assets.
 The last step is to rebuild `operator` by `make -C operator docker-build`.
 
 
@@ -110,4 +109,4 @@
 - [Fetch metrics from the Istio control plane(istiod)](./examples/istio-controlplane.md)
 - [Inject the java agent to pods](./examples/java-agent-injector-usage.md)
 - [Deploy a storage](./examples/storage.md)
-- [Deploy a Satellite](./examples/satellite.md)
\ No newline at end of file
+- [Deploy a Satellite](./examples/satellite.md)
diff --git a/hack/run_update_templates.sh b/hack/run_update_templates.sh
deleted file mode 100755
index fd94cd0..0000000
--- a/hack/run_update_templates.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env bash
-
-#
-# Licensed to the 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.
-# The 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.
-#
-
-set -ue
-
-
-OUT_DIR=$(mktemp -d -t swck-templates.XXXXXXXXXX) || { echo "Failed to create temp file"; exit 1; }
-
-SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-GOBINDATA="${SCRIPTPATH}"/../bin/go-bindata
-
-ROOTDIR="${SCRIPTPATH}/../operator"
-OPERATOR_DIR="${ROOTDIR}"/pkg/operator
-INSTALLER_DIR="${OPERATOR_DIR}"/manifests
-GEN_PATH="${OPERATOR_DIR}"/repo/assets.gen.go
-
-rm -f "${GEN_PATH}"
-mkdir -p "${OUT_DIR}"
-
-for comp in $(ls ${INSTALLER_DIR});
-do
-    cp -Rf "${INSTALLER_DIR}"/"${comp}" "${OUT_DIR}"
-done
-
-set +u
-
-cd "${OUT_DIR}"
-set +e
-rm -f *.bak
-set -e
-"${GOBINDATA}" --nocompress --nometadata --pkg repo -o "${GEN_PATH}" ./...
-
-rm -Rf "${OUT_DIR}"
-
-bash ${SCRIPTPATH}/build-header.sh "${OPERATOR_DIR}"/pkg/operator/repo/assets.gen.go
diff --git a/operator/Makefile b/operator/Makefile
index d18fc45..592bac2 100644
--- a/operator/Makefile
+++ b/operator/Makefile
@@ -40,7 +40,7 @@
 
 ##@ Development
 
-generate: generate-deep manifests update-templates ## Generate codes and manifests
+generate: generate-deep manifests ## Generate codes and manifests
 	$(MAKE) format
 
 .PHONY: manifests
@@ -56,17 +56,6 @@
 test: generate format envtest ## Run tests.
 	KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out
 
-
-GO_BINDATA := $(tool_bin)/go-bindata
-$(GO_BINDATA):
-	curl --location --output $(GO_BINDATA) https://github.com/kevinburke/go-bindata/releases/download/v3.21.0/go-bindata-$(OSNAME)-amd64 \
-		&& chmod +x $(GO_BINDATA)
-
-update-templates: $(GO_BINDATA) ## Update templates
-	@echo updating charts
-	-$(root_dir)/hack/run_update_templates.sh
-	-$(root_dir)/hack/build-header.sh pkg/operator/repo/assets.gen.go
-
 ##@ Build
 
 .PHONY: build
diff --git a/operator/config/crd/bases/operator.skywalking.apache.org_fetchers.yaml b/operator/config/crd/bases/operator.skywalking.apache.org_fetchers.yaml
index 596e7d5..beebdf9 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_fetchers.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_fetchers.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
diff --git a/operator/config/crd/bases/operator.skywalking.apache.org_javaagents.yaml b/operator/config/crd/bases/operator.skywalking.apache.org_javaagents.yaml
index 8cab91a..848f70b 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_javaagents.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_javaagents.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
diff --git a/operator/config/crd/bases/operator.skywalking.apache.org_oapservers.yaml b/operator/config/crd/bases/operator.skywalking.apache.org_oapservers.yaml
index 4d4670e..a03720f 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_oapservers.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_oapservers.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
diff --git a/operator/config/crd/bases/operator.skywalking.apache.org_satellites.yaml b/operator/config/crd/bases/operator.skywalking.apache.org_satellites.yaml
index a1e6318..1483b6e 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_satellites.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_satellites.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
diff --git a/operator/config/crd/bases/operator.skywalking.apache.org_storages.yaml b/operator/config/crd/bases/operator.skywalking.apache.org_storages.yaml
index a9caa6c..fcf89ab 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_storages.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_storages.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
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 ed4a3b8..d9af6db 100644
--- a/operator/config/crd/bases/operator.skywalking.apache.org_uis.yaml
+++ b/operator/config/crd/bases/operator.skywalking.apache.org_uis.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
diff --git a/operator/config/rbac/role.yaml b/operator/config/rbac/role.yaml
index 5b870ff..bb18d8a 100644
--- a/operator/config/rbac/role.yaml
+++ b/operator/config/rbac/role.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
diff --git a/operator/config/webhook/manifests.yaml b/operator/config/webhook/manifests.yaml
index fb8d197..1d301d3 100644
--- a/operator/config/webhook/manifests.yaml
+++ b/operator/config/webhook/manifests.yaml
@@ -14,7 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
 ---
 apiVersion: admissionregistration.k8s.io/v1
 kind: MutatingWebhookConfiguration
diff --git a/operator/main.go b/operator/main.go
index c012a6e..4806dad 100644
--- a/operator/main.go
+++ b/operator/main.go
@@ -37,7 +37,7 @@
 	operatorcontroller "github.com/apache/skywalking-swck/operator/controllers/operator"
 	operatorcontrollers "github.com/apache/skywalking-swck/operator/controllers/operator"
 	"github.com/apache/skywalking-swck/operator/pkg/operator/injector"
-	"github.com/apache/skywalking-swck/operator/pkg/operator/repo"
+	"github.com/apache/skywalking-swck/operator/pkg/operator/manifests"
 	//+kubebuilder:scaffold:imports
 )
 
@@ -84,7 +84,7 @@
 	if err = (&operatorcontroller.OAPServerReconciler{
 		Client:   mgr.GetClient(),
 		Scheme:   mgr.GetScheme(),
-		FileRepo: repo.NewRepo("oapserver"),
+		FileRepo: manifests.NewRepo("oapserver"),
 		Recorder: mgr.GetEventRecorderFor("oapserver-controller"),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "OAPServer")
@@ -93,7 +93,7 @@
 	if err = (&operatorcontroller.UIReconciler{
 		Client:   mgr.GetClient(),
 		Scheme:   mgr.GetScheme(),
-		FileRepo: repo.NewRepo("ui"),
+		FileRepo: manifests.NewRepo("ui"),
 		Recorder: mgr.GetEventRecorderFor("oapserver-controller"),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "UI")
@@ -102,7 +102,7 @@
 	if err = (&operatorcontroller.FetcherReconciler{
 		Client:   mgr.GetClient(),
 		Scheme:   mgr.GetScheme(),
-		FileRepo: repo.NewRepo("fetcher"),
+		FileRepo: manifests.NewRepo("fetcher"),
 		Recorder: mgr.GetEventRecorderFor("fetcher-controller"),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "Fetcher")
@@ -111,7 +111,7 @@
 	if err = (&operatorcontroller.StorageReconciler{
 		Client:     mgr.GetClient(),
 		Scheme:     mgr.GetScheme(),
-		FileRepo:   repo.NewRepo("storage"),
+		FileRepo:   manifests.NewRepo("storage"),
 		RestConfig: mgr.GetConfig(),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "Storage")
@@ -120,7 +120,7 @@
 	if err = (&operatorcontroller.ConfigMapReconciler{
 		Client:   mgr.GetClient(),
 		Scheme:   mgr.GetScheme(),
-		FileRepo: repo.NewRepo("injector"),
+		FileRepo: manifests.NewRepo("injector"),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "ConfigMap")
 		os.Exit(1)
@@ -128,7 +128,7 @@
 	if err = (&operatorcontroller.JavaAgentReconciler{
 		Client:   mgr.GetClient(),
 		Scheme:   mgr.GetScheme(),
-		FileRepo: repo.NewRepo("injector"),
+		FileRepo: manifests.NewRepo("injector"),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "JavaAgent")
 		os.Exit(1)
@@ -137,7 +137,7 @@
 	if err = (&operatorcontrollers.SatelliteReconciler{
 		Client:   mgr.GetClient(),
 		Scheme:   mgr.GetScheme(),
-		FileRepo: repo.NewRepo("satellite"),
+		FileRepo: manifests.NewRepo("satellite"),
 		Recorder: mgr.GetEventRecorderFor("satellite-controller"),
 	}).SetupWithManager(mgr); err != nil {
 		setupLog.Error(err, "unable to create controller", "controller", "Satellite")
diff --git a/operator/pkg/operator/injector/annotation.go b/operator/pkg/operator/injector/annotation.go
index 1fe9ffe..4a97760 100644
--- a/operator/pkg/operator/injector/annotation.go
+++ b/operator/pkg/operator/injector/annotation.go
@@ -23,7 +23,7 @@
 
 	"github.com/ghodss/yaml"
 
-	"github.com/apache/skywalking-swck/operator/pkg/operator/repo"
+	"github.com/apache/skywalking-swck/operator/pkg/operator/manifests"
 )
 
 // Annotation defines configuration that user can overlay, including
@@ -47,12 +47,12 @@
 	Annotations []Annotation
 }
 
-//AnnotationOverlay is used to set overlaied value
+// AnnotationOverlay is used to set overlaied value
 type AnnotationOverlay map[Annotation]string
 
 // NewAnnotations will create a new AnnotationOverlay
 func NewAnnotations() (*Annotations, error) {
-	fileRepo := repo.NewRepo("injector")
+	fileRepo := manifests.NewRepo("injector")
 	data, err := fileRepo.ReadFile("injector/templates/annotations.yaml")
 	if err != nil {
 		return nil, err
@@ -76,13 +76,13 @@
 	return anno
 }
 
-//NewAnnotationOverlay will create a new AnnotationOverlay
+// NewAnnotationOverlay will create a new AnnotationOverlay
 func NewAnnotationOverlay() *AnnotationOverlay {
 	a := make(AnnotationOverlay)
 	return &a
 }
 
-//GetFinalValue will get overlaied value first , then default
+// GetFinalValue will get overlaied value first , then default
 func (as *AnnotationOverlay) GetFinalValue(a Annotation) string {
 	ov := a.DefaultValue
 	if v, ok := (*as)[a]; ok {
@@ -91,25 +91,25 @@
 	return ov
 }
 
-//SetOverlay will set overlaied value
+// SetOverlay will set overlaied value
 func (as *AnnotationOverlay) SetOverlay(AnnotationOverlay *map[string]string, a Annotation) error {
 	if v, ok := (*AnnotationOverlay)[a.Name]; ok {
-		//if annotation has validate func then validate
+		// if annotation has validate func then validate
 		f := FindValidateFunc(a.ValidateFunc)
 		if f != nil {
 			err := f(a.Name, v)
-			//validate error
+			// validate error
 			if err != nil {
 				return err
 			}
 		}
-		//if no validate func then set Overlay directly
+		// if no validate func then set Overlay directly
 		(*as)[a] = v
 	}
 	return nil
 }
 
-//GetOverlayValue will get overlaied value, if not then return ""
+// GetOverlayValue will get overlaied value, if not then return ""
 func (as *AnnotationOverlay) GetOverlayValue(a Annotation) string {
 	if v, ok := (*as)[a]; ok {
 		return v
diff --git a/operator/pkg/operator/repo/repo.go b/operator/pkg/operator/manifests/repo.go
similarity index 67%
rename from operator/pkg/operator/repo/repo.go
rename to operator/pkg/operator/manifests/repo.go
index 9aa0be6..a263b6f 100644
--- a/operator/pkg/operator/repo/repo.go
+++ b/operator/pkg/operator/manifests/repo.go
@@ -15,19 +15,22 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package repo
+package manifests
 
 import (
+	"embed"
 	"fmt"
 	"os"
 	"path/filepath"
-	"time"
 
 	"github.com/apache/skywalking-swck/operator/pkg/kubernetes"
 )
 
 var _ kubernetes.Repo = &AssetsRepo{}
 
+//go:embed fetcher injector oapserver satellite storage ui
+var manifests embed.FS
+
 // AssetsRepo provides templates through assets
 type AssetsRepo struct {
 	Root string
@@ -39,16 +42,18 @@
 
 // ReadFile reads the content of compiled in files at path and returns a buffer with the data.
 func (a *AssetsRepo) ReadFile(path string) ([]byte, error) {
-	return Asset(path)
+	return manifests.ReadFile(path)
 }
 
 func (a *AssetsRepo) GetFilesRecursive(path string) ([]string, error) {
-	ap := fmt.Sprintf("%s/%s", a.Root, path)
-	rootFI, err := Stat(ap)
+	absolutePath := fmt.Sprintf("%s/%s", a.Root, path)
+
+	rootFI, err := Stat(absolutePath)
 	if err != nil {
 		return nil, err
 	}
-	return getFilesRecursive(filepath.Dir(ap), rootFI)
+
+	return getFilesRecursive(filepath.Dir(absolutePath), rootFI)
 }
 
 func getFilesRecursive(prefix string, root os.FileInfo) ([]string, error) {
@@ -56,15 +61,15 @@
 		return nil, fmt.Errorf("not a dir: %s", root.Name())
 	}
 	prefix = filepath.Join(prefix, root.Name())
-	fs, _ := AssetDir(prefix)
+	fs, _ := manifests.ReadDir(prefix)
 	out := make([]string, 0)
 	for _, f := range fs {
-		info, err := Stat(filepath.Join(prefix, f))
+		info, err := Stat(filepath.Join(prefix, f.Name()))
 		if err != nil {
 			return nil, err
 		}
-		if !info.IsDir() {
-			out = append(out, filepath.Join(prefix, filepath.Base(info.Name())))
+		if !f.IsDir() {
+			out = append(out, filepath.Join(prefix, f.Name()))
 			continue
 		}
 		nfs, err := getFilesRecursive(prefix, info)
@@ -78,40 +83,10 @@
 
 // Stat returns a FileInfo object for the given path.
 func Stat(path string) (os.FileInfo, error) {
-	info, err := AssetInfo(path)
+	f, err := manifests.Open(path)
 	if err != nil {
-		// try it as a directory instead
-		_, err = AssetDir(path)
-		if err == nil {
-			info = &dirInfo{name: filepath.Base(path)}
-		}
-	} else {
-		fi := info.(bindataFileInfo)
-		fi.name = filepath.Base(fi.name)
+		return nil, err
 	}
 
-	return info, err
-}
-
-type dirInfo struct {
-	name string
-}
-
-func (di dirInfo) Name() string {
-	return di.name
-}
-func (di dirInfo) Size() int64 {
-	return 0
-}
-func (di dirInfo) Mode() os.FileMode {
-	return os.FileMode(0)
-}
-func (di dirInfo) ModTime() time.Time {
-	return time.Unix(0, 0)
-}
-func (di dirInfo) IsDir() bool {
-	return true
-}
-func (di dirInfo) Sys() interface{} {
-	return nil
+	return f.Stat()
 }
diff --git a/operator/pkg/operator/manifests/repo_test.go b/operator/pkg/operator/manifests/repo_test.go
new file mode 100644
index 0000000..e0fb510
--- /dev/null
+++ b/operator/pkg/operator/manifests/repo_test.go
@@ -0,0 +1,147 @@
+// 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.
+
+package manifests
+
+import (
+	"testing"
+)
+
+func TestStat(t *testing.T) {
+	tests := []struct {
+		name      string
+		path      string
+		wantName  string
+		wantIsDir bool
+		wantErr   bool
+	}{
+		{
+			name:    "empty path",
+			path:    "",
+			wantErr: true,
+		},
+		{
+			name:      "current directory",
+			path:      ".",
+			wantName:  ".",
+			wantIsDir: true,
+			wantErr:   false,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got, err := Stat(tt.path)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("Stat() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+			if err == nil {
+				if got.Name() != tt.wantName {
+					t.Errorf("Stat() got.Name() = %v, want %v", got, tt.wantName)
+				}
+				if got.IsDir() != tt.wantIsDir {
+					t.Errorf("Stat() got.IsDir() = %v, want %v", got, tt.wantIsDir)
+				}
+			}
+		})
+	}
+}
+
+func TestAssetsRepo_ReadFile(t *testing.T) {
+	tests := []struct {
+		name    string
+		path    string
+		wantErr bool
+	}{
+		{
+			name:    "read a template file",
+			path:    "oapserver/templates/deployment.yaml",
+			wantErr: false,
+		},
+		{
+			name:    "read a non-existent file",
+			path:    "non-existent/foo.yaml",
+			wantErr: true,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			a := &AssetsRepo{
+				Root: "",
+			}
+			_, err := a.ReadFile(tt.path)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("ReadFile() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+		})
+	}
+}
+
+func TestAssetsRepo_GetFilesRecursive(t *testing.T) {
+	tests := []struct {
+		name      string
+		root      string
+		path      string
+		wantFiles bool // Since filenames may be changed, only check if the number of files is greater than 0.
+		wantErr   bool
+	}{
+		{
+			name:      "get oap template files",
+			root:      "oapserver",
+			path:      "templates",
+			wantFiles: true,
+			wantErr:   false,
+		},
+		{
+			name:      "get ui template files",
+			root:      "ui",
+			path:      "templates",
+			wantFiles: true,
+			wantErr:   false,
+		},
+		{
+			name:      "get files from ui directory without path",
+			root:      "ui",
+			path:      "",
+			wantFiles: false,
+			wantErr:   true,
+		},
+		{
+			name:      "get files in a non-existent directory",
+			root:      "non-existent",
+			path:      "templates",
+			wantFiles: false,
+			wantErr:   true,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			a := &AssetsRepo{
+				Root: tt.root,
+			}
+			got, err := a.GetFilesRecursive(tt.path)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("GetFilesRecursive() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+			if tt.wantFiles && len(got) <= 0 {
+				t.Errorf("GetFilesRecursive() should return more than one filenames")
+			}
+		})
+	}
+}
diff --git a/operator/pkg/operator/repo/assets.gen.go b/operator/pkg/operator/repo/assets.gen.go
deleted file mode 100644
index e8da2fb..0000000
--- a/operator/pkg/operator/repo/assets.gen.go
+++ /dev/null
@@ -1,2193 +0,0 @@
-// 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.
-// Code generated by go-bindata. DO NOT EDIT.
-// sources:
-// fetcher/templates/cluster_role.yaml (1.218kB)
-// fetcher/templates/cluster_role_binding.yaml (1.205kB)
-// fetcher/templates/configmap.yaml (3.082kB)
-// fetcher/templates/deployment.yaml (2.084kB)
-// fetcher/templates/service_account.yaml (1.088kB)
-// injector/templates/annotations.yaml (3.689kB)
-// injector/templates/configmap.yaml (1.2kB)
-// injector/templates/javaagent.yaml (1.462kB)
-// oapserver/templates/cluster_role.yaml (1.241kB)
-// oapserver/templates/cluster_role_binding.yaml (1.207kB)
-// oapserver/templates/deployment.yaml (3.937kB)
-// oapserver/templates/ingress.yaml (1.672kB)
-// oapserver/templates/service.yaml (1.782kB)
-// oapserver/templates/service_account.yaml (1.09kB)
-// satellite/templates/cluster_role.yaml (1.104kB)
-// satellite/templates/cluster_role_binding.yaml (1.213kB)
-// satellite/templates/deployment.yaml (3.089kB)
-// satellite/templates/service.yaml (1.78kB)
-// satellite/templates/service_account.yaml (1.101kB)
-// storage/elasticsearch/templates/configmap.yaml (1.822kB)
-// storage/elasticsearch/templates/service.yaml (1.322kB)
-// storage/elasticsearch/templates/service_account.yaml (1.095kB)
-// storage/elasticsearch/templates/statefulset.yaml (6.624kB)
-// ui/templates/deployment.yaml (2.604kB)
-// ui/templates/ingress.yaml (1.716kB)
-// ui/templates/service.yaml (1.681kB)
-
-package repo
-
-import (
-	"crypto/sha256"
-	"fmt"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"strings"
-	"time"
-)
-
-type asset struct {
-	bytes  []byte
-	info   os.FileInfo
-	digest [sha256.Size]byte
-}
-
-type bindataFileInfo struct {
-	name    string
-	size    int64
-	mode    os.FileMode
-	modTime time.Time
-}
-
-func (fi bindataFileInfo) Name() string {
-	return fi.name
-}
-func (fi bindataFileInfo) Size() int64 {
-	return fi.size
-}
-func (fi bindataFileInfo) Mode() os.FileMode {
-	return fi.mode
-}
-func (fi bindataFileInfo) ModTime() time.Time {
-	return fi.modTime
-}
-func (fi bindataFileInfo) IsDir() bool {
-	return false
-}
-func (fi bindataFileInfo) Sys() interface{} {
-	return nil
-}
-
-var _fetcherTemplatesCluster_roleYaml = []byte(`# 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.
-
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: swck:fetcher
-  labels:
-    operator.skywalking.apache.org/application: fetcher
-    operator.skywalking.apache.org/component: rbac
-rules:
-  - apiGroups: [""]
-    resources: ["nodes", "nodes/proxy", "endpoints", "services", "pods"]
-    verbs: ["get", "watch", "list"]
-  - apiGroups: [""]
-    resources: ["configmaps"]
-    verbs: ["get"]
-`)
-
-func fetcherTemplatesCluster_roleYamlBytes() ([]byte, error) {
-	return _fetcherTemplatesCluster_roleYaml, nil
-}
-
-func fetcherTemplatesCluster_roleYaml() (*asset, error) {
-	bytes, err := fetcherTemplatesCluster_roleYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "fetcher/templates/cluster_role.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xe2, 0x96, 0xd7, 0x97, 0x52, 0x31, 0x75, 0x66, 0x9b, 0x3, 0x64, 0xd6, 0x68, 0x4f, 0x7, 0xc9, 0x9a, 0xe, 0x86, 0x6c, 0x15, 0x42, 0x64, 0x53, 0x34, 0x3e, 0xe1, 0xdc, 0x62, 0x5f, 0x3e}}
-	return a, nil
-}
-
-var _fetcherTemplatesCluster_role_bindingYaml = []byte(`# 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.
-
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: swck:fetcher
-  labels:
-    operator.skywalking.apache.org/application: fetcher
-    operator.skywalking.apache.org/component: rbac
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: swck:fetcher
-subjects:
-  - kind: ServiceAccount
-    name: {{ .Name }}-fetcher
-    namespace: {{ .Namespace }}
-`)
-
-func fetcherTemplatesCluster_role_bindingYamlBytes() ([]byte, error) {
-	return _fetcherTemplatesCluster_role_bindingYaml, nil
-}
-
-func fetcherTemplatesCluster_role_bindingYaml() (*asset, error) {
-	bytes, err := fetcherTemplatesCluster_role_bindingYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "fetcher/templates/cluster_role_binding.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x94, 0xd1, 0x52, 0x1b, 0x44, 0x28, 0xb4, 0x81, 0x6e, 0xdc, 0x93, 0xc8, 0x8, 0xa1, 0x7e, 0x63, 0x23, 0x78, 0xed, 0x66, 0x14, 0x33, 0xc4, 0x21, 0xea, 0x5e, 0x94, 0x3a, 0xed, 0x4a, 0x38, 0x81}}
-	return a, nil
-}
-
-var _fetcherTemplatesConfigmapYaml = []byte(`# 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.
-{{ $types := .Spec.GetType }}
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: {{ .Name }}-fetcher
-  namespace: {{ .Namespace }}
-  labels:
-    app: fetcher
-    operator.skywalking.apache.org/fetcher-name: {{ .Name }}
-    operator.skywalking.apache.org/application: fetcher
-    operator.skywalking.apache.org/component: configmap
-data:
-  collector.yaml: |-
-    service:
-      extensions: [zpages, health_check]
-      pipelines:
-        metrics:
-          receivers: [prometheus]
-          exporters: [logging, opencensus, prometheus]
-    extensions:
-      zpages:
-        endpoint: "localhost:56888"
-      health_check: {}
-    exporters:
-      logging:
-      prometheus:
-        endpoint: "0.0.0.0:9090"
-      opencensus:
-        endpoint: {{ .Spec.OAPServerAddress | quote }}
-        insecure: true
-    receivers:
-      {{- if has "prometheus" $types }}
-      prometheus:
-        config:
-          global:
-            scrape_interval: 15s
-            scrape_timeout: 10s
-          scrape_configs:
-          - job_name: kubernetes-pods
-            kubernetes_sd_configs:
-            - role: pod
-            relabel_configs:
-            - source_labels: []
-              target_label: cluster
-              replacement: {{ .Spec.ClusterName | quote }}
-            - action: keep
-              regex: true
-              source_labels:
-              - __meta_kubernetes_pod_annotation_prometheus_io_scrape
-            - action: replace
-              regex: (.+)
-              source_labels:
-              - __meta_kubernetes_pod_annotation_prometheus_io_path
-              target_label: __metrics_path__
-            - action: replace
-              regex: ([^:]+)(?::\d+)?;(\d+)
-              replacement: $$1:$$2
-              source_labels:
-              - __address__
-              - __meta_kubernetes_pod_annotation_prometheus_io_port
-              target_label: __address__
-            - action: labelmap
-              regex: __meta_kubernetes_pod_label_(.+)
-            - action: replace
-              source_labels:
-              - __meta_kubernetes_namespace
-              target_label: kubernetes_namespace
-            - action: replace
-              source_labels:
-              - __meta_kubernetes_pod_name
-              target_label: kubernetes_pod_name
-      {{- end }}`)
-
-func fetcherTemplatesConfigmapYamlBytes() ([]byte, error) {
-	return _fetcherTemplatesConfigmapYaml, nil
-}
-
-func fetcherTemplatesConfigmapYaml() (*asset, error) {
-	bytes, err := fetcherTemplatesConfigmapYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "fetcher/templates/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x78, 0x5c, 0x20, 0x2e, 0x4a, 0xd1, 0xc, 0xe0, 0xc3, 0x13, 0xec, 0x8e, 0x70, 0x6d, 0x50, 0x62, 0x8f, 0x8f, 0x1, 0x3c, 0xc3, 0xcc, 0x91, 0xf2, 0x40, 0xf9, 0x1, 0x21, 0x10, 0xae, 0x76, 0x85}}
-	return a, nil
-}
-
-var _fetcherTemplatesDeploymentYaml = []byte(`# 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.
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ .Name }}-fetcher
-  namespace: {{ .Namespace }}
-  labels:
-    app: fetcher
-    operator.skywalking.apache.org/fetcher-name: {{ .Name }}
-    operator.skywalking.apache.org/application: fetcher
-    operator.skywalking.apache.org/component: deployment
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: fetcher
-      operator.skywalking.apache.org/fetcher-name: {{ .Name }}
-  template:
-    metadata:
-      labels:
-        app: fetcher
-        operator.skywalking.apache.org/fetcher-name: {{ .Name }}
-        operator.skywalking.apache.org/application: fetcher
-        operator.skywalking.apache.org/component: pod
-    spec:
-      serviceAccountName: {{ .Name }}-fetcher
-      containers:
-        - args:
-            - --log-level=DEBUG
-            - --config=/conf/collector.yaml
-          image: otel/opentelemetry-collector:0.18.0
-          imagePullPolicy: IfNotPresent
-          name: otc-container
-          volumeMounts:
-            - mountPath: /conf
-              name: otc-internal
-      volumes:
-        - configMap:
-            defaultMode: 420
-            items:
-              - key: collector.yaml
-                path: collector.yaml
-            name: {{ .Name }}-fetcher
-          name: otc-internal
-`)
-
-func fetcherTemplatesDeploymentYamlBytes() ([]byte, error) {
-	return _fetcherTemplatesDeploymentYaml, nil
-}
-
-func fetcherTemplatesDeploymentYaml() (*asset, error) {
-	bytes, err := fetcherTemplatesDeploymentYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "fetcher/templates/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5d, 0xe2, 0x26, 0x9b, 0x90, 0xa9, 0x58, 0x5b, 0xce, 0xda, 0x61, 0x85, 0x4c, 0x9a, 0xfc, 0x29, 0xab, 0x6f, 0xd6, 0x48, 0x92, 0x24, 0xa5, 0x5a, 0xc6, 0xf6, 0xe, 0x54, 0xe5, 0xaf, 0xca, 0x3a}}
-	return a, nil
-}
-
-var _fetcherTemplatesService_accountYaml = []byte(`# 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.
-
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: {{ .Name }}-fetcher
-  namespace: {{ .Namespace }}
-  labels:
-    operator.skywalking.apache.org/fetcher-name: {{ .Name }}
-    operator.skywalking.apache.org/application: fetcher
-    operator.skywalking.apache.org/component: rbac
-`)
-
-func fetcherTemplatesService_accountYamlBytes() ([]byte, error) {
-	return _fetcherTemplatesService_accountYaml, nil
-}
-
-func fetcherTemplatesService_accountYaml() (*asset, error) {
-	bytes, err := fetcherTemplatesService_accountYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "fetcher/templates/service_account.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb, 0x75, 0x7a, 0xa, 0x7f, 0xf7, 0x92, 0x19, 0x6b, 0x9d, 0x83, 0x8f, 0xf3, 0x4, 0x78, 0xe, 0x5a, 0x50, 0xab, 0x85, 0xd7, 0xc8, 0x78, 0xc3, 0x68, 0x53, 0xd3, 0xc6, 0x66, 0x93, 0xf3, 0x5c}}
-	return a, nil
-}
-
-var _injectorTemplatesAnnotationsYaml = []byte(`# 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.
-
-# name means the reference to configuration used in pod's annotations.
-# defaultValue is the default value in agent.config
-# vaildateFunc means use which function to validate the value
-# Notice , the vaildateFunc must exist in validate.go , 
-# if don't have the vaildateFunc , please set nil
-# envName is the environment variable in agent.config
-
-annotations:
-  # Next is the annotation of the sidecar configuration
-  - name: sidecar.skywalking.apache.org/initcontainer.Name
-    defaultValue: inject-skywalking-agent
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/initcontainer.Image
-    defaultValue: apache/skywalking-java-agent:8.8.0-java8
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/initcontainer.Command
-    defaultValue: sh
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/initcontainer.args.Option
-    defaultValue: -c
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/initcontainer.args.Command
-    defaultValue: "mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent"
-    validateFunc: nil
-    envName: nil
-  
-  - name: sidecar.skywalking.apache.org/initcontainer.resources.limits
-    defaultValue: nil
-    validateFunc: ValidateResourceRequirements
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/initcontainer.resources.requests
-    defaultValue: nil
-    validateFunc: ValidateResourceRequirements
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/sidecarVolume.Name
-    defaultValue: sky-agent
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/sidecarVolumeMount.MountPath
-    defaultValue: /sky/agent
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/configmapVolume.ConfigMap.Name
-    defaultValue: skywalking-swck-java-agent-configmap
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/configmapVolume.Name
-    defaultValue: java-agent-configmap-volume
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/configmapVolumeMount.MountPath
-    defaultValue: /sky/agent/config
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/env.Name
-    defaultValue: JAVA_TOOL_OPTIONS
-    validateFunc: nil
-    envName: nil
-
-  - name: sidecar.skywalking.apache.org/env.Value
-    defaultValue: -javaagent:/sky/agent/skywalking-agent.jar
-    validateFunc: nil
-    envName: nil
-
-  # Next is the annotation of the java agent configuration
-  - name: agent.skywalking.apache.org/agent.service_name
-    defaultValue: Your_ApplicationName
-    validateFunc: ValidateServiceName
-    envName: SW_AGENT_NAME
-
-  - name: agent.skywalking.apache.org/collector.backend_service
-    defaultValue: 127.0.0.1:11800
-    validateFunc: ValidateBackendServices
-    envName: SW_AGENT_COLLECTOR_BACKEND_SERVICES`)
-
-func injectorTemplatesAnnotationsYamlBytes() ([]byte, error) {
-	return _injectorTemplatesAnnotationsYaml, nil
-}
-
-func injectorTemplatesAnnotationsYaml() (*asset, error) {
-	bytes, err := injectorTemplatesAnnotationsYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "injector/templates/annotations.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0xbb, 0xd0, 0x87, 0x78, 0x4, 0xac, 0x18, 0x3a, 0xf7, 0xff, 0xcc, 0x99, 0x72, 0x42, 0xd, 0xa4, 0xcb, 0xfa, 0x78, 0x6a, 0x39, 0xbd, 0xb8, 0xfd, 0x8b, 0x25, 0x26, 0x8f, 0xa, 0x9e, 0x1f}}
-	return a, nil
-}
-
-var _injectorTemplatesConfigmapYaml = []byte(`# 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.
-
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: skywalking-swck-java-agent-configmap 
-  namespace: skywalking-swck-system
-data:
-  agent.config: |
-    {{- $anno := getAgentAnnotations }}
-    {{- range $anno -}}
-    {{- if ne .DefaultValue "nil" }}
-    {{parse .Name}}=${ {{- .EnvName}}:{{.DefaultValue -}} }
-    {{- else}}
-    {{parse .Name}}=${ {{- .EnvName}}:}
-    {{- end -}}
-    {{- end -}}`)
-
-func injectorTemplatesConfigmapYamlBytes() ([]byte, error) {
-	return _injectorTemplatesConfigmapYaml, nil
-}
-
-func injectorTemplatesConfigmapYaml() (*asset, error) {
-	bytes, err := injectorTemplatesConfigmapYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "injector/templates/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc6, 0xee, 0xc8, 0x3f, 0x93, 0x98, 0x46, 0x72, 0x7e, 0x19, 0xa, 0x17, 0xc3, 0x8a, 0x76, 0x3f, 0xf5, 0x5f, 0x15, 0x53, 0x27, 0x92, 0xdc, 0xcc, 0x6c, 0x99, 0x70, 0x38, 0x7c, 0x75, 0x4e, 0x25}}
-	return a, nil
-}
-
-var _injectorTemplatesJavaagentYaml = []byte(`# 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.
-
-{{- $configuration := config }}
-apiVersion: operator.skywalking.apache.org/v1alpha1
-kind: JavaAgent
-metadata:
-  name: {{SelectorName}}-javaagent
-  namespace: {{Namespace}}
-  ownerReferences:
-  - apiVersion: {{ownerReference.APIVersion}}
-    blockOwnerDeletion: {{ownerReference.BlockOwnerDeletion}}
-    controller: {{ownerReference.Controller}}
-    kind: {{ownerReference.Kind}}
-    name: {{ownerReference.Name}}
-    uid: {{ownerReference.UID}}
-spec:
-  podSelector: {{PodSelector}}
-  serviceName: {{ServiceName}}
-  backendService: {{BackendService}}
-  agentConfiguration: 
-  {{ range $key, $value := $configuration }}
-    {{$key}}: {{$value}}
-  {{- end -}}`)
-
-func injectorTemplatesJavaagentYamlBytes() ([]byte, error) {
-	return _injectorTemplatesJavaagentYaml, nil
-}
-
-func injectorTemplatesJavaagentYaml() (*asset, error) {
-	bytes, err := injectorTemplatesJavaagentYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "injector/templates/javaagent.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x97, 0x6d, 0x88, 0xd3, 0x8d, 0xaa, 0x80, 0x98, 0xd0, 0x29, 0x76, 0x5e, 0x57, 0x90, 0xdf, 0x8a, 0x29, 0xb5, 0x7d, 0x71, 0x5e, 0xc2, 0xb4, 0xcb, 0xfa, 0x46, 0x29, 0x3c, 0x71, 0xd2, 0x74, 0x32}}
-	return a, nil
-}
-
-var _oapserverTemplatesCluster_roleYaml = []byte(`# 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.
-
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: swck:oapserver
-  labels:
-    operator.skywalking.apache.org/application: oapserver
-    operator.skywalking.apache.org/component: rbac
-rules:
-  - apiGroups: [""]
-    resources: ["pods", "endpoints", "services"]
-    verbs: ["get", "watch", "list"]
-  - apiGroups: ["extensions"]
-    resources: ["deployments", "replicasets"]
-    verbs: ["get", "watch", "list"]
-`)
-
-func oapserverTemplatesCluster_roleYamlBytes() ([]byte, error) {
-	return _oapserverTemplatesCluster_roleYaml, nil
-}
-
-func oapserverTemplatesCluster_roleYaml() (*asset, error) {
-	bytes, err := oapserverTemplatesCluster_roleYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "oapserver/templates/cluster_role.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb5, 0xde, 0x59, 0x47, 0x2c, 0x69, 0xe9, 0xcd, 0x7e, 0xa7, 0x4, 0xf7, 0xf2, 0xa0, 0x1a, 0x1b, 0xb6, 0xa3, 0x42, 0xb3, 0x20, 0x49, 0x9b, 0x2f, 0x81, 0x87, 0xa0, 0x95, 0x73, 0x49, 0x6a, 0xdb}}
-	return a, nil
-}
-
-var _oapserverTemplatesCluster_role_bindingYaml = []byte(`# 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.
-
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: swck:oapserver
-  labels:
-    operator.skywalking.apache.org/application: oapserver
-    operator.skywalking.apache.org/component: rbac
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: swck:oapserver
-subjects:
-  - kind: ServiceAccount
-    name: {{ .Name }}-oap
-    namespace: {{ .Namespace }}
-`)
-
-func oapserverTemplatesCluster_role_bindingYamlBytes() ([]byte, error) {
-	return _oapserverTemplatesCluster_role_bindingYaml, nil
-}
-
-func oapserverTemplatesCluster_role_bindingYaml() (*asset, error) {
-	bytes, err := oapserverTemplatesCluster_role_bindingYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "oapserver/templates/cluster_role_binding.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x15, 0xc5, 0xe0, 0xe7, 0x4e, 0xeb, 0xed, 0x61, 0xda, 0xad, 0x6c, 0x43, 0xf, 0x80, 0x5, 0x4c, 0x47, 0xbc, 0x20, 0xe7, 0xc6, 0xdf, 0x63, 0xcf, 0x9b, 0x54, 0x56, 0x1f, 0x4, 0xbf, 0x1c}}
-	return a, nil
-}
-
-var _oapserverTemplatesDeploymentYaml = []byte(`# 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.
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ .Name }}-oap
-  namespace: {{ .Namespace }}
-  labels:
-    app: oap
-    operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-    operator.skywalking.apache.org/application: oapserver
-    operator.skywalking.apache.org/component: deployment
-
-spec:
-  replicas: {{ .Spec.Instances }}
-  minReadySeconds: 5
-  selector:
-    matchLabels:
-      app: oap
-      operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-  template:
-    metadata:
-      labels:
-        app: oap
-        operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-        operator.skywalking.apache.org/application: oapserver
-        operator.skywalking.apache.org/component: pod
-    spec:
-      serviceAccountName: {{ .Name }}-oap
-      affinity:
-        podAntiAffinity:
-          preferredDuringSchedulingIgnoredDuringExecution:
-            - weight: 1
-              podAffinityTerm:
-                topologyKey: kubernetes.io/hostname
-                labelSelector:
-                  matchLabels:
-                    app: oap
-                    operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-      containers:
-        - name: oap
-          image: {{ .Spec.Image }}
-          imagePullPolicy: IfNotPresent
-          ports:
-            - containerPort: 11800
-              name: grpc
-            - containerPort: 12800
-              name: rest
-            - containerPort: 1234
-              name: http-monitoring
-          livenessProbe:
-            initialDelaySeconds: 10
-            timeoutSeconds: 10
-            periodSeconds: 30
-            failureThreshold: 10
-            successThreshold: 1
-            exec:
-              command:
-                - /skywalking/bin/swctl
-                - ch
-          readinessProbe:
-            initialDelaySeconds: 10
-            timeoutSeconds: 10
-            periodSeconds: 30
-            failureThreshold: 10
-            successThreshold: 1
-            exec:
-              command:
-                - /skywalking/bin/swctl
-                - ch
-          {{if .Spec.StorageConfig.Storage.Spec.Security.TLS}}
-          volumeMounts:
-            - name: cert
-              mountPath: /skywalking/p12
-          {{end}}
-          env:
-            - name: JAVA_OPTS
-              value: -Xmx2048M
-            - name: SW_CLUSTER
-              value: kubernetes
-            - name: SW_CLUSTER_K8S_NAMESPACE
-              value: "{{ .Namespace }}"
-            - name: SW_CLUSTER_K8S_LABEL
-              value: "app=oap,operator.skywalking.apache.org/oap-server-name={{ .Name }}"
-            - name: SKYWALKING_COLLECTOR_UID
-              valueFrom:
-                fieldRef:
-                  fieldPath: metadata.uid
-            - name: SW_TELEMETRY
-              value: prometheus
-            - name: SW_HEALTH_CHECKER
-              value: default
-          {{range .Spec.Config}}
-            - name: {{ .Name }}
-              value: {{ .Value }}
-          {{end}}
-      {{if .Spec.StorageConfig.Storage.Spec.Security.TLS}}
-      volumes:
-        - name: cert
-          secret:
-            secretName:  "skywalking-storage"
-      {{end}}
-`)
-
-func oapserverTemplatesDeploymentYamlBytes() ([]byte, error) {
-	return _oapserverTemplatesDeploymentYaml, nil
-}
-
-func oapserverTemplatesDeploymentYaml() (*asset, error) {
-	bytes, err := oapserverTemplatesDeploymentYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "oapserver/templates/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcf, 0x8a, 0xdc, 0x5b, 0xc4, 0x54, 0x0, 0xa7, 0xe0, 0x7d, 0xb1, 0x27, 0x71, 0x22, 0xf5, 0xfd, 0x8a, 0x64, 0x6b, 0xa, 0x70, 0x4b, 0x37, 0x3d, 0x9a, 0x14, 0xa8, 0x3d, 0x29, 0x59, 0xe2, 0xc2}}
-	return a, nil
-}
-
-var _oapserverTemplatesIngressYaml = []byte(`# 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.
- 
-{{- $ingress := .Spec.Service.Ingress }}
-{{ if $ingress.Host }}
-apiVersion: networking.k8s.io/v1beta1
-kind: Ingress
-metadata:
-  name: {{ .Name }}-ui
-  namespace: {{ .Namespace }}
-  labels:
-    app: ui
-    operator.skywalking.apache.org/ui-name: {{ .Name }}
-    operator.skywalking.apache.org/application: ui
-    operator.skywalking.apache.org/component: deployment
-  annotations:
-    {{- range $key, $value := $ingress.Annotations }}
-    {{ $key }}: {{ $value | quote }}
-    {{- end }}
-spec:
-  rules:
-    - host: {{ $ingress.Host }}
-      http:
-        paths:
-          - path: /*
-            backend:
-              serviceName: {{ .Name }}-oap
-              servicePort: 12800
-  {{- if $ingress.IngressClassName }}
-  ingressClassName: {{ $ingress.IngressClassName }}
-  {{end}}
-  {{- if $ingress.TLS }}
-  tls:
-{{ toYAML $ingress.TLS | indent 4 }}
-  {{end}}
-{{end}}
-`)
-
-func oapserverTemplatesIngressYamlBytes() ([]byte, error) {
-	return _oapserverTemplatesIngressYaml, nil
-}
-
-func oapserverTemplatesIngressYaml() (*asset, error) {
-	bytes, err := oapserverTemplatesIngressYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "oapserver/templates/ingress.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0x2, 0xeb, 0x33, 0x6f, 0x15, 0x7c, 0x82, 0x23, 0x94, 0xe1, 0x20, 0x4f, 0x3, 0xd7, 0x23, 0xc6, 0xd0, 0x3a, 0xc6, 0x44, 0x3a, 0xc0, 0x8f, 0xeb, 0x47, 0x57, 0x9a, 0x2d, 0x49, 0xea, 0x5a}}
-	return a, nil
-}
-
-var _oapserverTemplatesServiceYaml = []byte(`# 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.
-
-{{- $svc := .Spec.Service.Template }}
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ .Name }}-oap
-  namespace: {{ .Namespace }}
-  labels:
-    app: oap
-    operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-    operator.skywalking.apache.org/application: oapserver
-    operator.skywalking.apache.org/component: service
-spec:
-  type: {{ $svc.Type }}
-  ports:
-  - port: 12800
-    name: rest
-  - port: 11800
-    name: grpc
-  - port: 1234
-    name: http-monitoring
-  {{- if $svc.ExternalIPs }}
-  externalIPs:
-    {{- range $value := $svc.ExternalIPs }}
-    - {{ $value | quote }}
-    {{- end }}
-  {{- end }}
-  {{- if $svc.LoadBalancerIP }}
-  loadBalancerIP: {{ $svc.LoadBalancerIP }}
-  {{- end }}
-  {{- if $svc.LoadBalancerSourceRanges }}
-  loadBalancerSourceRanges:
-    {{- range $value := $svc.LoadBalancerSourceRanges }}
-    - {{ $value | quote }}
-    {{- end }}
-  {{- end }}
-  selector:
-    app: oap
-    operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-
-`)
-
-func oapserverTemplatesServiceYamlBytes() ([]byte, error) {
-	return _oapserverTemplatesServiceYaml, nil
-}
-
-func oapserverTemplatesServiceYaml() (*asset, error) {
-	bytes, err := oapserverTemplatesServiceYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "oapserver/templates/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x76, 0x46, 0xaa, 0x13, 0x1b, 0x93, 0x29, 0x97, 0xcd, 0xa3, 0x61, 0xf2, 0x8f, 0x2d, 0xf, 0xcd, 0x88, 0xf6, 0xd, 0x32, 0xae, 0x16, 0x3e, 0x55, 0x33, 0x43, 0xe9, 0x16, 0xd0, 0xe2, 0xe0}}
-	return a, nil
-}
-
-var _oapserverTemplatesService_accountYaml = []byte(`# 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.
-
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: {{ .Name }}-oap
-  namespace: {{ .Namespace }}
-  labels:
-    operator.skywalking.apache.org/oap-server-name: {{ .Name }}
-    operator.skywalking.apache.org/application: oapserver
-    operator.skywalking.apache.org/component: rbac
-
-`)
-
-func oapserverTemplatesService_accountYamlBytes() ([]byte, error) {
-	return _oapserverTemplatesService_accountYaml, nil
-}
-
-func oapserverTemplatesService_accountYaml() (*asset, error) {
-	bytes, err := oapserverTemplatesService_accountYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "oapserver/templates/service_account.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x35, 0x3b, 0x36, 0x6, 0xcc, 0x9, 0x84, 0x7d, 0x62, 0x48, 0x31, 0xcf, 0x17, 0xec, 0xd1, 0xdd, 0x83, 0x0, 0x86, 0x6a, 0x50, 0xd5, 0xb6, 0x4a, 0x23, 0xdc, 0xea, 0xd, 0x80, 0x87, 0x2, 0x24}}
-	return a, nil
-}
-
-var _satelliteTemplatesCluster_roleYaml = []byte(`# 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.
-
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: swck:satellite
-  labels:
-    operator.skywalking.apache.org/application: satellite
-    operator.skywalking.apache.org/component: rbac
-rules:
-  - apiGroups: [""]
-    resources: ["pods"]
-    verbs: ["get", "watch", "list"]
-`)
-
-func satelliteTemplatesCluster_roleYamlBytes() ([]byte, error) {
-	return _satelliteTemplatesCluster_roleYaml, nil
-}
-
-func satelliteTemplatesCluster_roleYaml() (*asset, error) {
-	bytes, err := satelliteTemplatesCluster_roleYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "satellite/templates/cluster_role.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0xac, 0x31, 0xd6, 0xa9, 0x74, 0x27, 0xd4, 0x72, 0xae, 0x44, 0x61, 0x28, 0x6c, 0x78, 0xdc, 0x7e, 0x33, 0x46, 0x89, 0xab, 0x7b, 0x33, 0x14, 0x6, 0x36, 0xc, 0x2, 0x5b, 0xe9, 0x4a, 0x33}}
-	return a, nil
-}
-
-var _satelliteTemplatesCluster_role_bindingYaml = []byte(`# 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.
-
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: swck:satellite
-  labels:
-    operator.skywalking.apache.org/application: satellite
-    operator.skywalking.apache.org/component: rbac
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: swck:satellite
-subjects:
-  - kind: ServiceAccount
-    name: {{ .Name }}-satellite
-    namespace: {{ .Namespace }}
-`)
-
-func satelliteTemplatesCluster_role_bindingYamlBytes() ([]byte, error) {
-	return _satelliteTemplatesCluster_role_bindingYaml, nil
-}
-
-func satelliteTemplatesCluster_role_bindingYaml() (*asset, error) {
-	bytes, err := satelliteTemplatesCluster_role_bindingYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "satellite/templates/cluster_role_binding.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0x26, 0xd9, 0xd1, 0xb, 0x1c, 0xce, 0x45, 0x3c, 0xc6, 0xbe, 0xe7, 0xd2, 0x79, 0x7, 0xdc, 0x3c, 0x8a, 0xd5, 0xb8, 0x50, 0x37, 0x39, 0xd4, 0xc8, 0xc7, 0x7a, 0x4c, 0x54, 0x4d, 0x9f, 0xfe}}
-	return a, nil
-}
-
-var _satelliteTemplatesDeploymentYaml = []byte(`# 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.
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ .Name }}-satellite
-  namespace: {{ .Namespace }}
-  labels:
-    app: satellite
-    operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-    operator.skywalking.apache.org/application: satellite
-    operator.skywalking.apache.org/component: deployment
-
-spec:
-  replicas: {{ .Spec.Instances }}
-  minReadySeconds: 5
-  selector:
-    matchLabels:
-      app: satellite
-      operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-  template:
-    metadata:
-      labels:
-        app: satellite
-        operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-        operator.skywalking.apache.org/application: satellite
-        operator.skywalking.apache.org/component: pod
-    spec:
-      serviceAccountName: {{ .Name }}-satellite
-      affinity:
-        podAntiAffinity:
-          preferredDuringSchedulingIgnoredDuringExecution:
-            - weight: 1
-              podAffinityTerm:
-                topologyKey: kubernetes.io/hostname
-                labelSelector:
-                  matchLabels:
-                    app: satellite
-                    operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-      containers:
-        - name: satellite
-          image: {{ .Spec.Image }}
-          imagePullPolicy: IfNotPresent
-          ports:
-            - containerPort: 11800
-              name: grpc
-            - containerPort: 1234
-              name: http-monitoring
-          readinessProbe:
-            tcpSocket:
-              port: 11800
-            initialDelaySeconds: 15
-            periodSeconds: 20
-          env:
-            - name: SATELLITE_GRPC_CLIENT_FINDER
-              value: kubernetes
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_NAMESPACE
-              value: "{{ .Namespace }}"
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_KIND
-              value: pod
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_SELECTOR_LABEL
-              value: "app=oap,operator.skywalking.apache.org/oap-server-name={{ .Spec.OAPServerName }}"
-            - name: SATELLITE_GRPC_CLIENT_KUBERNETES_EXTRA_PORT
-              value: "11800"
-            {{range .Spec.Config}}
-            - name: {{ .Name }}
-              value: "{{ .Value }}"
-            {{end}}
-`)
-
-func satelliteTemplatesDeploymentYamlBytes() ([]byte, error) {
-	return _satelliteTemplatesDeploymentYaml, nil
-}
-
-func satelliteTemplatesDeploymentYaml() (*asset, error) {
-	bytes, err := satelliteTemplatesDeploymentYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "satellite/templates/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd4, 0x11, 0x1b, 0x8f, 0x75, 0x86, 0x9c, 0x13, 0xaf, 0x30, 0xea, 0xfa, 0xd3, 0x53, 0x15, 0x3c, 0xc5, 0x36, 0xf0, 0x21, 0x57, 0x4f, 0xb3, 0x47, 0xa1, 0xbc, 0xb3, 0x33, 0xda, 0x12, 0x9c, 0x34}}
-	return a, nil
-}
-
-var _satelliteTemplatesServiceYaml = []byte(`# 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.
-
-{{- $svc := .Spec.Service.Template }}
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ .Name }}-satellite
-  namespace: {{ .Namespace }}
-  labels:
-    app: satellite
-    operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-    operator.skywalking.apache.org/application: satellite
-    operator.skywalking.apache.org/component: service
-spec:
-  type: {{ $svc.Type }}
-  ports:
-  - port: 11800
-    name: grpc
-  - port: 1234
-    name: http-monitoring
-  {{- if $svc.ExternalIPs }}
-  externalIPs:
-    {{- range $value := $svc.ExternalIPs }}
-    - {{ $value | quote }}
-    {{- end }}
-  {{- end }}
-  {{- if $svc.LoadBalancerIP }}
-  loadBalancerIP: {{ $svc.LoadBalancerIP }}
-  {{- end }}
-  {{- if $svc.LoadBalancerSourceRanges }}
-  loadBalancerSourceRanges:
-    {{- range $value := $svc.LoadBalancerSourceRanges }}
-    - {{ $value | quote }}
-    {{- end }}
-  {{- end }}
-  selector:
-    app: satellite
-    operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-`)
-
-func satelliteTemplatesServiceYamlBytes() ([]byte, error) {
-	return _satelliteTemplatesServiceYaml, nil
-}
-
-func satelliteTemplatesServiceYaml() (*asset, error) {
-	bytes, err := satelliteTemplatesServiceYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "satellite/templates/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0x52, 0xf7, 0xe, 0x18, 0x89, 0xda, 0x3a, 0x6d, 0x98, 0x3a, 0x3a, 0x15, 0xd8, 0x8b, 0x30, 0x1c, 0xfe, 0x6f, 0x52, 0x4a, 0x2d, 0x96, 0x1d, 0x49, 0x18, 0xb1, 0xf, 0x97, 0xa4, 0xac, 0x28}}
-	return a, nil
-}
-
-var _satelliteTemplatesService_accountYaml = []byte(`# 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.
-
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: {{ .Name }}-satellite
-  namespace: {{ .Namespace }}
-  labels:
-    operator.skywalking.apache.org/satellite-server-name: {{ .Name }}
-    operator.skywalking.apache.org/application: satellite
-    operator.skywalking.apache.org/component: rbac
-`)
-
-func satelliteTemplatesService_accountYamlBytes() ([]byte, error) {
-	return _satelliteTemplatesService_accountYaml, nil
-}
-
-func satelliteTemplatesService_accountYaml() (*asset, error) {
-	bytes, err := satelliteTemplatesService_accountYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "satellite/templates/service_account.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0x7c, 0xee, 0xa4, 0xdb, 0xf1, 0x4b, 0x6b, 0x79, 0x1a, 0x30, 0x7f, 0x16, 0xa5, 0xf1, 0x4b, 0x58, 0xae, 0xbf, 0xc1, 0xad, 0xfb, 0xd6, 0xed, 0x48, 0x97, 0xda, 0xb0, 0xed, 0x90, 0xab, 0x7d}}
-	return a, nil
-}
-
-var _storageElasticsearchTemplatesConfigmapYaml = []byte(`# 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.
-
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: {{ .Name }}-config
-  namespace: {{ .Namespace }}
-data:
-  elasticsearch.yml: |
-      network.host: 0.0.0.0
-      {{ if .Spec.Security.User.SecretName }}
-      xpack.security.enabled: true
-      xpack.security.transport.ssl.enabled: true
-      xpack.security.transport.ssl.verification_mode: certificate
-      xpack.security.transport.ssl.keystore.path: storage.p12
-      xpack.security.transport.ssl.keystore.password: skywalking
-      xpack.security.transport.ssl.truststore.path: storage.p12
-      xpack.security.transport.ssl.truststore.password: skywalking
-      {{end}}
-      {{ if .Spec.Security.TLS }}
-      xpack.security.http.ssl.enabled: true
-      xpack.security.http.ssl.verification_mode: certificate
-      xpack.security.http.ssl.keystore.path: storage.p12
-      xpack.security.http.ssl.keystore.password: skywalking
-      xpack.security.http.ssl.truststore.path: storage.p12
-      xpack.security.http.ssl.truststore.password: skywalking
-      {{end}}
-
-
-`)
-
-func storageElasticsearchTemplatesConfigmapYamlBytes() ([]byte, error) {
-	return _storageElasticsearchTemplatesConfigmapYaml, nil
-}
-
-func storageElasticsearchTemplatesConfigmapYaml() (*asset, error) {
-	bytes, err := storageElasticsearchTemplatesConfigmapYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "storage/elasticsearch/templates/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x23, 0x88, 0x69, 0x87, 0xef, 0x9a, 0xcc, 0xe6, 0x9b, 0x4e, 0x2b, 0xcc, 0x55, 0x75, 0x78, 0x9d, 0x59, 0x5f, 0x6b, 0xc0, 0x27, 0xa0, 0x8, 0x10, 0xff, 0xb8, 0x38, 0xba, 0xcf, 0xed, 0x1d, 0x9d}}
-	return a, nil
-}
-
-var _storageElasticsearchTemplatesServiceYaml = []byte(`# 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.
-
-kind: Service
-apiVersion: v1
-metadata:
-  name:  {{ .Spec.ServiceName }}
-  namespace: {{ .Namespace }}
-  labels:
-    app: es
-    operator.skywalking.apache.org/es-name: {{ .Name }}
-    operator.skywalking.apache.org/application: elasticsearch
-    operator.skywalking.apache.org/component: service
-spec:
-  clusterIP: None
-  selector:
-    app: es
-    operator.skywalking.apache.org/es-name: {{ .Name }}
-  publishNotReadyAddresses: true
-  ports:
-    - name: http
-      port: 9200
-    - name: transport
-      port: 9300
-
-`)
-
-func storageElasticsearchTemplatesServiceYamlBytes() ([]byte, error) {
-	return _storageElasticsearchTemplatesServiceYaml, nil
-}
-
-func storageElasticsearchTemplatesServiceYaml() (*asset, error) {
-	bytes, err := storageElasticsearchTemplatesServiceYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "storage/elasticsearch/templates/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0xfc, 0xe1, 0x33, 0x2e, 0xc2, 0x4, 0x23, 0x44, 0x26, 0xe5, 0x85, 0x9d, 0x58, 0xe7, 0xe5, 0x2a, 0xee, 0x7e, 0x6c, 0x39, 0xbf, 0x31, 0x4a, 0x49, 0xb9, 0xf7, 0x6b, 0xa8, 0x38, 0x79, 0x82}}
-	return a, nil
-}
-
-var _storageElasticsearchTemplatesService_accountYaml = []byte(`# 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.
-
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: {{ .Name }}-elasticsearch
-  namespace: {{ .Namespace }}
-  labels:
-    operator.skywalking.apache.org/es-name: {{ .Name }}
-    operator.skywalking.apache.org/application: elasticsearch
-    operator.skywalking.apache.org/component: rbac
-`)
-
-func storageElasticsearchTemplatesService_accountYamlBytes() ([]byte, error) {
-	return _storageElasticsearchTemplatesService_accountYaml, nil
-}
-
-func storageElasticsearchTemplatesService_accountYaml() (*asset, error) {
-	bytes, err := storageElasticsearchTemplatesService_accountYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "storage/elasticsearch/templates/service_account.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe6, 0xe2, 0x5d, 0x98, 0xe2, 0xbb, 0x1, 0xf0, 0x92, 0x2e, 0x76, 0x6f, 0xc2, 0x7d, 0x95, 0x7, 0xd4, 0x74, 0xa7, 0x40, 0x55, 0x1f, 0x9f, 0xf9, 0x25, 0x92, 0x9f, 0xea, 0x13, 0x49, 0xca, 0x43}}
-	return a, nil
-}
-
-var _storageElasticsearchTemplatesStatefulsetYaml = []byte(`# 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.
-
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
-  name: {{ .Name }}-elasticsearch
-  namespace: {{ .Namespace }}
-  labels:
-    app: es
-    operator.skywalking.apache.org/es-name: {{ .Name }}
-    operator.skywalking.apache.org/application: elasticsearch
-    operator.skywalking.apache.org/component: statefulset
-spec:
-  serviceName:  {{ .Spec.ServiceName }}
-  replicas: {{ .Spec.Instances }}
-  selector:
-    matchLabels:
-      app: es
-      operator.skywalking.apache.org/es-name: {{ .Name }}
-  podManagementPolicy: Parallel
-  updateStrategy:
-    type: RollingUpdate
-  template:
-    metadata:
-      labels:
-        app: es
-        operator.skywalking.apache.org/es-name: {{ .Name }}
-        operator.skywalking.apache.org/application: elasticsearch
-        operator.skywalking.apache.org/component: statefulset
-    spec:
-      serviceAccountName: {{ .Name }}-elasticsearch
-      affinity:
-        podAntiAffinity:
-          requiredDuringSchedulingIgnoredDuringExecution:
-              - labelSelector:
-                matchExpressions:
-                  - key: app
-                    operator: In
-                    values:
-                      - "es"
-                topologyKey: kubernetes.io/hostname
-      initContainers:
-        - name: configure-sysctl
-          securityContext:
-            runAsUser: 0
-            privileged: true
-          image: "{{ .Spec.Image }}"
-          imagePullPolicy: IfNotPresent
-          command: [ "sysctl", "-w", "vm.max_map_count=262144" ]
-      containers:
-        - name: elasticsearch
-          image: {{ .Spec.Image }}
-          resources:
-            limits:
-              cpu: {{ .Spec.ResourceCnfig.Limit }}
-            requests:
-              cpu: {{ .Spec.ResourceCnfig.Requests }}
-          imagePullPolicy: IfNotPresent
-          ports:
-            - containerPort: 9200
-              name: http
-              protocol: TCP
-            - containerPort: 9300
-              name: transport
-              protocol: TCP
-          volumeMounts:
-            - name: config
-              mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
-              subPath: elasticsearch.yml
-            {{ if .Spec.Security.User.SecretName }}
-            - name: cert
-              mountPath: "/usr/share/elasticsearch/config/storage.p12"
-              subPath: storage.p12
-            {{end}}
-          env:
-            - name: cluster.name
-              value: "{{ .Name }}-skywalking-es"
-            - name: node.name
-              valueFrom:
-                fieldRef:
-                  fieldPath: metadata.name
-            - name: thread_pool.write.queue_size
-              value: "1000"
-            {{ range .Spec.Config }}
-            - name: {{ .Name }}
-              value: {{ .Value }}
-            {{end}}
-          readinessProbe:
-            exec:
-              command:
-                - sh
-                - -c
-                - |
-                  #!/usr/bin/env bash -e
-                  # Exit if ELASTIC_PASSWORD in unset
-                  if [ -z "${ELASTIC_PASSWORD}" ]; then
-                    echo "ELASTIC_PASSWORD variable is missing, exiting"
-                    exit 1
-                  fi
-                  # If the node is starting up wait for the cluster to be ready (request params: "wait_for_status=green&timeout=1s" )
-                  # Once it has started only check that the node itself is responding
-                  START_FILE=/tmp/.es_start_file
-                  http () {
-                    local path="${1}"
-                    local args="${2}"
-                    set -- -XGET -s
-                    if [ "$args" != "" ]; then
-                      set -- "$@" $args
-                    fi
-                    set -- "$@" -u "elastic:${ELASTIC_PASSWORD}"
-                    curl --output /dev/null -k "$@" "{{ getProtocol .Spec.Security.TLS }}://127.0.0.1:9200${path}"
-                  }
-                  if [ -f "${START_FILE}" ]; then
-                    echo 'Elasticsearch is already running, lets check the node is healthy'
-                    HTTP_CODE=$(http "/" "-w %{http_code}")
-                    RC=$?
-                    if [[ ${RC} -ne 0 ]]; then
-                      echo "curl --output /dev/null -k -XGET -s -w '%{http_code}' \${BASIC_AUTH} {{ getProtocol .Spec.Security.TLS }}://127.0.0.1:9200/ failed with RC ${RC}"
-                      exit ${RC}
-                    fi
-                    # ready if HTTP code 200
-                    if [[ ${HTTP_CODE} == "200" ]]; then
-                      exit 0
-                    else
-                      echo "curl --output /dev/null -k -XGET -s -w '%{http_code}' \${BASIC_AUTH} {{ getProtocol .Spec.Security.TLS }}://127.0.0.1:9200/ failed with HTTP code ${HTTP_CODE}"
-                      exit 1
-                    fi
-                  else
-                    echo 'Waiting for elasticsearch cluster to become ready (request params: "wait_for_status=green&timeout=1s" )'
-                    if http "/_cluster/health?wait_for_status=green&timeout=1s" "--fail" ; then
-                      touch ${START_FILE}
-                      exit 0
-                    else
-                      echo 'Cluster is not yet ready (request params: "wait_for_status=green&timeout=1s" )'
-                      exit 1
-                    fi
-                  fi
-            failureThreshold: 10
-            initialDelaySeconds: 10
-            periodSeconds: 12
-            successThreshold: 1
-            timeoutSeconds: 12
-      volumes:
-        - name: config
-          configMap:
-            name: {{ .Name }}-config
-            items:
-                - key: elasticsearch.yml
-                  path: elasticsearch.yml
-        {{ if .Spec.Security.User.SecretName }}
-        - name: cert
-          secret:
-            secretName:  "skywalking-storage"
-        {{end}}`)
-
-func storageElasticsearchTemplatesStatefulsetYamlBytes() ([]byte, error) {
-	return _storageElasticsearchTemplatesStatefulsetYaml, nil
-}
-
-func storageElasticsearchTemplatesStatefulsetYaml() (*asset, error) {
-	bytes, err := storageElasticsearchTemplatesStatefulsetYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "storage/elasticsearch/templates/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x54, 0x31, 0xb6, 0xbf, 0xaf, 0xb2, 0x47, 0xea, 0xb2, 0x4f, 0x5, 0x54, 0xd6, 0x55, 0xa2, 0x68, 0x47, 0xb2, 0x78, 0x3a, 0xf3, 0x9, 0xf4, 0x56, 0x12, 0xd4, 0x99, 0xcf, 0x23, 0x5e, 0xe7}}
-	return a, nil
-}
-
-var _uiTemplatesDeploymentYaml = []byte(`# 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.
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ .Name }}-ui
-  namespace: {{ .Namespace }}
-  labels:
-    app: ui
-    operator.skywalking.apache.org/ui-name: {{ .Name }}
-    operator.skywalking.apache.org/application: ui
-    operator.skywalking.apache.org/component: deployment
-spec:
-  replicas: {{ .Spec.Instances }}
-  minReadySeconds: 5
-  selector:
-    matchLabels:
-      app: ui
-      operator.skywalking.apache.org/ui-name: {{ .Name }}
-  template:
-    metadata:
-      labels:
-        app: ui
-        operator.skywalking.apache.org/ui-name: {{ .Name }}
-        operator.skywalking.apache.org/application: ui
-        operator.skywalking.apache.org/component: deployment
-    spec:
-      affinity:
-        podAntiAffinity:
-          preferredDuringSchedulingIgnoredDuringExecution:
-            - weight: 1
-              podAffinityTerm:
-                topologyKey: kubernetes.io/hostname
-                labelSelector:
-                  matchLabels:
-                    app: ui
-                    operator.skywalking.apache.org/ui-name: {{ .Name }}
-      containers:
-      - name: ui
-        image: {{ .Spec.Image }}
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 8080
-          name: page
-        livenessProbe:
-          initialDelaySeconds: 10
-          timeoutSeconds: 10
-          periodSeconds: 30
-          failureThreshold: 3
-          successThreshold: 1
-          httpGet:
-            path: /
-            port: 8080
-        readinessProbe:
-          initialDelaySeconds: 10
-          timeoutSeconds: 10
-          periodSeconds: 30
-          failureThreshold: 3
-          successThreshold: 1
-          httpGet:
-            path: /
-            port: 8080
-        env:
-          - name: SW_OAP_ADDRESS
-            value: {{ .Spec.OAPServerAddress }}
-`)
-
-func uiTemplatesDeploymentYamlBytes() ([]byte, error) {
-	return _uiTemplatesDeploymentYaml, nil
-}
-
-func uiTemplatesDeploymentYaml() (*asset, error) {
-	bytes, err := uiTemplatesDeploymentYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "ui/templates/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x19, 0x7d, 0xe7, 0x88, 0xad, 0x5b, 0x81, 0x96, 0xe0, 0xbd, 0x6c, 0xfe, 0x62, 0x8, 0x9f, 0x7b, 0xca, 0x2, 0x25, 0x75, 0x8c, 0x4, 0xee, 0xd4, 0xb9, 0xbf, 0xee, 0x8f, 0x2d, 0xa8, 0x5d, 0xb9}}
-	return a, nil
-}
-
-var _uiTemplatesIngressYaml = []byte(`# 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.
- 
-{{- $ingress := .Spec.Service.Ingress }}
-{{ if $ingress.Host }}
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: {{ .Name }}-ui
-  namespace: {{ .Namespace }}
-  labels:
-    app: ui
-    operator.skywalking.apache.org/ui-name: {{ .Name }}
-    operator.skywalking.apache.org/application: ui
-    operator.skywalking.apache.org/component: deployment
-  annotations:
-    {{- range $key, $value := $ingress.Annotations }}
-    {{ $key }}: {{ $value | quote }}
-    {{- end }}
-spec:
-  rules:
-    - host: {{ $ingress.Host }}
-      http:
-        paths:
-        - backend:
-            service:
-              name: {{ .Name }}-ui
-              port:
-                number: 80
-          path: /
-          pathType: Prefix
-  {{- if $ingress.IngressClassName }}
-  ingressClassName: {{ $ingress.IngressClassName }}
-  {{end}}
-  {{- if $ingress.TLS }}
-  tls:
-{{ toYAML $ingress.TLS | indent 4 }}
-  {{end}}
-{{end}}
-`)
-
-func uiTemplatesIngressYamlBytes() ([]byte, error) {
-	return _uiTemplatesIngressYaml, nil
-}
-
-func uiTemplatesIngressYaml() (*asset, error) {
-	bytes, err := uiTemplatesIngressYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "ui/templates/ingress.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa7, 0x22, 0xaf, 0xa7, 0x77, 0x36, 0x3a, 0x57, 0x1c, 0x52, 0x67, 0x42, 0xa0, 0x4a, 0xcf, 0xf7, 0xe9, 0x91, 0x75, 0x45, 0xdf, 0xdc, 0xa3, 0x68, 0x5c, 0x79, 0xc0, 0xbe, 0xf8, 0xb1, 0x61, 0x5e}}
-	return a, nil
-}
-
-var _uiTemplatesServiceYaml = []byte(`# Licensed to the 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.
-# The 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.
-{{- $svc := .Spec.Service.Template }}
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ .Name }}-ui
-  namespace: {{ .Namespace }}
-  labels:
-    app: ui
-    operator.skywalking.apache.org/ui-name: {{ .Name }}
-    operator.skywalking.apache.org/application: ui
-    operator.skywalking.apache.org/component: service
-spec:
-  type: {{ $svc.Type }}
-  ports:
-    - port: 80
-      targetPort: 8080
-      name: page
-  {{- if $svc.ExternalIPs }}
-  externalIPs:
-    {{- range $value := $svc.ExternalIPs }}
-    - {{ $value | quote }}
-    {{- end }}
-  {{- end }}
-  {{- if $svc.LoadBalancerIP }}
-  loadBalancerIP: {{ $svc.LoadBalancerIP }}
-  {{- end }}
-  {{- if $svc.LoadBalancerSourceRanges }}
-  loadBalancerSourceRanges:
-    {{- range $value := $svc.LoadBalancerSourceRanges }}
-    - {{ $value | quote}}
-    {{- end }}
-  {{- end }}
-  selector:
-    app: ui
-    operator.skywalking.apache.org/ui-name: {{ .Name }}
-`)
-
-func uiTemplatesServiceYamlBytes() ([]byte, error) {
-	return _uiTemplatesServiceYaml, nil
-}
-
-func uiTemplatesServiceYaml() (*asset, error) {
-	bytes, err := uiTemplatesServiceYamlBytes()
-	if err != nil {
-		return nil, err
-	}
-
-	info := bindataFileInfo{name: "ui/templates/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x25, 0xdf, 0xf0, 0x9e, 0x39, 0xbe, 0x97, 0x7e, 0x89, 0xb8, 0xc7, 0xa8, 0xc7, 0x13, 0x20, 0x9c, 0x33, 0x24, 0xb7, 0xa7, 0x83, 0x42, 0xf3, 0xdc, 0xd6, 0x4a, 0x53, 0x16, 0x48, 0x83, 0x36, 0x9e}}
-	return a, nil
-}
-
-// Asset loads and returns the asset for the given name.
-// It returns an error if the asset could not be found or
-// could not be loaded.
-func Asset(name string) ([]byte, error) {
-	canonicalName := strings.Replace(name, "\\", "/", -1)
-	if f, ok := _bindata[canonicalName]; ok {
-		a, err := f()
-		if err != nil {
-			return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
-		}
-		return a.bytes, nil
-	}
-	return nil, fmt.Errorf("Asset %s not found", name)
-}
-
-// AssetString returns the asset contents as a string (instead of a []byte).
-func AssetString(name string) (string, error) {
-	data, err := Asset(name)
-	return string(data), err
-}
-
-// MustAsset is like Asset but panics when Asset would return an error.
-// It simplifies safe initialization of global variables.
-func MustAsset(name string) []byte {
-	a, err := Asset(name)
-	if err != nil {
-		panic("asset: Asset(" + name + "): " + err.Error())
-	}
-
-	return a
-}
-
-// MustAssetString is like AssetString but panics when Asset would return an
-// error. It simplifies safe initialization of global variables.
-func MustAssetString(name string) string {
-	return string(MustAsset(name))
-}
-
-// AssetInfo loads and returns the asset info for the given name.
-// It returns an error if the asset could not be found or
-// could not be loaded.
-func AssetInfo(name string) (os.FileInfo, error) {
-	canonicalName := strings.Replace(name, "\\", "/", -1)
-	if f, ok := _bindata[canonicalName]; ok {
-		a, err := f()
-		if err != nil {
-			return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
-		}
-		return a.info, nil
-	}
-	return nil, fmt.Errorf("AssetInfo %s not found", name)
-}
-
-// AssetDigest returns the digest of the file with the given name. It returns an
-// error if the asset could not be found or the digest could not be loaded.
-func AssetDigest(name string) ([sha256.Size]byte, error) {
-	canonicalName := strings.Replace(name, "\\", "/", -1)
-	if f, ok := _bindata[canonicalName]; ok {
-		a, err := f()
-		if err != nil {
-			return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err)
-		}
-		return a.digest, nil
-	}
-	return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name)
-}
-
-// Digests returns a map of all known files and their checksums.
-func Digests() (map[string][sha256.Size]byte, error) {
-	mp := make(map[string][sha256.Size]byte, len(_bindata))
-	for name := range _bindata {
-		a, err := _bindata[name]()
-		if err != nil {
-			return nil, err
-		}
-		mp[name] = a.digest
-	}
-	return mp, nil
-}
-
-// AssetNames returns the names of the assets.
-func AssetNames() []string {
-	names := make([]string, 0, len(_bindata))
-	for name := range _bindata {
-		names = append(names, name)
-	}
-	return names
-}
-
-// _bindata is a table, holding each asset generator, mapped to its name.
-var _bindata = map[string]func() (*asset, error){
-	"fetcher/templates/cluster_role.yaml":                  fetcherTemplatesCluster_roleYaml,
-	"fetcher/templates/cluster_role_binding.yaml":          fetcherTemplatesCluster_role_bindingYaml,
-	"fetcher/templates/configmap.yaml":                     fetcherTemplatesConfigmapYaml,
-	"fetcher/templates/deployment.yaml":                    fetcherTemplatesDeploymentYaml,
-	"fetcher/templates/service_account.yaml":               fetcherTemplatesService_accountYaml,
-	"injector/templates/annotations.yaml":                  injectorTemplatesAnnotationsYaml,
-	"injector/templates/configmap.yaml":                    injectorTemplatesConfigmapYaml,
-	"injector/templates/javaagent.yaml":                    injectorTemplatesJavaagentYaml,
-	"oapserver/templates/cluster_role.yaml":                oapserverTemplatesCluster_roleYaml,
-	"oapserver/templates/cluster_role_binding.yaml":        oapserverTemplatesCluster_role_bindingYaml,
-	"oapserver/templates/deployment.yaml":                  oapserverTemplatesDeploymentYaml,
-	"oapserver/templates/ingress.yaml":                     oapserverTemplatesIngressYaml,
-	"oapserver/templates/service.yaml":                     oapserverTemplatesServiceYaml,
-	"oapserver/templates/service_account.yaml":             oapserverTemplatesService_accountYaml,
-	"satellite/templates/cluster_role.yaml":                satelliteTemplatesCluster_roleYaml,
-	"satellite/templates/cluster_role_binding.yaml":        satelliteTemplatesCluster_role_bindingYaml,
-	"satellite/templates/deployment.yaml":                  satelliteTemplatesDeploymentYaml,
-	"satellite/templates/service.yaml":                     satelliteTemplatesServiceYaml,
-	"satellite/templates/service_account.yaml":             satelliteTemplatesService_accountYaml,
-	"storage/elasticsearch/templates/configmap.yaml":       storageElasticsearchTemplatesConfigmapYaml,
-	"storage/elasticsearch/templates/service.yaml":         storageElasticsearchTemplatesServiceYaml,
-	"storage/elasticsearch/templates/service_account.yaml": storageElasticsearchTemplatesService_accountYaml,
-	"storage/elasticsearch/templates/statefulset.yaml":     storageElasticsearchTemplatesStatefulsetYaml,
-	"ui/templates/deployment.yaml":                         uiTemplatesDeploymentYaml,
-	"ui/templates/ingress.yaml":                            uiTemplatesIngressYaml,
-	"ui/templates/service.yaml":                            uiTemplatesServiceYaml,
-}
-
-// AssetDebug is true if the assets were built with the debug flag enabled.
-const AssetDebug = false
-
-// AssetDir returns the file names below a certain
-// directory embedded in the file by go-bindata.
-// For example if you run go-bindata on data/... and data contains the
-// following hierarchy:
-//     data/
-//       foo.txt
-//       img/
-//         a.png
-//         b.png
-// then AssetDir("data") would return []string{"foo.txt", "img"},
-// AssetDir("data/img") would return []string{"a.png", "b.png"},
-// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and
-// AssetDir("") will return []string{"data"}.
-func AssetDir(name string) ([]string, error) {
-	node := _bintree
-	if len(name) != 0 {
-		canonicalName := strings.Replace(name, "\\", "/", -1)
-		pathList := strings.Split(canonicalName, "/")
-		for _, p := range pathList {
-			node = node.Children[p]
-			if node == nil {
-				return nil, fmt.Errorf("Asset %s not found", name)
-			}
-		}
-	}
-	if node.Func != nil {
-		return nil, fmt.Errorf("Asset %s not found", name)
-	}
-	rv := make([]string, 0, len(node.Children))
-	for childName := range node.Children {
-		rv = append(rv, childName)
-	}
-	return rv, nil
-}
-
-type bintree struct {
-	Func     func() (*asset, error)
-	Children map[string]*bintree
-}
-
-var _bintree = &bintree{nil, map[string]*bintree{
-	"fetcher": &bintree{nil, map[string]*bintree{
-		"templates": &bintree{nil, map[string]*bintree{
-			"cluster_role.yaml":         &bintree{fetcherTemplatesCluster_roleYaml, map[string]*bintree{}},
-			"cluster_role_binding.yaml": &bintree{fetcherTemplatesCluster_role_bindingYaml, map[string]*bintree{}},
-			"configmap.yaml":            &bintree{fetcherTemplatesConfigmapYaml, map[string]*bintree{}},
-			"deployment.yaml":           &bintree{fetcherTemplatesDeploymentYaml, map[string]*bintree{}},
-			"service_account.yaml":      &bintree{fetcherTemplatesService_accountYaml, map[string]*bintree{}},
-		}},
-	}},
-	"injector": &bintree{nil, map[string]*bintree{
-		"templates": &bintree{nil, map[string]*bintree{
-			"annotations.yaml": &bintree{injectorTemplatesAnnotationsYaml, map[string]*bintree{}},
-			"configmap.yaml":   &bintree{injectorTemplatesConfigmapYaml, map[string]*bintree{}},
-			"javaagent.yaml":   &bintree{injectorTemplatesJavaagentYaml, map[string]*bintree{}},
-		}},
-	}},
-	"oapserver": &bintree{nil, map[string]*bintree{
-		"templates": &bintree{nil, map[string]*bintree{
-			"cluster_role.yaml":         &bintree{oapserverTemplatesCluster_roleYaml, map[string]*bintree{}},
-			"cluster_role_binding.yaml": &bintree{oapserverTemplatesCluster_role_bindingYaml, map[string]*bintree{}},
-			"deployment.yaml":           &bintree{oapserverTemplatesDeploymentYaml, map[string]*bintree{}},
-			"ingress.yaml":              &bintree{oapserverTemplatesIngressYaml, map[string]*bintree{}},
-			"service.yaml":              &bintree{oapserverTemplatesServiceYaml, map[string]*bintree{}},
-			"service_account.yaml":      &bintree{oapserverTemplatesService_accountYaml, map[string]*bintree{}},
-		}},
-	}},
-	"satellite": &bintree{nil, map[string]*bintree{
-		"templates": &bintree{nil, map[string]*bintree{
-			"cluster_role.yaml":         &bintree{satelliteTemplatesCluster_roleYaml, map[string]*bintree{}},
-			"cluster_role_binding.yaml": &bintree{satelliteTemplatesCluster_role_bindingYaml, map[string]*bintree{}},
-			"deployment.yaml":           &bintree{satelliteTemplatesDeploymentYaml, map[string]*bintree{}},
-			"service.yaml":              &bintree{satelliteTemplatesServiceYaml, map[string]*bintree{}},
-			"service_account.yaml":      &bintree{satelliteTemplatesService_accountYaml, map[string]*bintree{}},
-		}},
-	}},
-	"storage": &bintree{nil, map[string]*bintree{
-		"elasticsearch": &bintree{nil, map[string]*bintree{
-			"templates": &bintree{nil, map[string]*bintree{
-				"configmap.yaml":       &bintree{storageElasticsearchTemplatesConfigmapYaml, map[string]*bintree{}},
-				"service.yaml":         &bintree{storageElasticsearchTemplatesServiceYaml, map[string]*bintree{}},
-				"service_account.yaml": &bintree{storageElasticsearchTemplatesService_accountYaml, map[string]*bintree{}},
-				"statefulset.yaml":     &bintree{storageElasticsearchTemplatesStatefulsetYaml, map[string]*bintree{}},
-			}},
-		}},
-	}},
-	"ui": &bintree{nil, map[string]*bintree{
-		"templates": &bintree{nil, map[string]*bintree{
-			"deployment.yaml": &bintree{uiTemplatesDeploymentYaml, map[string]*bintree{}},
-			"ingress.yaml":    &bintree{uiTemplatesIngressYaml, map[string]*bintree{}},
-			"service.yaml":    &bintree{uiTemplatesServiceYaml, map[string]*bintree{}},
-		}},
-	}},
-}}
-
-// RestoreAsset restores an asset under the given directory.
-func RestoreAsset(dir, name string) error {
-	data, err := Asset(name)
-	if err != nil {
-		return err
-	}
-	info, err := AssetInfo(name)
-	if err != nil {
-		return err
-	}
-	err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
-	if err != nil {
-		return err
-	}
-	err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
-	if err != nil {
-		return err
-	}
-	return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
-}
-
-// RestoreAssets restores an asset under the given directory recursively.
-func RestoreAssets(dir, name string) error {
-	children, err := AssetDir(name)
-	// File
-	if err != nil {
-		return RestoreAsset(dir, name)
-	}
-	// Dir
-	for _, child := range children {
-		err = RestoreAssets(dir, filepath.Join(name, child))
-		if err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-func _filePath(dir, name string) string {
-	canonicalName := strings.Replace(name, "\\", "/", -1)
-	return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...)
-}