This is an automated email from the ASF dual-hosted git repository.
sunnianjun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git
The following commit(s) were added to refs/heads/main by this push:
new 6ce0649 refactor(operator): refactor Service and ConfigMap build
(#190)
6ce0649 is described below
commit 6ce06492698bda13c0748d84aa6370eaa599f457
Author: liyao <[email protected]>
AuthorDate: Fri Jan 27 11:41:41 2023 +0800
refactor(operator): refactor Service and ConfigMap build (#190)
* feat: add builder for ConfigMap
Signed-off-by: mlycore <[email protected]>
* feat: add builder for Service
Signed-off-by: mlycore <[email protected]>
* refactor: using builder for ConfigMap and Service
Signed-off-by: mlycore <[email protected]>
* fix: fix unit test
Signed-off-by: mlycore <[email protected]>
Signed-off-by: mlycore <[email protected]>
---
.../cmd/shardingsphere-operator/manager/manager.go | 4 +
.../pkg/controllers/compute_node_controller.go | 117 ++++++++++++++-------
.../pkg/kubernetes/configmap/configmap.go | 75 +++++++++++++
.../pkg/kubernetes/service/service.go | 74 +++++++++++++
.../pkg/reconcile/computenode/configmap.go | 79 +++++++++++---
.../pkg/reconcile/computenode/service.go | 88 ++++++++++++----
.../pkg/reconcile/computenode/service_test.go | 2 +-
7 files changed, 369 insertions(+), 70 deletions(-)
diff --git
a/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
b/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
index 6e14a67..5ab4eb1 100644
--- a/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
+++ b/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
@@ -22,7 +22,9 @@ import (
"flag"
"os"
+
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/configmap"
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/deployment"
+
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/service"
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/metrics"
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/api/v1alpha1"
@@ -114,6 +116,8 @@ func New(opts *Options) *Manager {
Scheme: mgr.GetScheme(),
Log: mgr.GetLogger(),
Deployment: deployment.NewDeployment(mgr.GetClient()),
+ Service: service.NewService(mgr.GetClient()),
+ ConfigMap: configmap.NewConfigMap(mgr.GetClient()),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller",
"controller", "ComputeNode")
os.Exit(1)
diff --git a/shardingsphere-operator/pkg/controllers/compute_node_controller.go
b/shardingsphere-operator/pkg/controllers/compute_node_controller.go
index 8849f6a..b52502e 100644
--- a/shardingsphere-operator/pkg/controllers/compute_node_controller.go
+++ b/shardingsphere-operator/pkg/controllers/compute_node_controller.go
@@ -22,7 +22,9 @@ import (
"time"
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/api/v1alpha1"
+
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/configmap"
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/deployment"
+
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/service"
reconcile
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/reconcile/computenode"
"github.com/go-logr/logr"
appsv1 "k8s.io/api/apps/v1"
@@ -46,8 +48,8 @@ type ComputeNodeReconciler struct {
Log logr.Logger
Deployment deployment.Deployment
- // Service
- // ConfigMap
+ Service service.Service
+ ConfigMap configmap.ConfigMap
}
// SetupWithManager sets up the controller with the Manager.
@@ -151,23 +153,32 @@ func (r *ComputeNodeReconciler)
getDeploymentByNamespacedName(ctx context.Contex
}
func (r *ComputeNodeReconciler) reconcileService(ctx context.Context, cn
*v1alpha1.ComputeNode) error {
- cur := &v1.Service{}
- if err := r.Get(ctx, types.NamespacedName{
- Namespace: cn.Namespace,
- Name: cn.Name,
- }, cur); err != nil {
- if apierrors.IsNotFound(err) {
- // create
- exp := reconcile.ComputeNodeNewService(cn)
- if err := r.Create(ctx, exp); err != nil {
+ svc, found, err := r.getServiceByNamespacedName(ctx,
types.NamespacedName{Namespace: cn.Namespace, Name: cn.Name})
+ if found {
+ if err := r.updateService(ctx, cn, svc); err != nil {
+ return err
+ }
+ } else {
+ if err != nil {
+ return err
+ } else {
+ if err := r.createService(ctx, cn); err != nil {
return err
}
- return nil
- } else {
- return err
}
}
+ return nil
+}
+func (r *ComputeNodeReconciler) createService(ctx context.Context, cn
*v1alpha1.ComputeNode) error {
+ svc := reconcile.NewService(cn)
+ if err := r.Create(ctx, svc); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (r *ComputeNodeReconciler) updateService(ctx context.Context, cn
*v1alpha1.ComputeNode, cur *v1.Service) error {
if cn.Spec.ServiceType == v1.ServiceTypeNodePort {
for _, p := range cur.Spec.Ports {
for idx := range cn.Spec.PortBindings {
@@ -195,40 +206,74 @@ func (r *ComputeNodeReconciler) reconcileService(ctx
context.Context, cn *v1alph
}
}
- // update
- exp := reconcile.ComputeNodeUpdateService(cn, cur)
+ exp := reconcile.UpdateService(cn, cur)
if err := r.Update(ctx, exp); err != nil {
return err
}
-
return nil
}
-func (r *ComputeNodeReconciler) reconcileConfigMap(ctx context.Context, cn
*v1alpha1.ComputeNode) error {
- cur := &v1.ConfigMap{}
- if err := r.Get(ctx, types.NamespacedName{
- Namespace: cn.Namespace,
- Name: cn.Name,
- }, cur); err != nil {
- if apierrors.IsNotFound(err) {
- // create
- exp := reconcile.ComputeNodeNewConfigMap(cn)
- if err := r.Create(ctx, exp); err != nil {
- return err
- }
- return nil
- } else {
- return err
- }
+func (r *ComputeNodeReconciler) getServiceByNamespacedName(ctx
context.Context, namespacedName types.NamespacedName) (*v1.Service, bool,
error) {
+ svc, err := r.Service.GetByNamespacedName(ctx, namespacedName)
+ // found
+ if svc != nil {
+ return svc, true, nil
+ }
+ // error
+ if err != nil {
+ return nil, false, err
+ } else {
+ // not found
+ return nil, false, nil
}
+}
+
+func (r *ComputeNodeReconciler) createConfigMap(ctx context.Context, cn
*v1alpha1.ComputeNode) error {
+ cm := reconcile.NewConfigMap(cn)
+ if err := r.Create(ctx, cm); err != nil {
+ return err
+ }
+ return nil
+}
- // update
- //FIXME: need to rolling update Deployment if ConfigMap indeed updated
- exp := reconcile.ComputeNodeUpdateConfigMap(cn, cur)
+func (r *ComputeNodeReconciler) updateConfigMap(ctx context.Context, cn
*v1alpha1.ComputeNode, cm *v1.ConfigMap) error {
+ exp := reconcile.UpdateConfigMap(cn, cm)
if err := r.Update(ctx, exp); err != nil {
return err
}
+ return nil
+}
+func (r *ComputeNodeReconciler) getConfigMapByNamespacedName(ctx
context.Context, namespacedName types.NamespacedName) (*v1.ConfigMap, bool,
error) {
+ cm, err := r.ConfigMap.GetByNamespacedName(ctx, namespacedName)
+ // found
+ if cm != nil {
+ return cm, true, nil
+ }
+ // error
+ if err != nil {
+ return nil, false, err
+ } else {
+ // not found
+ return nil, false, nil
+ }
+}
+
+func (r *ComputeNodeReconciler) reconcileConfigMap(ctx context.Context, cn
*v1alpha1.ComputeNode) error {
+ cm, found, err := r.getConfigMapByNamespacedName(ctx,
types.NamespacedName{Namespace: cn.Namespace, Name: cn.Name})
+ if found {
+ if err := r.updateConfigMap(ctx, cn, cm); err != nil {
+ return err
+ }
+ } else {
+ if err != nil {
+ return err
+ } else {
+ if err := r.createConfigMap(ctx, cn); err != nil {
+ return err
+ }
+ }
+ }
return nil
}
diff --git a/shardingsphere-operator/pkg/kubernetes/configmap/configmap.go
b/shardingsphere-operator/pkg/kubernetes/configmap/configmap.go
new file mode 100644
index 0000000..bf188ef
--- /dev/null
+++ b/shardingsphere-operator/pkg/kubernetes/configmap/configmap.go
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ */
+
+package configmap
+
+import (
+ "context"
+
+ corev1 "k8s.io/api/core/v1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/types"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+)
+
+func NewConfigMap(c client.Client) ConfigMap {
+ return configmapClient{
+ configmapGetter: configmapGetter{
+ Client: c,
+ },
+ configmapSetter: configmapSetter{
+ Client: c,
+ },
+ }
+}
+
+type ConfigMap interface {
+ ConfigMapGetter
+ ConfigMapSetter
+}
+
+type ConfigMapGetter interface {
+ GetByNamespacedName(context.Context, types.NamespacedName)
(*corev1.ConfigMap, error)
+}
+
+type ConfigMapSetter interface {
+}
+
+type configmapClient struct {
+ configmapGetter
+ configmapSetter
+}
+
+type configmapGetter struct {
+ client.Client
+}
+
+func (cg configmapGetter) GetByNamespacedName(ctx context.Context,
namespacedName types.NamespacedName) (*corev1.ConfigMap, error) {
+ cm := &corev1.ConfigMap{}
+ if err := cg.Get(ctx, namespacedName, cm); err != nil {
+ if apierrors.IsNotFound(err) {
+ return nil, nil
+ }
+ return nil, err
+ } else {
+ return cm, err
+ }
+}
+
+type configmapSetter struct {
+ client.Client
+}
diff --git a/shardingsphere-operator/pkg/kubernetes/service/service.go
b/shardingsphere-operator/pkg/kubernetes/service/service.go
new file mode 100644
index 0000000..dea41cc
--- /dev/null
+++ b/shardingsphere-operator/pkg/kubernetes/service/service.go
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package service
+
+import (
+ "context"
+
+ corev1 "k8s.io/api/core/v1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/types"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+)
+
+func NewService(c client.Client) Service {
+ return serviceClient{
+ serviceGetter: serviceGetter{
+ Client: c,
+ },
+ serviceSetter: serviceSetter{
+ Client: c,
+ },
+ }
+}
+
+type Service interface {
+ ServiceGetter
+ ServiceSetter
+}
+
+type ServiceGetter interface {
+ GetByNamespacedName(context.Context, types.NamespacedName)
(*corev1.Service, error)
+}
+
+type ServiceSetter interface{}
+
+type serviceClient struct {
+ serviceGetter
+ serviceSetter
+}
+
+type serviceGetter struct {
+ client.Client
+}
+
+type serviceSetter struct {
+ client.Client
+}
+
+func (sg serviceGetter) GetByNamespacedName(ctx context.Context,
namespacedName types.NamespacedName) (*corev1.Service, error) {
+ svc := &corev1.Service{}
+ if err := sg.Get(ctx, namespacedName, svc); err != nil {
+ if apierrors.IsNotFound(err) {
+ return nil, nil
+ }
+ return nil, err
+ } else {
+ return svc, nil
+ }
+}
diff --git a/shardingsphere-operator/pkg/reconcile/computenode/configmap.go
b/shardingsphere-operator/pkg/reconcile/computenode/configmap.go
index f193eaf..30dba82 100644
--- a/shardingsphere-operator/pkg/reconcile/computenode/configmap.go
+++ b/shardingsphere-operator/pkg/reconcile/computenode/configmap.go
@@ -36,19 +36,17 @@ const (
AnnoLogbackConfig = "computenode.shardingsphere.org/logback"
)
-func ComputeNodeNewConfigMap(cn *v1alpha1.ComputeNode) *v1.ConfigMap {
+func NewConfigMap(cn *v1alpha1.ComputeNode) *v1.ConfigMap {
+ builder := NewConfigMapBuilder(cn.GetObjectMeta(),
cn.GetObjectKind().GroupVersionKind())
+
builder.SetName(cn.Name).SetNamespace(cn.Namespace).SetLabels(cn.Labels).SetAnnotations(cn.Annotations)
+
cluster := cn.Annotations[AnnoClusterRepoConfig]
logback := cn.Annotations[AnnoLogbackConfig]
- cm := ComputeNodeDefaultConfigMap(cn.GetObjectMeta(),
cn.GroupVersionKind())
- cm.Name = cn.Name
- cm.Namespace = cn.Namespace
- cm.Labels = cn.Labels
-
if len(logback) > 0 {
- cm.Data[ConfigForLogback] = logback
+ builder.SetLogback(logback)
} else {
- cm.Data[ConfigForLogback] = string(defaultLogback)
+ builder.SetLogback(string(defaultLogback))
}
// NOTE: ShardingSphere Proxy 5.3.0 needs a server.yaml no matter if it
is empty
@@ -60,16 +58,69 @@ func ComputeNodeNewConfigMap(cn *v1alpha1.ComputeNode)
*v1.ConfigMap {
}
}
if y, err := yaml.Marshal(servconf); err == nil {
- cm.Data[ConfigForServer] = string(y)
+ builder.SetServerConfig(string(y))
}
} else {
- cm.Data[ConfigForServer] = "# Empty file is needed"
+ builder.SetServerConfig("# Empty file is needed")
}
- return cm
+ return builder.Build()
+}
+
+type ConfigMapBuilder interface {
+ SetName(name string) ConfigMapBuilder
+ SetNamespace(namespace string) ConfigMapBuilder
+ SetLabels(labels map[string]string) ConfigMapBuilder
+ SetAnnotations(annos map[string]string) ConfigMapBuilder
+ SetLogback(logback string) ConfigMapBuilder
+ SetServerConfig(serverConfig string) ConfigMapBuilder
+ Build() *v1.ConfigMap
+}
+
+type configmapBuilder struct {
+ configmap *v1.ConfigMap
+}
+
+func NewConfigMapBuilder(meta metav1.Object, gvk schema.GroupVersionKind)
ConfigMapBuilder {
+ return &configmapBuilder{
+ configmap: DefaultConfigMap(meta, gvk),
+ }
+}
+
+func (c *configmapBuilder) SetName(name string) ConfigMapBuilder {
+ c.configmap.Name = name
+ return c
+}
+
+func (c *configmapBuilder) SetNamespace(namespace string) ConfigMapBuilder {
+ c.configmap.Namespace = namespace
+ return c
+}
+
+func (c *configmapBuilder) SetLabels(labels map[string]string)
ConfigMapBuilder {
+ c.configmap.Labels = labels
+ return c
+}
+
+func (c *configmapBuilder) SetAnnotations(annos map[string]string)
ConfigMapBuilder {
+ c.configmap.Annotations = annos
+ return c
+}
+func (c *configmapBuilder) SetLogback(logback string) ConfigMapBuilder {
+ c.configmap.Data[ConfigForLogback] = logback
+ return c
+}
+
+func (c *configmapBuilder) SetServerConfig(serviceConfig string)
ConfigMapBuilder {
+ c.configmap.Data[ConfigForServer] = serviceConfig
+ return c
+}
+
+func (c *configmapBuilder) Build() *v1.ConfigMap {
+ return c.configmap
}
-func ComputeNodeDefaultConfigMap(meta metav1.Object, gvk
schema.GroupVersionKind) *v1.ConfigMap {
+func DefaultConfigMap(meta metav1.Object, gvk schema.GroupVersionKind)
*v1.ConfigMap {
return &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "shardingsphere-proxy",
@@ -84,13 +135,13 @@ func ComputeNodeDefaultConfigMap(meta metav1.Object, gvk
schema.GroupVersionKind
}
// FIXME: check if changed first, then decide if need to respawn the Pods
-func ComputeNodeUpdateConfigMap(cn *v1alpha1.ComputeNode, cur *v1.ConfigMap)
*v1.ConfigMap {
+func UpdateConfigMap(cn *v1alpha1.ComputeNode, cur *v1.ConfigMap)
*v1.ConfigMap {
exp := &v1.ConfigMap{}
exp.ObjectMeta = cur.ObjectMeta
exp.ObjectMeta.ResourceVersion = ""
exp.Labels = cur.Labels
exp.Annotations = cur.Annotations
- exp.Data = ComputeNodeNewConfigMap(cn).Data
+ exp.Data = NewConfigMap(cn).Data
return exp
}
diff --git a/shardingsphere-operator/pkg/reconcile/computenode/service.go
b/shardingsphere-operator/pkg/reconcile/computenode/service.go
index f1ecad3..8a569f5 100644
--- a/shardingsphere-operator/pkg/reconcile/computenode/service.go
+++ b/shardingsphere-operator/pkg/reconcile/computenode/service.go
@@ -26,31 +26,82 @@ import (
"k8s.io/apimachinery/pkg/util/intstr"
)
-func ComputeNodeNewService(cn *v1alpha1.ComputeNode) *v1.Service {
- svc := ComputeNodeDefaultService(cn.GetObjectMeta(),
cn.GroupVersionKind())
- svc.Name = cn.Name
- svc.Namespace = cn.Namespace
- svc.Labels = cn.Labels
- svc.Spec.Selector = cn.Spec.Selector.MatchLabels
- svc.Spec.Type = cn.Spec.ServiceType
-
- if svc.Spec.Ports == nil {
- svc.Spec.Ports = []corev1.ServicePort{}
- }
+func NewService(cn *v1alpha1.ComputeNode) *v1.Service {
+ builder := NewServiceBuilder(cn.GetObjectMeta(),
cn.GetObjectKind().GroupVersionKind())
+
builder.SetName(cn.Name).SetNamespace(cn.Namespace).SetLabelsAndSelectors(cn.Labels,
cn.Spec.Selector).SetAnnotations(cn.Annotations).SetType(cn.Spec.ServiceType)
+
+ ports := []v1.ServicePort{}
for _, pb := range cn.Spec.PortBindings {
- svc.Spec.Ports = append(svc.Spec.Ports, corev1.ServicePort{
+ ports = append(ports, corev1.ServicePort{
Name: pb.Name,
- TargetPort: intstr.FromInt(int(pb.ContainerPort)),
Port: pb.ServicePort,
- NodePort: pb.NodePort,
+ TargetPort: intstr.FromInt(int(pb.ContainerPort)),
Protocol: pb.Protocol,
})
}
+ builder.SetPorts(ports)
+ return builder.Build()
+}
+
+type ServiceBuilder interface {
+ SetName(name string) ServiceBuilder
+ SetNamespace(namespace string) ServiceBuilder
+ SetLabelsAndSelectors(labels map[string]string, selectors
*metav1.LabelSelector) ServiceBuilder
+ SetAnnotations(anno map[string]string) ServiceBuilder
+ SetType(t corev1.ServiceType) ServiceBuilder
+ SetPorts(ports []corev1.ServicePort) ServiceBuilder
+ Build() *corev1.Service
+}
+
+func NewServiceBuilder(meta metav1.Object, gvk schema.GroupVersionKind)
ServiceBuilder {
+ return &serviceBuilder{
+ service: DefaultService(meta, gvk),
+ }
+}
+
+type serviceBuilder struct {
+ service *corev1.Service
+}
+
+func (s *serviceBuilder) SetName(name string) ServiceBuilder {
+ s.service.Name = name
+ return s
+}
+
+func (s *serviceBuilder) SetNamespace(namespace string) ServiceBuilder {
+ s.service.Namespace = namespace
+ return s
+}
+
+func (s *serviceBuilder) SetLabelsAndSelectors(labels map[string]string,
selectors *metav1.LabelSelector) ServiceBuilder {
+ s.service.Labels = labels
+ s.service.Spec.Selector = selectors.MatchLabels
+ return s
+}
+
+func (s *serviceBuilder) SetAnnotations(annos map[string]string)
ServiceBuilder {
+ s.service.Annotations = annos
+ return s
+}
+
+func (s *serviceBuilder) SetType(t corev1.ServiceType) ServiceBuilder {
+ s.service.Spec.Type = t
+ return s
+}
+
+func (s *serviceBuilder) SetPorts(ports []corev1.ServicePort) ServiceBuilder {
+ if s.service.Spec.Ports == nil {
+ s.service.Spec.Ports = []v1.ServicePort{}
+ }
+ s.service.Spec.Ports = ports
+ return s
+}
- return svc
+func (s *serviceBuilder) Build() *corev1.Service {
+ return s.service
}
-func ComputeNodeDefaultService(meta metav1.Object, gvk
schema.GroupVersionKind) *v1.Service {
+func DefaultService(meta metav1.Object, gvk schema.GroupVersionKind)
*v1.Service {
return &v1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "shardingsphere-proxy",
@@ -63,17 +114,16 @@ func ComputeNodeDefaultService(meta metav1.Object, gvk
schema.GroupVersionKind)
Spec: v1.ServiceSpec{
Selector: map[string]string{},
Type: v1.ServiceTypeClusterIP,
- Ports: []v1.ServicePort{},
},
}
}
-func ComputeNodeUpdateService(cn *v1alpha1.ComputeNode, cur *v1.Service)
*v1.Service {
+func UpdateService(cn *v1alpha1.ComputeNode, cur *v1.Service) *v1.Service {
exp := &v1.Service{}
exp.ObjectMeta = cur.ObjectMeta
exp.Labels = cur.Labels
exp.Annotations = cur.Annotations
- exp.Spec = ComputeNodeNewService(cn).Spec
+ exp.Spec = NewService(cn).Spec
exp.Spec.ClusterIP = cur.Spec.ClusterIP
exp.Spec.ClusterIPs = cur.Spec.ClusterIPs
if cn.Spec.ServiceType == corev1.ServiceTypeNodePort {
diff --git a/shardingsphere-operator/pkg/reconcile/computenode/service_test.go
b/shardingsphere-operator/pkg/reconcile/computenode/service_test.go
index 0a08d2c..bdd811a 100644
--- a/shardingsphere-operator/pkg/reconcile/computenode/service_test.go
+++ b/shardingsphere-operator/pkg/reconcile/computenode/service_test.go
@@ -223,7 +223,7 @@ func Test_ComputeNodeUpdateService(t *testing.T) {
}
for _, c := range cases {
- act := ComputeNodeUpdateService(c.cn, c.cur)
+ act := UpdateService(c.cn, c.cur)
assert.Equal(t, act, c.exp, fmt.Sprintf("%d: %s\n", c.id,
c.msg))
}
}