func()

in iotdb-operator/internal/controller/confignode_controller.go [229:294]


func (r *ConfigNodeReconciler) constructServicesForConfigNode(configNode *iotdbv1.ConfigNode) ([]corev1.Service, error) {
	headlessService := &corev1.Service{
		ObjectMeta: metav1.ObjectMeta{
			Name:      ConfigNodeName + "-headless",
			Namespace: configNode.Namespace,
			Labels:    map[string]string{"app": ConfigNodeName},
		},
		Spec: corev1.ServiceSpec{
			ClusterIP: "None",
			Ports: []corev1.ServicePort{
				{
					Name:       "cn-internal-port",
					Port:       10710,
					TargetPort: intstr.FromInt32(10710),
				},
				{
					Name:       "cn-consensus-port",
					Port:       10720,
					TargetPort: intstr.FromInt32(10720),
				},
			},
			Selector: map[string]string{
				"app": ConfigNodeName,
			},
		},
	}
	err := SetControllerReference(configNode, headlessService, r.Scheme)
	if err != nil {
		return nil, err
	}

	services := []corev1.Service{*headlessService}
	if configNode.Spec.Service != nil && len(configNode.Spec.Service.Ports) > 0 {
		for key, value := range configNode.Spec.Service.Ports {
			if key == "cn_metric_prometheus_reporter_port" {
				nodePortService := &corev1.Service{
					ObjectMeta: metav1.ObjectMeta{
						Name:      ConfigNodeName,
						Namespace: configNode.Namespace,
						Labels:    map[string]string{"app": ConfigNodeName},
					},
					Spec: corev1.ServiceSpec{
						Type: corev1.ServiceTypeNodePort,
						Ports: []corev1.ServicePort{
							{
								Name:       strutil.ToKebabCase(key),
								Port:       9091,
								NodePort:   value,
								TargetPort: intstr.FromInt32(9091),
							},
						},
						Selector: map[string]string{
							"app": ConfigNodeName,
						},
					},
				}
				err := SetControllerReference(configNode, nodePortService, r.Scheme)
				if err != nil {
					return nil, err
				}
				services = append(services, *nodePortService)
			}
		}
	}
	return services, nil
}