From 77c42011a472272f18ca0201a881a3bf5fcac1de Mon Sep 17 00:00:00 2001 From: Ankit R Gadiya Date: Sat, 26 Oct 2019 15:46:41 +0530 Subject: [PATCH] feat(service): Added default Generate function for Service --- pkg/service/service.go | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 pkg/service/service.go diff --git a/pkg/service/service.go b/pkg/service/service.go new file mode 100644 index 0000000..651e06e --- /dev/null +++ b/pkg/service/service.go @@ -0,0 +1,60 @@ +package service + +import ( + "github.com/ankitrgadiya/operatorlib/pkg/meta" + + "github.com/pkg/errors" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// GenerateService generates Service object as per the `Conf` struct +// passed. The function only supports a subset of all the Service +// features but should be good enough for most usecases. Support for +// ExternalService or LoadBalancer service is not there. +func GenerateService(c Conf) (s *corev1.Service, err error) { + var om *metav1.ObjectMeta + var ports []corev1.ServicePort + var selectors map[string]string + + om, err = meta.GenerateObjectMeta(meta.Conf{ + Instance: c.Instance, + Name: c.Name, + Namespace: c.Namespace, + GenLabelsFunc: c.GenLabelsFunc, + GenAnnotationsFunc: c.GenAnnotationsFunc, + AppendLabels: c.AppendLabels, + }) + if err != nil { + return nil, errors.Wrap(err, "failed to generate objectmeta") + } + + if c.GenServicePortsFunc != nil { + ports, err = c.GenServicePortsFunc(c.Instance) + if err != nil { + return nil, errors.Wrap(err, "failed to generate service ports") + } + } + + if c.GenSelectorFunc != nil { + selectors, err = c.GenSelectorFunc(c.Instance) + if err != nil { + return nil, errors.Wrap(err, "failed to generate service selectors") + } + } + + s = &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", + APIVersion: "v1", + }, + ObjectMeta: *om, + Spec: corev1.ServiceSpec{ + Ports: ports, + Selector: selectors, + Type: corev1.ServiceType(c.Type), + }, + } + + return s, nil +} -- GitLab