cluster.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/opencost/opencost/core/pkg/model/shared"
  6. )
  7. // @bingen:generate:Cluster
  8. type Cluster struct {
  9. UID string `json:"uid"` // @bingen:field[version=1]
  10. Provider shared.Provider `json:"provider"` // @bingen:field[version=1]
  11. Account string `json:"account"` // @bingen:field[version=1]
  12. Name string `json:"name"` // @bingen:field[version=1]
  13. Region string `json:"region"` // @bingen:field[version=2]
  14. Start time.Time `json:"start"` // @bingen:field[version=1]
  15. End time.Time `json:"end"` // @bingen:field[version=1]
  16. }
  17. func (c *Cluster) ValidateCluster(window Window) error {
  18. if c.UID == "" {
  19. err := fmt.Errorf("UID is missing for Cluster with name '%s'", c.Name)
  20. return err
  21. }
  22. if err := checkWindow(window, c.Start, c.End); err != nil {
  23. return err
  24. }
  25. return nil
  26. }
  27. func (kms *KubeModelSet) RegisterCluster(cluster *Cluster) error {
  28. if err := cluster.ValidateCluster(kms.Window); err != nil {
  29. err = fmt.Errorf("RegisterCluster: invalid cluster: %w", err)
  30. kms.Error(err)
  31. return err
  32. }
  33. if kms.Cluster == nil {
  34. kms.Cluster = cluster
  35. } else if cluster.UID != kms.Cluster.UID {
  36. kms.Warnf("RegisterCluster(%s): attempting to change cluster UID from %s to %s", cluster.UID, kms.Cluster.UID, cluster.UID)
  37. } else {
  38. kms.Debugf("RegisterCluster(%s): cluster already registered", cluster.UID)
  39. }
  40. return nil
  41. }