Skip to content

Commit 20cdfee

Browse files
committed
privatelink: actuator reconcile functions to requeue on every change
1 parent 5fd4267 commit 20cdfee

File tree

4 files changed

+674
-44
lines changed

4 files changed

+674
-44
lines changed

pkg/controller/privatelink/actuator/awsactuator/awshubactuator.go

+105
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ func (a *AWSHubActuator) Reconcile(cd *hivev1.ClusterDeployment, metadata *hivev
140140
if err != nil {
141141
return reconcile.Result{}, errors.Wrap(err, "failed to update condition on cluster deployment")
142142
}
143+
return reconcile.Result{Requeue: true}, nil
143144
}
144145

145146
logger.Debug("reconciling Hosted Zone Records")
@@ -158,6 +159,7 @@ func (a *AWSHubActuator) Reconcile(cd *hivev1.ClusterDeployment, metadata *hivev
158159
if err != nil {
159160
return reconcile.Result{}, errors.Wrap(err, "failed to update condition on cluster deployment")
160161
}
162+
return reconcile.Result{Requeue: true}, nil
161163
}
162164

163165
logger.Debug("reconciling Hosted Zone Associations")
@@ -177,6 +179,7 @@ func (a *AWSHubActuator) Reconcile(cd *hivev1.ClusterDeployment, metadata *hivev
177179
if err != nil {
178180
return reconcile.Result{}, errors.Wrap(err, "failed to update condition on cluster deployment")
179181
}
182+
return reconcile.Result{Requeue: true}, nil
180183
}
181184

182185
return reconcile.Result{}, nil
@@ -374,11 +377,113 @@ func (a *AWSHubActuator) cleanupHostedZone(cd *hivev1.ClusterDeployment, metadat
374377
}
375378

376379
func (a *AWSHubActuator) ReconcileHostedZoneRecords(cd *hivev1.ClusterDeployment, hostedZoneID string, dnsRecord *actuator.DnsRecord, apiDomain string, logger log.FieldLogger) (bool, error) {
380+
hzLog := logger.WithField("hostedZoneID", hostedZoneID)
381+
modified := false
382+
377383
rSet, err := a.recordSet(cd, apiDomain, dnsRecord)
378384
if err != nil {
379385
return false, errors.Wrap(err, "error generating DNS records")
380386
}
381387

388+
recordsResp, err := a.awsClientHub.ListResourceRecordSets(&route53.ListResourceRecordSetsInput{
389+
HostedZoneId: aws.String(hostedZoneID),
390+
})
391+
if err != nil {
392+
return false, errors.Wrapf(err, "failed to list the hosted zone %s", hostedZoneID)
393+
}
394+
395+
for _, record := range recordsResp.ResourceRecordSets {
396+
if *record.Name != *rSet.Name {
397+
continue
398+
}
399+
if rSet.ResourceRecords != nil {
400+
if aws.StringValue(record.Type) != aws.StringValue(rSet.Type) {
401+
modified = true
402+
hzLog.WithFields(log.Fields{
403+
"record": aws.StringValue(rSet.Name),
404+
"type": aws.StringValue(rSet.Type),
405+
}).Debug("updating record type")
406+
}
407+
if aws.Int64Value(record.TTL) != aws.Int64Value(rSet.TTL) {
408+
modified = true
409+
hzLog.WithFields(log.Fields{
410+
"record": aws.StringValue(rSet.Name),
411+
"ttl": aws.Int64Value(rSet.TTL),
412+
}).Debug("updating record ttl")
413+
}
414+
415+
oldRecords := sets.NewString()
416+
for _, record := range record.ResourceRecords {
417+
oldRecords.Insert(aws.StringValue(record.Value))
418+
}
419+
420+
desiredRecords := sets.NewString()
421+
for _, record := range rSet.ResourceRecords {
422+
desiredRecords.Insert(aws.StringValue(record.Value))
423+
}
424+
425+
added := desiredRecords.Difference(oldRecords).List()
426+
removed := oldRecords.Difference(desiredRecords).List()
427+
428+
if len(added) > 0 || len(removed) > 0 {
429+
modified = true
430+
hzLog.WithFields(log.Fields{
431+
"added": added,
432+
"removed": removed,
433+
}).Debug("updating the addresses assigned to the dns record")
434+
}
435+
436+
if !modified {
437+
return false, nil
438+
}
439+
} else if rSet.AliasTarget != nil {
440+
logger.Debugf("AliasTarget")
441+
if record.AliasTarget == nil {
442+
modified = true
443+
hzLog.WithFields(log.Fields{
444+
"record": aws.StringValue(rSet.Name),
445+
}).Debug("updating the record to use alias target")
446+
break
447+
}
448+
449+
if aws.StringValue(record.Type) != aws.StringValue(rSet.Type) {
450+
modified = true
451+
hzLog.WithFields(log.Fields{
452+
"record": aws.StringValue(rSet.Name),
453+
"type": aws.StringValue(rSet.Type),
454+
}).Debug("updating record type")
455+
}
456+
457+
if aws.StringValue(record.AliasTarget.DNSName) != aws.StringValue(rSet.AliasTarget.DNSName) {
458+
modified = true
459+
hzLog.WithFields(log.Fields{
460+
"record": aws.StringValue(rSet.Name),
461+
"dnsName": aws.StringValue(rSet.AliasTarget.DNSName),
462+
}).Debug("updating the aliasTarget dnsName")
463+
}
464+
465+
if aws.StringValue(record.AliasTarget.HostedZoneId) != aws.StringValue(rSet.AliasTarget.HostedZoneId) {
466+
modified = true
467+
hzLog.WithFields(log.Fields{
468+
"record": aws.StringValue(rSet.Name),
469+
"hostedZoneId": aws.StringValue(rSet.AliasTarget.HostedZoneId),
470+
}).Debug("updating the aliasTarget hostedZoneId")
471+
}
472+
473+
if aws.BoolValue(record.AliasTarget.EvaluateTargetHealth) != aws.BoolValue(rSet.AliasTarget.EvaluateTargetHealth) {
474+
modified = true
475+
hzLog.WithFields(log.Fields{
476+
"record": aws.StringValue(rSet.Name),
477+
"evaluateTargetHealth": aws.BoolValue(rSet.AliasTarget.EvaluateTargetHealth),
478+
}).Debug("updating the aliasTarget evaluateTargetHealth")
479+
}
480+
481+
if !modified {
482+
return false, nil
483+
}
484+
}
485+
break
486+
}
382487
_, err = a.awsClientHub.ChangeResourceRecordSets(&route53.ChangeResourceRecordSetsInput{
383488
HostedZoneId: aws.String(hostedZoneID),
384489
ChangeBatch: &route53.ChangeBatch{

0 commit comments

Comments
 (0)