cronjob.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. // @bingen:generate:CronJob
  7. // CronJob represents a Kubernetes CronJob resource
  8. type CronJob struct {
  9. UID string `json:"uid"`
  10. NamespaceUID string `json:"namespaceUid"`
  11. Name string `json:"name"`
  12. Labels map[string]string `json:"labels,omitempty"`
  13. Annotations map[string]string `json:"annotations,omitempty"`
  14. Start time.Time `json:"start,omitempty"`
  15. End time.Time `json:"end,omitempty"`
  16. }
  17. func (c *CronJob) ValidateCronJob(window Window) error {
  18. if c.UID == "" {
  19. return fmt.Errorf("UID is missing for CronJob with name '%s'", c.Name)
  20. }
  21. if c.Name == "" {
  22. return fmt.Errorf("Name is missing for CronJob '%s'", c.UID)
  23. }
  24. if c.NamespaceUID == "" {
  25. return fmt.Errorf("NamespaceUID is missing for CronJob '%s'", c.UID)
  26. }
  27. if err := checkWindow(window, c.Start, c.End); err != nil {
  28. return err
  29. }
  30. return nil
  31. }
  32. func (kms *KubeModelSet) RegisterCronJob(cronJob *CronJob) error {
  33. if err := cronJob.ValidateCronJob(kms.Window); err != nil {
  34. err = fmt.Errorf("RegisterCronJob: invalid cronjob: %w", err)
  35. kms.Error(err)
  36. return err
  37. }
  38. if _, ok := kms.CronJobs[cronJob.UID]; !ok {
  39. if kms.Cluster == nil {
  40. kms.Warnf("RegisterCronJob: Cluster is nil")
  41. }
  42. kms.CronJobs[cronJob.UID] = cronJob
  43. kms.Metadata.ObjectCount++
  44. }
  45. return nil
  46. }