owner.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. // @bingen:generate:Owner
  17. type Owner struct {
  18. UID string `json:"uid"`
  19. NamespaceUID string `json:"namespaceUid"`
  20. Name string `json:"name"`
  21. Kind OwnerKind `json:"kind"`
  22. Labels map[string]string `json:"labels,omitempty"`
  23. Annotations map[string]string `json:"annotations,omitempty"`
  24. Start time.Time `json:"start,omitempty"`
  25. End time.Time `json:"end,omitempty"`
  26. }
  27. func (kms *KubeModelSet) RegisterOwner(uid, name, namespace, kind string) 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): missing namespace '%s'", uid, name, namespace, kind, namespace)
  37. } else {
  38. namespaceUID = ns.UID
  39. }
  40. kms.Owners[uid] = &Owner{
  41. UID: uid,
  42. Name: name,
  43. NamespaceUID: namespaceUID,
  44. Kind: OwnerKind(kind),
  45. }
  46. kms.Metadata.ObjectCount++
  47. }
  48. return nil
  49. }