Repository: kubean-io/kubean
Pull request #892 (2023-07-20 15:30:35)

Add license info
<!--  

Thanks for sending a pull request!  Here are some tips for you:

* make sure your commit is signed off

-->

**What type of PR is this?**
/kind documentation

**What this PR does / why we need it**:
add license info

**Which issue(s) this PR fixes**:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
-->
Fixes #

**Special notes for your reviewer**:




Patch:
diff --git a/Makefile b/Makefile
index 5e4a2937c..d08e72a15 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 GOARCH ?= $(shell go env GOARCH)
 BUILD_ARCH ?= linux/$(GOARCH)
 
diff --git a/artifacts/gen_repo_conf.sh b/artifacts/gen_repo_conf.sh
index c92013bd9..86080957b 100644
--- a/artifacts/gen_repo_conf.sh
+++ b/artifacts/gen_repo_conf.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -eo pipefail
 
 ISO_IMG_FILE=''
diff --git a/artifacts/generate_offline_package.sh b/artifacts/generate_offline_package.sh
index 45d12a6b1..38341dccd 100644
--- a/artifacts/generate_offline_package.sh
+++ b/artifacts/generate_offline_package.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -eo pipefail
 
 OPTION=${1:-'all'}
diff --git a/artifacts/import_files.sh b/artifacts/import_files.sh
index 961e85bc3..b88478b6c 100755
--- a/artifacts/import_files.sh
+++ b/artifacts/import_files.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -eo pipefail
 
 MINIO_API_ADDR=${1:-'http://127.0.0.1:9000'}
diff --git a/artifacts/import_images.sh b/artifacts/import_images.sh
index 829183a47..4ad089a90 100755
--- a/artifacts/import_images.sh
+++ b/artifacts/import_images.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -eo pipefail
 
 REGISTRY_ADDR=${1}
diff --git a/artifacts/import_iso.sh b/artifacts/import_iso.sh
index 9c676410d..7f9da0765 100644
--- a/artifacts/import_iso.sh
+++ b/artifacts/import_iso.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -e
 
 MINIO_USER=${MINIO_USER:-""}
diff --git a/artifacts/import_ospkgs.sh b/artifacts/import_ospkgs.sh
index 4435975d5..65f98e99d 100755
--- a/artifacts/import_ospkgs.sh
+++ b/artifacts/import_ospkgs.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -eo pipefail
 
 MINIO_API_ADDR=${1:-'http://127.0.0.1:9000'}
diff --git a/artifacts/manage_version_cr.sh b/artifacts/manage_version_cr.sh
index 3dc8754c8..db3f8cbf9 100755
--- a/artifacts/manage_version_cr.sh
+++ b/artifacts/manage_version_cr.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -eo pipefail
 
 OPTION=${1:-'create_localartifactset'} ## create_localartifactset  create_manifest
diff --git a/artifacts/offline_patch.py b/artifacts/offline_patch.py
index 8a12fc608..565af4260 100644
--- a/artifacts/offline_patch.py
+++ b/artifacts/offline_patch.py
@@ -7,6 +7,9 @@ import yaml
 from datetime import datetime
 from pathlib import Path
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 CUR_DIR = os.getcwd()
 
 OPTION = os.getenv("OPTION", default="all")  # create_files create_images create_offlineversion_cr
diff --git a/charts/kubean/templates/configmap.yaml b/charts/kubean/templates/configmap.yaml
index ea3e53ede..fc28e2c5e 100644
--- a/charts/kubean/templates/configmap.yaml
+++ b/charts/kubean/templates/configmap.yaml
@@ -2,9 +2,9 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: kubean-config
+  name: {{ include "kubean.fullname" . }}-config
   namespace: {{ include "kubean.namespace" . }}
   labels:
   {{- include "kubean.labels" . | nindent 4}}
 data:
-  CLUSTER_OPERATIONS_BACKEND_LIMIT: "{{ .Values.kubeanOperator.operationsBackendLimit }}"
+  BACKEND_LIMIT: "10"
diff --git a/charts/kubean/values.yaml b/charts/kubean/values.yaml
index 9bc49f1ec..4661da257 100644
--- a/charts/kubean/values.yaml
+++ b/charts/kubean/values.yaml
@@ -7,7 +7,7 @@ kubeanOperator:
   replicaCount: 1
   nameOverride: ""
   fullnameOverride: ""
-  operationsBackendLimit: 5
+
   podAnnotations: {}
 
   podSecurityContext: {}
