github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/kubernetes/resources/service/service.go (about) 1 package service 2 3 import ( 4 kubernetes2 "github.com/caos/orbos/pkg/kubernetes" 5 "github.com/caos/orbos/pkg/kubernetes/resources" 6 "github.com/caos/orbos/pkg/labels" 7 corev1 "k8s.io/api/core/v1" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 "k8s.io/apimachinery/pkg/util/intstr" 10 ) 11 12 type Port struct { 13 Port uint16 14 Protocol string 15 TargetPort string 16 NodePort uint16 17 Name string 18 } 19 20 func AdaptFuncToEnsure( 21 namespace string, 22 nameLabels labels.IDLabels, 23 ports []Port, 24 t string, 25 selector *labels.Selector, 26 publishNotReadyAddresses bool, 27 clusterIP string, 28 externalName string, 29 ) ( 30 resources.QueryFunc, 31 error, 32 ) { 33 return func(_ kubernetes2.ClientInt, _ map[string]interface{}) (resources.EnsureFunc, error) { 34 portList := make([]corev1.ServicePort, 0) 35 for _, port := range ports { 36 portList = append(portList, corev1.ServicePort{ 37 Name: port.Name, 38 Protocol: corev1.Protocol(port.Protocol), 39 Port: int32(port.Port), 40 TargetPort: intstr.Parse(port.TargetPort), 41 NodePort: int32(port.NodePort), 42 }) 43 } 44 service := &corev1.Service{ 45 ObjectMeta: metav1.ObjectMeta{ 46 Name: nameLabels.Name(), 47 Namespace: namespace, 48 Labels: labels.MustK8sMap(nameLabels), 49 }, 50 Spec: corev1.ServiceSpec{ 51 Ports: portList, 52 Selector: labels.MustK8sMap(selector), 53 Type: corev1.ServiceType(t), 54 PublishNotReadyAddresses: publishNotReadyAddresses, 55 ClusterIP: clusterIP, 56 ExternalName: externalName, 57 }, 58 } 59 60 return func(k8sClient kubernetes2.ClientInt) error { 61 return k8sClient.ApplyService(service) 62 }, nil 63 }, nil 64 } 65 66 func AdaptFuncToDestroy(namespace, name string) (resources.DestroyFunc, error) { 67 return func(client kubernetes2.ClientInt) error { 68 return client.DeleteService(namespace, name) 69 }, nil 70 }