owner.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 (workload controller)
  16. type Owner struct {
  17. UID string `json:"uid"`
  18. NamespaceUID string `json:"namespaceUid"`
  19. Name string `json:"name"`
  20. Kind OwnerKind `json:"kind"`
  21. Labels map[string]string `json:"labels,omitempty"`
  22. Annotations map[string]string `json:"annotations,omitempty"`
  23. Start time.Time `json:"start,omitempty"`
  24. End time.Time `json:"end,omitempty"`
  25. }
  26. func (kms *KubeModelSet) RegisterOwner(uid, name, namespace, kind string) error {
  27. if uid == "" {
  28. err := fmt.Errorf("UID is nil for Owner '%s'", name)
  29. kms.Error(err)
  30. return err
  31. }
  32. if _, ok := kms.Owners[uid]; !ok {
  33. namespaceUID := ""
  34. if ns, ok := kms.idx.namespaceByName[namespace]; !ok {
  35. kms.Warnf("RegisterOwner(%s, %s, %s, %s): missing namespace '%s'", uid, name, namespace, kind, namespace)
  36. } else {
  37. namespaceUID = ns.UID
  38. }
  39. kms.Owners[uid] = &Owner{
  40. UID: uid,
  41. Name: name,
  42. NamespaceUID: namespaceUID,
  43. Kind: OwnerKind(kind),
  44. }
  45. kms.Metadata.ObjectCount++
  46. }
  47. return nil
  48. }