owner.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. type OwnerKind string
  7. const (
  8. OwnerKindDeployment OwnerKind = "deployment"
  9. OwnerKindStatefulSet OwnerKind = "statefulset"
  10. OwnerKindDaemonSet OwnerKind = "daemonset"
  11. OwnerKindJob OwnerKind = "job"
  12. OwnerKindCronJob OwnerKind = "cronjob"
  13. OwnerKindReplicaSet OwnerKind = "replicaset"
  14. )
  15. // Owner represents a Kubernetes resource owner
  16. type Owner struct {
  17. UID string `json:"uid"`
  18. OwnerUID string `json:"ownerUid"`
  19. Name string `json:"name"`
  20. Kind OwnerKind `json:"kind"`
  21. Controller bool `json:"controller"`
  22. Labels map[string]string `json:"labels,omitempty"`
  23. Annotations map[string]string `json:"annotations,omitempty"`
  24. Start time.Time `json:"start"`
  25. End time.Time `json:"end"`
  26. }
  27. func (kms *KubeModelSet) RegisterOwner(uid, name, namespace, kind string, isController bool) error {
  28. if uid == "" {
  29. err := fmt.Errorf("UID is nil for Owner '%s'", name)
  30. kms.Error(err)
  31. return err
  32. }
  33. if _, ok := kms.Owners[uid]; !ok {
  34. namespaceUID := ""
  35. if ns, ok := kms.idx.namespaceByName[namespace]; !ok {
  36. kms.Warnf("RegisterOwner(%s, %s, %s, %s, %t): missing namespace '%s'", uid, name, namespace, kind, isController, namespace)
  37. } else {
  38. namespaceUID = ns.UID
  39. }
  40. kms.Owners[uid] = &Owner{
  41. UID: uid,
  42. Name: name,
  43. OwnerUID: namespaceUID,
  44. Kind: OwnerKind(kind),
  45. Controller: isController,
  46. }
  47. kms.Metadata.ObjectCount++
  48. }
  49. return nil
  50. }