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 Generate(m Mutate) (out batchv1beta1.CronJob, err error) { om, err := meta.MutateObjectMeta(m) if err != nil { return out, errors.Wrap(err, "failed to generate objectmeta") } child, err := job.Generate(m) if err != nil { return out, errors.Wrap(err, "failed to generate job template spec") } schedule, err := m.GenSchedule() if err != nil { return out, errors.Wrap(err, "failed to generate cron schedule spec") } out.ObjectMeta = *om out.Spec = batchv1beta1.CronJobSpec{ Schedule: schedule, JobTemplate: batchv1beta1.JobTemplateSpec{ ObjectMeta: *om, Spec: child.Spec, }, } return out, err } func (c Conf) Mutate() controllerutil.MutateFn { return func() error { out, err := Generate(c) if err != nil { return err } c.Obj = &out return nil } } func (c Conf) MakeObject() *batchv1beta1.CronJob { obj := &batchv1beta1.CronJob{ ObjectMeta: metav1.ObjectMeta{ Name: c.ObjectName(), Namespace: c.ObjectNamespace(), }, } return obj }