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  }