namespace.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. // @bingen:generate:Namespace
  7. type Namespace struct {
  8. UID string `json:"uid"` // @bingen:field[version=1]
  9. // This field was included in the initial bigen codec but was never populated. If you need to add a new string
  10. // field to this structure rename this field and delete this comment
  11. bingenPlaceHolder string // @bingen:field[version=1]
  12. Name string `json:"name"` // @bingen:field[version=1]
  13. Labels map[string]string `json:"labels"` // @bingen:field[version=1]
  14. Annotations map[string]string `json:"annotations"` // @bingen:field[version=1]
  15. Start time.Time `json:"start,omitempty"` // @bingen:field[version=1]
  16. End time.Time `json:"end,omitempty"` // @bingen:field[version=1]
  17. }
  18. func (n *Namespace) ValidateNamespace(window Window) error {
  19. if n.UID == "" {
  20. return fmt.Errorf("UID is missing for Namespace with name '%s'", n.Name)
  21. }
  22. if n.Name == "" {
  23. return fmt.Errorf("Name is missing for Namespace '%s'", n.UID)
  24. }
  25. if err := checkWindow(window, n.Start, n.End); err != nil {
  26. return err
  27. }
  28. return nil
  29. }
  30. func (kms *KubeModelSet) RegisterNamespace(namespace *Namespace) error {
  31. if err := namespace.ValidateNamespace(kms.Window); err != nil {
  32. err = fmt.Errorf("RegisterNamespace: invalid namespace: %w", err)
  33. kms.Error(err)
  34. return err
  35. }
  36. if _, ok := kms.Namespaces[namespace.UID]; !ok {
  37. if kms.Cluster == nil {
  38. kms.Warnf("RegisterNamespace: Cluster is nil")
  39. }
  40. kms.Namespaces[namespace.UID] = namespace
  41. kms.idx.namespaceByName[namespace.Name] = namespace
  42. kms.Metadata.ObjectCount++
  43. }
  44. return nil
  45. }