Skip to content
service.go 1.23 KiB
Newer Older
Timothee Gosselin's avatar
Timothee Gosselin committed
package service

import (
	"github.com/ankitrgadiya/operatorlib/pkg/meta"
	"github.com/imdario/mergo"
	"github.com/pkg/errors"
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

func Generate(m Mutate) (out corev1.Service, err error) {
Timothee Gosselin's avatar
Timothee Gosselin committed

	om, err := meta.MutateObjectMeta(m)
Timothee Gosselin's avatar
Timothee Gosselin committed

	ports, err := m.GenServicePorts()
	if err != nil {
		return out, errors.Wrap(err, "failed to generate service ports spec")
	}
Timothee Gosselin's avatar
Timothee Gosselin committed

	selectors, err := m.GenServiceSelector()
	if err != nil {
		return out, errors.Wrap(err, "failed to generate service selectors spec")
	}
Timothee Gosselin's avatar
Timothee Gosselin committed

	t, err := m.GenServiceType()
	if err != nil {
		return out, errors.Wrap(err, "failed to generate service type spec")
	}

	out.ObjectMeta = *om
	out.Spec = corev1.ServiceSpec{
		Ports:    ports,
		Selector: selectors,
		Type:     t,
	}

	return out, err
}
Timothee Gosselin's avatar
Timothee Gosselin committed

func (c Conf) Mutate() controllerutil.MutateFn {

	return func() error {
		out, err := Generate(c)
		if err != nil {
			return err
Timothee Gosselin's avatar
Timothee Gosselin committed
		}

		mergo.Merge(c.Obj, out)
Timothee Gosselin's avatar
Timothee Gosselin committed

Timothee Gosselin's avatar
Timothee Gosselin committed
	}
}

func (c Conf) MakeObject() *corev1.Service {
	obj := &corev1.Service{
		ObjectMeta: metav1.ObjectMeta{
			Name:      c.ObjectName(),
			Namespace: c.ObjectNamespace(),
		},
	}

	return obj
}