mirror of https://github.com/hashicorp/consul
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package catalogv1alpha1
|
|
|
|
import pbresource "github.com/hashicorp/consul/proto-public/pbresource"
|
|
|
|
// GetUnderlyingDestinations will collect FailoverDestinations from all
|
|
// internal fields and bundle them up in one slice.
|
|
//
|
|
// NOTE: no deduplication occurs.
|
|
func (x *FailoverPolicy) GetUnderlyingDestinations() []*FailoverDestination {
|
|
if x == nil {
|
|
return nil
|
|
}
|
|
|
|
estimate := 0
|
|
if x.Config != nil {
|
|
estimate += len(x.Config.Destinations)
|
|
}
|
|
for _, pc := range x.PortConfigs {
|
|
estimate += len(pc.Destinations)
|
|
}
|
|
|
|
out := make([]*FailoverDestination, 0, estimate)
|
|
if x.Config != nil {
|
|
out = append(out, x.Config.Destinations...)
|
|
}
|
|
for _, pc := range x.PortConfigs {
|
|
out = append(out, pc.Destinations...)
|
|
}
|
|
return out
|
|
}
|
|
|
|
// GetUnderlyingDestinationRefs is like GetUnderlyingDestinations except it
|
|
// returns a slice of References.
|
|
//
|
|
// NOTE: no deduplication occurs.
|
|
func (x *FailoverPolicy) GetUnderlyingDestinationRefs() []*pbresource.Reference {
|
|
if x == nil {
|
|
return nil
|
|
}
|
|
|
|
dests := x.GetUnderlyingDestinations()
|
|
|
|
out := make([]*pbresource.Reference, 0, len(dests))
|
|
for _, dest := range dests {
|
|
if dest.Ref != nil {
|
|
out = append(out, dest.Ref)
|
|
}
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
// IsEmpty returns true if a config has no definition.
|
|
func (x *FailoverConfig) IsEmpty() bool {
|
|
if x == nil {
|
|
return true
|
|
}
|
|
return len(x.Destinations) == 0 &&
|
|
x.Mode == 0 &&
|
|
len(x.Regions) == 0 &&
|
|
x.SamenessGroup == ""
|
|
}
|