Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions internal/testutils/endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ func (b byAllFields) Less(i, j int) bool {
// SameEndpoint returns true if two endpoints are same
// considers example.org. and example.org DNSName/Target as different endpoints
func SameEndpoint(a, b *endpoint.Endpoint) bool {
if a == nil || b == nil {
return a == b
}
return a.DNSName == b.DNSName && a.Targets.Same(b.Targets) && a.RecordType == b.RecordType && a.SetIdentifier == b.SetIdentifier &&
a.Labels[endpoint.OwnerLabelKey] == b.Labels[endpoint.OwnerLabelKey] && a.RecordTTL == b.RecordTTL &&
a.Labels[endpoint.ResourceLabelKey] == b.Labels[endpoint.ResourceLabelKey] &&
Expand Down
124 changes: 75 additions & 49 deletions provider/aws/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -827,65 +827,91 @@ func (p *AWSProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoi
var aliasCnameAaaaEndpoints []*endpoint.Endpoint

for _, ep := range endpoints {
alias := false
if aaaa := p.adjustEndpointAndNewAaaaIfNeeded(ep); aaaa != nil {
aliasCnameAaaaEndpoints = append(aliasCnameAaaaEndpoints, aaaa)
}
}
return append(endpoints, aliasCnameAaaaEndpoints...), nil
}

if aliasString, ok := ep.GetProviderSpecificProperty(providerSpecificAlias); ok {
alias = aliasString == "true"
if alias {
if !slices.Contains([]string{endpoint.RecordTypeA, endpoint.RecordTypeAAAA, endpoint.RecordTypeCNAME}, ep.RecordType) {
ep.DeleteProviderSpecificProperty(providerSpecificAlias)
}
} else {
if ep.RecordType == endpoint.RecordTypeCNAME {
if aliasString != "false" {
ep.SetProviderSpecificProperty(providerSpecificAlias, "false")
}
} else {
ep.DeleteProviderSpecificProperty(providerSpecificAlias)
}
func (p *AWSProvider) adjustEndpointAndNewAaaaIfNeeded(ep *endpoint.Endpoint) *endpoint.Endpoint {
setAliasConf := func(ep *endpoint.Endpoint) {
if ep.RecordTTL.IsConfigured() {
log.Debugf("Modifying endpoint: %v, setting ttl=%v", ep, defaultTTL)
ep.RecordTTL = defaultTTL
}
if prop, ok := ep.GetProviderSpecificProperty(providerSpecificEvaluateTargetHealth); ok {
if prop != "true" && prop != "false" {
ep.SetProviderSpecificProperty(providerSpecificEvaluateTargetHealth, "false")
}
} else if ep.RecordType == endpoint.RecordTypeCNAME {
alias = useAlias(ep, p.preferCNAME)
log.Debugf("Modifying endpoint: %v, setting %s=%v", ep, providerSpecificAlias, alias)
ep.SetProviderSpecificProperty(providerSpecificAlias, strconv.FormatBool(alias))
} else {
ep.SetProviderSpecificProperty(providerSpecificEvaluateTargetHealth, strconv.FormatBool(p.evaluateTargetHealth))
}

if alias {
if ep.RecordTTL.IsConfigured() {
log.Debugf("Modifying endpoint: %v, setting ttl=%v", ep, defaultTTL)
ep.RecordTTL = defaultTTL
}
cnameAliasCase := func(ep *endpoint.Endpoint) *endpoint.Endpoint {
setAliasConf(ep)
result := &endpoint.Endpoint{
DNSName: ep.DNSName,
Targets: ep.Targets,
RecordType: endpoint.RecordTypeAAAA,
RecordTTL: ep.RecordTTL,
Labels: ep.Labels,
ProviderSpecific: ep.ProviderSpecific,
SetIdentifier: ep.SetIdentifier,
}
ep.RecordType = endpoint.RecordTypeA
return result
}

var additionalAAAA *endpoint.Endpoint
switch ep.RecordType {
case endpoint.RecordTypeA, endpoint.RecordTypeAAAA:
aliasString, ok := ep.GetProviderSpecificProperty(providerSpecificAlias)
switch aliasString {
case "true":
setAliasConf(ep)
case "":
if ok {
ep.DeleteProviderSpecificProperty(providerSpecificAlias)
}
if prop, ok := ep.GetProviderSpecificProperty(providerSpecificEvaluateTargetHealth); ok {
if prop != "true" && prop != "false" {
ep.SetProviderSpecificProperty(providerSpecificEvaluateTargetHealth, "false")
}
ep.DeleteProviderSpecificProperty(providerSpecificEvaluateTargetHealth)
default:
ep.DeleteProviderSpecificProperty(providerSpecificAlias)
ep.DeleteProviderSpecificProperty(providerSpecificEvaluateTargetHealth)
}
case endpoint.RecordTypeCNAME:
aliasString, _ := ep.GetProviderSpecificProperty(providerSpecificAlias)
switch aliasString {
case "true":
additionalAAAA = cnameAliasCase(ep)
case "":
alias := useAlias(ep, p.preferCNAME)
log.Debugf("Modifying endpoint: %v, setting %s=%v", ep, providerSpecificAlias, alias)
ep.SetProviderSpecificProperty(providerSpecificAlias, strconv.FormatBool(alias))
if alias {
additionalAAAA = cnameAliasCase(ep)
} else {
ep.SetProviderSpecificProperty(providerSpecificEvaluateTargetHealth, strconv.FormatBool(p.evaluateTargetHealth))
ep.DeleteProviderSpecificProperty(providerSpecificEvaluateTargetHealth)
}

if ep.RecordType == endpoint.RecordTypeCNAME {
// This needs to match two records from Route53, one alias for 'A' (IPv4)
// and one alias for 'AAAA' (IPv6).
aliasCnameAaaaEndpoints = append(aliasCnameAaaaEndpoints, &endpoint.Endpoint{
DNSName: ep.DNSName,
Targets: ep.Targets,
RecordType: endpoint.RecordTypeAAAA,
RecordTTL: ep.RecordTTL,
Labels: ep.Labels,
ProviderSpecific: ep.ProviderSpecific,
SetIdentifier: ep.SetIdentifier,
})
ep.RecordType = endpoint.RecordTypeA
}
} else {
default:
ep.SetProviderSpecificProperty(providerSpecificAlias, "false")
ep.DeleteProviderSpecificProperty(providerSpecificEvaluateTargetHealth)
}
default:
// TODO: fix For records other than A, AAAA, and CNAME, if an alias record is set, the alias record processing is not performed. This will be fixed in another PR.
aliasString, _ := ep.GetProviderSpecificProperty(providerSpecificAlias)
switch aliasString {
case "true":
ep.DeleteProviderSpecificProperty(providerSpecificAlias)
setAliasConf(ep)
default:
ep.DeleteProviderSpecificProperty(providerSpecificAlias)
ep.DeleteProviderSpecificProperty(providerSpecificEvaluateTargetHealth)
}

adjustGeoProximityLocationEndpoint(ep)
}

endpoints = append(endpoints, aliasCnameAaaaEndpoints...)
return endpoints, nil
adjustGeoProximityLocationEndpoint(ep)
return additionalAAAA
}

// if the endpoint is using geoproximity, set the bias to 0 if not set
Expand Down
Loading
Loading