Skip to content
cronjob.go 1.18 KiB
Newer Older
Timothee Gosselin's avatar
WIP
Timothee Gosselin committed
package cronjob

import (
	"github.com/ankitrgadiya/operatorlib/pkg/job"
	"github.com/ankitrgadiya/operatorlib/pkg/meta"
	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

	"github.com/pkg/errors"
	batchv1beta1 "k8s.io/api/batch/v1beta1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

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

	return func() error {
		out := c.Obj.(*batchv1beta1.CronJob)

		om, err := meta.MutateObjectMeta(c)

		if err != nil {
			return errors.Wrap(err, "failed to generate objectmeta")
		}

		p, err := job.MutateJob(c)

		if err != nil {
			return errors.Wrap(err, "failed to generate job template spec")
		}

		schedule, err := c.GenScheduleFunc()
		if err != nil {
			return errors.Wrap(err, "failed to generate cron schedule spec")
		}

		out.ObjectMeta = *om
		out.Spec = batchv1beta1.CronJobSpec{
			Schedule: schedule,
			JobTemplate: batchv1beta1.JobTemplateSpec{
				ObjectMeta: *om,
				Spec:       p.Spec,
			},
		}

		c.Obj = out
		return err
	}
}

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

	return obj
}