diff --git a/cmd/kubean-operator/app/app.go b/cmd/kubean-operator/app/app.go
index 02e6a6e46..24f105b02 100644
--- a/cmd/kubean-operator/app/app.go
+++ b/cmd/kubean-operator/app/app.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package app
 
 import (
diff --git a/cmd/kubean-operator/app/options.go b/cmd/kubean-operator/app/options.go
index b01841879..568b7f668 100644
--- a/cmd/kubean-operator/app/options.go
+++ b/cmd/kubean-operator/app/options.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package app
 
 import (
diff --git a/cmd/kubean-operator/main.go b/cmd/kubean-operator/main.go
index 5a28a58db..1143b7fb0 100644
--- a/cmd/kubean-operator/main.go
+++ b/cmd/kubean-operator/main.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package main
 
 import (
diff --git a/examples/install/1.minimal/AllInOne.yml b/examples/install/1.minimal/AllInOne.yml
index d9131c331..44c314ab3 100644
--- a/examples/install/1.minimal/AllInOne.yml
+++ b/examples/install/1.minimal/AllInOne.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 apiVersion: v1
 kind: ConfigMap
diff --git a/examples/install/2.mirror/Cluster.yml b/examples/install/2.mirror/Cluster.yml
index fd1d35274..55bb8095b 100644
--- a/examples/install/2.mirror/Cluster.yml
+++ b/examples/install/2.mirror/Cluster.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: kubean.io/v1alpha1
 kind: Cluster
 metadata:
diff --git a/examples/install/2.mirror/ClusterOperation.yml b/examples/install/2.mirror/ClusterOperation.yml
index 76b01f0d0..c1c9473c7 100644
--- a/examples/install/2.mirror/ClusterOperation.yml
+++ b/examples/install/2.mirror/ClusterOperation.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: kubean.io/v1alpha1
 kind: ClusterOperation
 metadata:
diff --git a/examples/install/2.mirror/HostsConfCM.yml b/examples/install/2.mirror/HostsConfCM.yml
index 2533c1608..9fbd974e7 100644
--- a/examples/install/2.mirror/HostsConfCM.yml
+++ b/examples/install/2.mirror/HostsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: v1
 kind: ConfigMap
 metadata:
diff --git a/examples/install/2.mirror/VarsConfCM.yml b/examples/install/2.mirror/VarsConfCM.yml
index 2aed89cb1..89bd85901 100644
--- a/examples/install/2.mirror/VarsConfCM.yml
+++ b/examples/install/2.mirror/VarsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: v1
 kind: ConfigMap
 metadata:
diff --git a/examples/install/3.airgap/Cluster.yml b/examples/install/3.airgap/Cluster.yml
index 21a2b1c21..f77d5e3bc 100644
--- a/examples/install/3.airgap/Cluster.yml
+++ b/examples/install/3.airgap/Cluster.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: kubean.io/v1alpha1
 kind: Cluster
 metadata:
diff --git a/examples/install/3.airgap/ClusterOperation.yml b/examples/install/3.airgap/ClusterOperation.yml
index 3aee56682..8a4475fc2 100644
--- a/examples/install/3.airgap/ClusterOperation.yml
+++ b/examples/install/3.airgap/ClusterOperation.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: kubean.io/v1alpha1
 kind: ClusterOperation
 metadata:
diff --git a/examples/install/3.airgap/HostsConfCM.yml b/examples/install/3.airgap/HostsConfCM.yml
index 8a0ff7af3..733929e6e 100644
--- a/examples/install/3.airgap/HostsConfCM.yml
+++ b/examples/install/3.airgap/HostsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: v1
 kind: ConfigMap
 metadata:
diff --git a/examples/install/3.airgap/VarsConfCM.yml b/examples/install/3.airgap/VarsConfCM.yml
index 94db06990..03ec748fa 100644
--- a/examples/install/3.airgap/VarsConfCM.yml
+++ b/examples/install/3.airgap/VarsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: v1
 kind: ConfigMap
 metadata:
diff --git a/examples/scale/1.addWorkNode/ClusterOperation.yml b/examples/scale/1.addWorkNode/ClusterOperation.yml
index ee0cafb2a..13fa9a9ca 100644
--- a/examples/scale/1.addWorkNode/ClusterOperation.yml
+++ b/examples/scale/1.addWorkNode/ClusterOperation.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 apiVersion: kubean.io/v1alpha1
 kind: ClusterOperation
diff --git a/examples/scale/1.addWorkNode/HostsConfCM.yml b/examples/scale/1.addWorkNode/HostsConfCM.yml
index 25dda44de..1b29bb9d8 100644
--- a/examples/scale/1.addWorkNode/HostsConfCM.yml
+++ b/examples/scale/1.addWorkNode/HostsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: v1
 kind: ConfigMap
 metadata:
diff --git a/examples/scale/2.delWorkNode/ClusterOperation.yml b/examples/scale/2.delWorkNode/ClusterOperation.yml
index 60341fdc4..2f4c691a5 100644
--- a/examples/scale/2.delWorkNode/ClusterOperation.yml
+++ b/examples/scale/2.delWorkNode/ClusterOperation.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 apiVersion: kubean.io/v1alpha1
 kind: ClusterOperation
diff --git a/examples/scale/2.delWorkNode/HostsConfCM.yml b/examples/scale/2.delWorkNode/HostsConfCM.yml
index 25dda44de..1b29bb9d8 100644
--- a/examples/scale/2.delWorkNode/HostsConfCM.yml
+++ b/examples/scale/2.delWorkNode/HostsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 apiVersion: v1
 kind: ConfigMap
 metadata:
diff --git a/examples/uninstall/ClusterOperation.yml b/examples/uninstall/ClusterOperation.yml
index 691b47cf8..b6e1091d8 100644
--- a/examples/uninstall/ClusterOperation.yml
+++ b/examples/uninstall/ClusterOperation.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 apiVersion: kubean.io/v1alpha1
 kind: ClusterOperation
diff --git a/examples/upgrade/ClusterOperation.yml b/examples/upgrade/ClusterOperation.yml
index 4eb81fa34..740e05312 100644
--- a/examples/upgrade/ClusterOperation.yml
+++ b/examples/upgrade/ClusterOperation.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 apiVersion: kubean.io/v1alpha1
 kind: ClusterOperation
diff --git a/examples/upgrade/VarsConfCM.yml b/examples/upgrade/VarsConfCM.yml
index 7327ad0ba..2d9a39bd2 100644
--- a/examples/upgrade/VarsConfCM.yml
+++ b/examples/upgrade/VarsConfCM.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 apiVersion: v1
 kind: ConfigMap
diff --git a/hack/autoversion.sh b/hack/autoversion.sh
index e33ec5e48..13db489fe 100755
--- a/hack/autoversion.sh
+++ b/hack/autoversion.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/delete-cluster.sh b/hack/delete-cluster.sh
index 12ab10d3e..517fb6c47 100755
--- a/hack/delete-cluster.sh
+++ b/hack/delete-cluster.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/deploy.sh b/hack/deploy.sh
index f97c31803..f55ba6f68 100755
--- a/hack/deploy.sh
+++ b/hack/deploy.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/download-offline-files.sh b/hack/download-offline-files.sh
index 3123a88f6..edf230f25 100644
--- a/hack/download-offline-files.sh
+++ b/hack/download-offline-files.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/images.sh b/hack/images.sh
index b1969f2db..34cb11c19 100755
--- a/hack/images.sh
+++ b/hack/images.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/kubean_resource.sh b/hack/kubean_resource.sh
index 0b9546f7b..31118bdd5 100644
--- a/hack/kubean_resource.sh
+++ b/hack/kubean_resource.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/local-chart-to-deploy.sh b/hack/local-chart-to-deploy.sh
index edd2ac504..1ad6fdb1b 100644
--- a/hack/local-chart-to-deploy.sh
+++ b/hack/local-chart-to-deploy.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 IMAGE_REGISTRY=${1:-"ghcr.m.daocloud.io"}
 RELEASE_NAME=${2:-"kubean"}
 TARGET_NS=${3:-"kubean-system"}
diff --git a/hack/local-up-kindcluster.sh b/hack/local-up-kindcluster.sh
index fea72861d..194d3f5de 100755
--- a/hack/local-up-kindcluster.sh
+++ b/hack/local-up-kindcluster.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/offline-util.sh b/hack/offline-util.sh
index 048b24498..a3da75cd0 100644
--- a/hack/offline-util.sh
+++ b/hack/offline-util.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/offline_run_amd64.sh b/hack/offline_run_amd64.sh
index d66ef7a9f..e56e822be 100644
--- a/hack/offline_run_amd64.sh
+++ b/hack/offline_run_amd64.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/offline_run_arm64.sh b/hack/offline_run_arm64.sh
index 8d849bca8..1e7016ddd 100644
--- a/hack/offline_run_arm64.sh
+++ b/hack/offline_run_arm64.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/offline_run_centos.sh b/hack/offline_run_centos.sh
index bb674da52..b591a3215 100644
--- a/hack/offline_run_centos.sh
+++ b/hack/offline_run_centos.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/resouce_util.sh b/hack/resouce_util.sh
index f65c4862d..15a6372ec 100644
--- a/hack/resouce_util.sh
+++ b/hack/resouce_util.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/run-vip.sh b/hack/run-vip.sh
index 85b7fb9a2..d94278f09 100644
--- a/hack/run-vip.sh
+++ b/hack/run-vip.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/staticcheck.sh b/hack/staticcheck.sh
index 0b3a0680b..8a5f455e0 100755
--- a/hack/staticcheck.sh
+++ b/hack/staticcheck.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/sync_api.sh b/hack/sync_api.sh
index 4fa10a480..35c60896b 100755
--- a/hack/sync_api.sh
+++ b/hack/sync_api.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/trivy.sh b/hack/trivy.sh
index 27c7789f7..2f2d47dbf 100644
--- a/hack/trivy.sh
+++ b/hack/trivy.sh
@@ -1,5 +1,9 @@
 #!/bin/bash
 # set -o errexit
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o nounset
 set -o pipefail
 
diff --git a/hack/util.sh b/hack/util.sh
index 2b13e74dc..5cd4f5c4f 100644
--- a/hack/util.sh
+++ b/hack/util.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/verify_helm_standard.sh b/hack/verify_helm_standard.sh
index d2b5773d9..c5d58ebbe 100644
--- a/hack/verify_helm_standard.sh
+++ b/hack/verify_helm_standard.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/yml_utils.sh b/hack/yml_utils.sh
index d90e0e921..d9833926a 100644
--- a/hack/yml_utils.sh
+++ b/hack/yml_utils.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 # YQ reference： https://mikefarah.gitbook.io/yq/operators/string-operators
 
 set -o errexit
diff --git a/pkg/controllers/cluster/controller.go b/pkg/controllers/cluster/controller.go
index b301dc265..05f78eed7 100644
--- a/pkg/controllers/cluster/controller.go
+++ b/pkg/controllers/cluster/controller.go
@@ -1,18 +1,18 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package cluster
 
 import (
 	"context"
-	"encoding/json"
 	"fmt"
 	"sort"
-	"strconv"
 	"time"
 
 	clusterv1alpha1 "github.com/kubean-io/kubean-api/apis/cluster/v1alpha1"
 	clusteroperationv1alpha1 "github.com/kubean-io/kubean-api/apis/clusteroperation/v1alpha1"
 	clusterClientSet "github.com/kubean-io/kubean-api/generated/cluster/clientset/versioned"
 	clusterOperationClientSet "github.com/kubean-io/kubean-api/generated/clusteroperation/clientset/versioned"
-	"github.com/kubean-io/kubean/pkg/util"
 
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -24,10 +24,8 @@ import (
 )
 
 const (
-	RequeueAfter                         = time.Second * 15
-	KubeanConfigMapName                  = "kubean-config"
-	DefaultClusterOperationsBackEndLimit = 30
-	MaxClusterOperationsBackEndLimit     = 200
+	RequeueAfter = time.Second * 5
+	OpsBackupNum = 5
 )
 
 type Controller struct {
@@ -111,7 +109,7 @@ func (c *Controller) SortClusterOperationsByCreation(operations []clusteroperati
 }
 
 // CleanExcessClusterOps clean up excess ClusterOperation.
-func (c *Controller) CleanExcessClusterOps(cluster *clusterv1alpha1.Cluster, OpsBackupNum int) (bool, error) {
+func (c *Controller) CleanExcessClusterOps(cluster *clusterv1alpha1.Cluster) (bool, error) {
 	listOpt := metav1.ListOptions{LabelSelector: fmt.Sprintf("clusterName=%s", cluster.Name)}
 	clusterOpsList, err := c.KubeanClusterOpsSet.KubeanV1alpha1().ClusterOperations().List(context.Background(), listOpt)
 	if err != nil {
@@ -134,41 +132,6 @@ func (c *Controller) CleanExcessClusterOps(cluster *clusterv1alpha1.Cluster, Ops
 	return true, nil
 }
 
-type ConfigProperty struct {
-	ClusterOperationsBackEndLimit string `json:"CLUSTER_OPERATIONS_BACKEND_LIMIT"`
-}
-
-func (config *ConfigProperty) GetClusterOperationsBackEndLimit() int {
-
-	value, _ := strconv.Atoi(config.ClusterOperationsBackEndLimit)
-	if value <= 0 {
-		klog.Warningf("GetClusterOperationsBackEndLimit and use default value %d", DefaultClusterOperationsBackEndLimit)
-		return DefaultClusterOperationsBackEndLimit
-	}
-	if value >= MaxClusterOperationsBackEndLimit {
-		klog.Warningf("GetClusterOperationsBackEndLimit and use max value %d", MaxClusterOperationsBackEndLimit)
-		return MaxClusterOperationsBackEndLimit
-	}
-	return value
-}
-
-func (c *Controller) FetchKubeanConfigProperty() *ConfigProperty {
-	configData, err := c.ClientSet.CoreV1().ConfigMaps(util.GetCurrentNSOrDefault()).Get(context.Background(), KubeanConfigMapName, metav1.GetOptions{})
-	if err != nil {
-		return &ConfigProperty{}
-	}
-	jsonData, err := json.Marshal(configData.Data)
-	if err != nil {
-		return &ConfigProperty{}
-	}
-	result := &ConfigProperty{}
-	err = json.Unmarshal(jsonData, result)
-	if err != nil {
-		return &ConfigProperty{}
-	}
-	return result
-}
-
 func (c *Controller) Reconcile(ctx context.Context, req controllerruntime.Request) (controllerruntime.Result, error) {
 	cluster := &clusterv1alpha1.Cluster{}
 	if err := c.Client.Get(ctx, req.NamespacedName, cluster); err != nil {
@@ -178,8 +141,8 @@ func (c *Controller) Reconcile(ctx context.Context, req controllerruntime.Reques
 		klog.ErrorS(err, "failed to get cluster", "cluster", req.String())
 		return controllerruntime.Result{RequeueAfter: RequeueAfter}, nil
 	}
-	OpsBackupNum := c.FetchKubeanConfigProperty().GetClusterOperationsBackEndLimit()
-	needRequeue, err := c.CleanExcessClusterOps(cluster, OpsBackupNum)
+
+	needRequeue, err := c.CleanExcessClusterOps(cluster)
 	if err != nil {
 		klog.ErrorS(err, "failed to clean excess cluster ops", "cluster", cluster.Name)
 		return controllerruntime.Result{RequeueAfter: RequeueAfter}, nil
diff --git a/pkg/controllers/clusterops/controller.go b/pkg/controllers/clusterops/controller.go
index 15154f849..4b9a67507 100644
--- a/pkg/controllers/clusterops/controller.go
+++ b/pkg/controllers/clusterops/controller.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package clusterops
 
 import (
diff --git a/pkg/controllers/infomanifest/controller.go b/pkg/controllers/infomanifest/controller.go
index 3c3c4dffd..546cf13f0 100644
--- a/pkg/controllers/infomanifest/controller.go
+++ b/pkg/controllers/infomanifest/controller.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package infomanifest
 
 import (
diff --git a/pkg/controllers/offlineversion/controller.go b/pkg/controllers/offlineversion/controller.go
index f01c9d3bd..ce0333000 100644
--- a/pkg/controllers/offlineversion/controller.go
+++ b/pkg/controllers/offlineversion/controller.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package offlineversion
 
 import (
diff --git a/pkg/util/cluster.go b/pkg/util/cluster.go
index 794055301..24aa94c82 100644
--- a/pkg/util/cluster.go
+++ b/pkg/util/cluster.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package util
 
 import (
diff --git a/pkg/util/entrypoint/entrypoint.go b/pkg/util/entrypoint/entrypoint.go
index 4de59ec75..b46f8adf0 100644
--- a/pkg/util/entrypoint/entrypoint.go
+++ b/pkg/util/entrypoint/entrypoint.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package entrypoint
 
 import (
diff --git a/pkg/version/base.go b/pkg/version/base.go
index af855fdc6..eb30ab5d1 100644
--- a/pkg/version/base.go
+++ b/pkg/version/base.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package version
 
 // Base version information.
diff --git a/pkg/version/version.go b/pkg/version/version.go
index a77b6dcf7..56dac81d3 100644
--- a/pkg/version/version.go
+++ b/pkg/version/version.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package version
 
 import (
diff --git a/playbooks/cluster-info.yml b/playbooks/cluster-info.yml
index 0349e40de..92e9762f7 100644
--- a/playbooks/cluster-info.yml
+++ b/playbooks/cluster-info.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 - name: Get information about the cluster
   hosts: kube_control_plane[0]
diff --git a/playbooks/disable-firewalld.yml b/playbooks/disable-firewalld.yml
index 42ec42031..177c07455 100644
--- a/playbooks/disable-firewalld.yml
+++ b/playbooks/disable-firewalld.yml
@@ -1,3 +1,5 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
 
 ---
 - import_playbook: contrib/os-services/os-services.yml
diff --git a/playbooks/enable-repo.yml b/playbooks/enable-repo.yml
index e79935269..59751b3f3 100644
--- a/playbooks/enable-repo.yml
+++ b/playbooks/enable-repo.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 - name: Enable additional package repo config in offline scenarios
   hosts: k8s_cluster
diff --git a/playbooks/kubeconfig.yml b/playbooks/kubeconfig.yml
index 13c5077af..24267f287 100644
--- a/playbooks/kubeconfig.yml
+++ b/playbooks/kubeconfig.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 - name: Backport the kubeconfig for the workload cluster
   hosts: kube_control_plane[0]
diff --git a/playbooks/ping.yml b/playbooks/ping.yml
index db9768618..a0aa89892 100644
--- a/playbooks/ping.yml
+++ b/playbooks/ping.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 - name: Network reachability check
   hosts: k8s_cluster
diff --git a/playbooks/precheck.yml b/playbooks/precheck.yml
index b8e197d88..0c5e94b58 100644
--- a/playbooks/precheck.yml
+++ b/playbooks/precheck.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 - name: Pre-check
   hosts: k8s_cluster
diff --git a/playbooks/remove-pkgs.yml b/playbooks/remove-pkgs.yml
index d6cca79d8..4b94eca6d 100644
--- a/playbooks/remove-pkgs.yml
+++ b/playbooks/remove-pkgs.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 ## Only for RHEL 8 on offline environment currently
 - name: Remove packages
diff --git a/playbooks/renew-certs.yml b/playbooks/renew-certs.yml
index 1b8c1872e..2f1b358eb 100644
--- a/playbooks/renew-certs.yml
+++ b/playbooks/renew-certs.yml
@@ -1,3 +1,23 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
+# Copyright 2023 The Epiphany Authors.
+# Licensed 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.
+
+# This code is based on the original work by Epiphany, 
+# which can be found at https://github.com/hitachienergy/epiphany/blob/develop/ansible/playbooks/roles/kubernetes_master/tasks/generate-certificates.yml.
+# Modifications have been made to the original work by ErikJiang.
+
 ---
 - name: Renew Cluster Certificates
   hosts: kube_control_plane
diff --git a/playbooks/update-hosts.yml b/playbooks/update-hosts.yml
index 7aaa64f60..c996bdc93 100644
--- a/playbooks/update-hosts.yml
+++ b/playbooks/update-hosts.yml
@@ -1,3 +1,6 @@
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ---
 - name: Update hosts config
   hosts: k8s_cluster


Test patch:
diff --git a/hack/e2e.sh b/hack/e2e.sh
index 643ff1d05..31c1fe3f0 100755
--- a/hack/e2e.sh
+++ b/hack/e2e.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o nounset
 set -o pipefail
 set -e
diff --git a/hack/kubean_compatibility_e2e.sh b/hack/kubean_compatibility_e2e.sh
index caf3392d6..7e87de1cd 100644
--- a/hack/kubean_compatibility_e2e.sh
+++ b/hack/kubean_compatibility_e2e.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ### this script is about k8s version compatibility of kubean
 set -o errexit
 set -o nounset
diff --git a/hack/network_testcase.sh b/hack/network_testcase.sh
index ecf41be1b..377963a51 100644
--- a/hack/network_testcase.sh
+++ b/hack/network_testcase.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 # YQ reference： https://mikefarah.gitbook.io/yq/operators/string-operators
 
 #set -o errexit
diff --git a/hack/newE2E.sh b/hack/newE2E.sh
index a5d4db61f..d6ee525b0 100644
--- a/hack/newE2E.sh
+++ b/hack/newE2E.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o nounset
 set -o pipefail
 set -e
diff --git a/hack/offline-e2e.sh b/hack/offline-e2e.sh
index 90efc493b..2f74d2276 100644
--- a/hack/offline-e2e.sh
+++ b/hack/offline-e2e.sh
@@ -1,4 +1,8 @@
 #!/usr/bin/env bash
+
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o nounset
 set -o pipefail
 set -e
diff --git a/hack/run-e2e.sh b/hack/run-e2e.sh
index bbb5f9acf..ec0a1147b 100644
--- a/hack/run-e2e.sh
+++ b/hack/run-e2e.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/run-network-e2e.sh b/hack/run-network-e2e.sh
index 6a35d512d..33c218300 100644
--- a/hack/run-network-e2e.sh
+++ b/hack/run-network-e2e.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/run-nightly-cluster-e2e.sh b/hack/run-nightly-cluster-e2e.sh
index 138e82096..ed4ceac5d 100644
--- a/hack/run-nightly-cluster-e2e.sh
+++ b/hack/run-nightly-cluster-e2e.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/run-os-compatibility-e2e.sh b/hack/run-os-compatibility-e2e.sh
index c6e4360c3..509a298af 100755
--- a/hack/run-os-compatibility-e2e.sh
+++ b/hack/run-os-compatibility-e2e.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 ### this script is shared by offline os compatibility and online compatibility
 ### only cover redhat8 and redhat7
 set -o errexit
diff --git a/hack/run-sonobouy-e2e.sh b/hack/run-sonobouy-e2e.sh
index 201afa1fc..a172593ee 100644
--- a/hack/run-sonobouy-e2e.sh
+++ b/hack/run-sonobouy-e2e.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/hack/unit-test.sh b/hack/unit-test.sh
index d8e8df575..9d1e6c7fa 100644
--- a/hack/unit-test.sh
+++ b/hack/unit-test.sh
@@ -1,5 +1,8 @@
 #!/usr/bin/env bash
 
+# Copyright 2023 Authors of kubean-io
+# SPDX-License-Identifier: Apache-2.0
+
 set -o errexit
 set -o nounset
 set -o pipefail
diff --git a/pkg/controllers/cluster/controller_test.go b/pkg/controllers/cluster/controller_test.go
index b7e308cc9..04bf08c7c 100644
--- a/pkg/controllers/cluster/controller_test.go
+++ b/pkg/controllers/cluster/controller_test.go
@@ -1,19 +1,19 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package cluster
 
 import (
 	"context"
 	"fmt"
 	"net/http"
-	"os"
 	"reflect"
 	"testing"
 	"time"
 
 	localartifactsetv1alpha1 "github.com/kubean-io/kubean-api/apis/localartifactset/v1alpha1"
 	manifestv1alpha1 "github.com/kubean-io/kubean-api/apis/manifest/v1alpha1"
-	"github.com/kubean-io/kubean/pkg/util"
 
-	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/api/meta"
 	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/types"
@@ -152,66 +152,6 @@ func TestCompareClusterConditions(t *testing.T) {
 	}
 }
 
-func TestFetchKubeanConfigProperty(t *testing.T) {
-	genController := func() *Controller {
-		return &Controller{
-			Client:              newFakeClient(),
-			ClientSet:           clientsetfake.NewSimpleClientset(),
-			KubeanClusterSet:    clusterv1alpha1fake.NewSimpleClientset(),
-			KubeanClusterOpsSet: clusteroperationv1alpha1fake.NewSimpleClientset(),
-		}
-	}
-	tests := []struct {
-		name       string
-		controller *Controller
-		args       func(controller *Controller)
-		want       int
-	}{
-		{
-			name:       "no config and default value",
-			controller: genController(),
-			args: func(controller *Controller) {
-				// do nothing
-			},
-			want: 30,
-		},
-		{
-			name:       "the config has been set to 25",
-			controller: genController(),
-			args: func(controller *Controller) {
-				os.Setenv("POD_NAMESPACE", "")
-				configMap := &corev1.ConfigMap{}
-				configMap.Name = KubeanConfigMapName
-				configMap.Namespace = util.GetCurrentNSOrDefault()
-				configMap.Data = map[string]string{"CLUSTER_OPERATIONS_BACKEND_LIMIT": "25"}
-				controller.ClientSet.CoreV1().ConfigMaps(util.GetCurrentNSOrDefault()).Create(context.Background(), configMap, metav1.CreateOptions{})
-			},
-			want: 25,
-		},
-		{
-			name:       "the config has been set to 10000",
-			controller: genController(),
-			args: func(controller *Controller) {
-				os.Setenv("POD_NAMESPACE", "")
-				configMap := &corev1.ConfigMap{}
-				configMap.Name = KubeanConfigMapName
-				configMap.Namespace = util.GetCurrentNSOrDefault()
-				configMap.Data = map[string]string{"CLUSTER_OPERATIONS_BACKEND_LIMIT": "10000"}
-				controller.ClientSet.CoreV1().ConfigMaps(util.GetCurrentNSOrDefault()).Create(context.Background(), configMap, metav1.CreateOptions{})
-			},
-			want: 200,
-		},
-	}
-	for _, test := range tests {
-		t.Run(test.name, func(t *testing.T) {
-			test.args(test.controller)
-			if test.controller.FetchKubeanConfigProperty().GetClusterOperationsBackEndLimit() != test.want {
-				t.Fatal()
-			}
-		})
-	}
-}
-
 func TestSortClusterOperationsByCreation(t *testing.T) {
 	controller := &Controller{
 		Client:              newFakeClient(),
@@ -254,7 +194,6 @@ func TestSortClusterOperationsByCreation(t *testing.T) {
 }
 
 func Test_CleanExcessClusterOps(t *testing.T) {
-	OpsBackupNum := 5
 	controller := &Controller{
 		Client:              newFakeClient(),
 		ClientSet:           clientsetfake.NewSimpleClientset(),
@@ -282,7 +221,7 @@ func Test_CleanExcessClusterOps(t *testing.T) {
 		{
 			name: "get nothing",
 			args: func() bool {
-				result, _ := controller.CleanExcessClusterOps(exampleCluster, OpsBackupNum)
+				result, _ := controller.CleanExcessClusterOps(exampleCluster)
 				return result
 			},
 			want: false,
@@ -304,7 +243,7 @@ func Test_CleanExcessClusterOps(t *testing.T) {
 					}
 					controller.KubeanClusterOpsSet.KubeanV1alpha1().ClusterOperations().Create(context.Background(), clusterOperation, metav1.CreateOptions{})
 				}
-				result, _ := controller.CleanExcessClusterOps(exampleCluster, OpsBackupNum)
+				result, _ := controller.CleanExcessClusterOps(exampleCluster)
 				return result
 			},
 			want: false,
@@ -326,7 +265,7 @@ func Test_CleanExcessClusterOps(t *testing.T) {
 					}
 					controller.KubeanClusterOpsSet.KubeanV1alpha1().ClusterOperations().Create(context.Background(), clusterOperation, metav1.CreateOptions{})
 				}
-				result, _ := controller.CleanExcessClusterOps(exampleCluster, OpsBackupNum)
+				result, _ := controller.CleanExcessClusterOps(exampleCluster)
 				return result
 			},
 			want: true,
diff --git a/pkg/controllers/clusterops/controller_test.go b/pkg/controllers/clusterops/controller_test.go
index 81f0dbd79..0b3a258b9 100644
--- a/pkg/controllers/clusterops/controller_test.go
+++ b/pkg/controllers/clusterops/controller_test.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package clusterops
 
 import (
diff --git a/pkg/controllers/infomanifest/controller_test.go b/pkg/controllers/infomanifest/controller_test.go
index 2707d7d15..c8f7e9013 100644
--- a/pkg/controllers/infomanifest/controller_test.go
+++ b/pkg/controllers/infomanifest/controller_test.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package infomanifest
 
 import (
diff --git a/pkg/controllers/offlineversion/controller_test.go b/pkg/controllers/offlineversion/controller_test.go
index f10329aae..9fcf36e08 100644
--- a/pkg/controllers/offlineversion/controller_test.go
+++ b/pkg/controllers/offlineversion/controller_test.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package offlineversion
 
 import (
diff --git a/pkg/util/cluster_test.go b/pkg/util/cluster_test.go
index 5352e5435..9343c3b2d 100644
--- a/pkg/util/cluster_test.go
+++ b/pkg/util/cluster_test.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package util
 
 import (
diff --git a/pkg/util/entrypoint/entrypoint_test.go b/pkg/util/entrypoint/entrypoint_test.go
index fd4d53694..f4fbf7b2a 100644
--- a/pkg/util/entrypoint/entrypoint_test.go
+++ b/pkg/util/entrypoint/entrypoint_test.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package entrypoint
 
 import (
diff --git a/pkg/version/version_test.go b/pkg/version/version_test.go
index 5b037c853..da2887fc2 100644
--- a/pkg/version/version_test.go
+++ b/pkg/version/version_test.go
@@ -1,3 +1,6 @@
+// Copyright 2023 Authors of kubean-io
+// SPDX-License-Identifier: Apache-2.0
+
 package version
 
 import (