func()

in shardingsphere-operator/pkg/controllers/compute_node_controller.go [195:228]


func (r *ComputeNodeReconciler) updateService(ctx context.Context, cn *v1alpha1.ComputeNode, s *corev1.Service) error {
	pbs := []v1alpha1.PortBinding{}
	copy(cn.Spec.PortBindings, pbs)
	switch cn.Spec.ServiceType {
	case corev1.ServiceTypeClusterIP:
		updateServiceClusterIP(cn.Spec.PortBindings)
		if !reflect.DeepEqual(cn.Spec.PortBindings, pbs) {
			return r.updateComputeNodePortBindings(ctx, cn)
		}
	case corev1.ServiceTypeExternalName:
		fallthrough
	case corev1.ServiceTypeLoadBalancer:
		fallthrough
	case corev1.ServiceTypeNodePort:
		updateServiceNodePort(cn.Spec.PortBindings, s.Spec.Ports)
		if !reflect.DeepEqual(cn.Spec.PortBindings, pbs) {
			return r.updateComputeNodePortBindings(ctx, cn)
		}
	}

	exp := r.Builder.BuildService(ctx, cn)
	exp.ObjectMeta = s.ObjectMeta
	exp.Spec.ClusterIP = s.Spec.ClusterIP
	exp.Spec.ClusterIPs = s.Spec.ClusterIPs

	if cn.Spec.ServiceType == corev1.ServiceTypeNodePort {
		exp.Spec.Ports = updateNodePorts(cn.Spec.PortBindings, s.Spec.Ports)
	}

	if !reflect.DeepEqual(exp.Spec, s.Spec) {
		return r.Update(ctx, exp)
	}
	return nil
}