@@ -140,6 +140,7 @@ func (a *AWSHubActuator) Reconcile(cd *hivev1.ClusterDeployment, metadata *hivev
140
140
if err != nil {
141
141
return reconcile.Result {}, errors .Wrap (err , "failed to update condition on cluster deployment" )
142
142
}
143
+ return reconcile.Result {Requeue : true }, nil
143
144
}
144
145
145
146
logger .Debug ("reconciling Hosted Zone Records" )
@@ -158,6 +159,7 @@ func (a *AWSHubActuator) Reconcile(cd *hivev1.ClusterDeployment, metadata *hivev
158
159
if err != nil {
159
160
return reconcile.Result {}, errors .Wrap (err , "failed to update condition on cluster deployment" )
160
161
}
162
+ return reconcile.Result {Requeue : true }, nil
161
163
}
162
164
163
165
logger .Debug ("reconciling Hosted Zone Associations" )
@@ -177,6 +179,7 @@ func (a *AWSHubActuator) Reconcile(cd *hivev1.ClusterDeployment, metadata *hivev
177
179
if err != nil {
178
180
return reconcile.Result {}, errors .Wrap (err , "failed to update condition on cluster deployment" )
179
181
}
182
+ return reconcile.Result {Requeue : true }, nil
180
183
}
181
184
182
185
return reconcile.Result {}, nil
@@ -374,11 +377,113 @@ func (a *AWSHubActuator) cleanupHostedZone(cd *hivev1.ClusterDeployment, metadat
374
377
}
375
378
376
379
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
+
377
383
rSet , err := a .recordSet (cd , apiDomain , dnsRecord )
378
384
if err != nil {
379
385
return false , errors .Wrap (err , "error generating DNS records" )
380
386
}
381
387
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
+ }
382
487
_ , err = a .awsClientHub .ChangeResourceRecordSets (& route53.ChangeResourceRecordSetsInput {
383
488
HostedZoneId : aws .String (hostedZoneID ),
384
489
ChangeBatch : & route53.ChangeBatch {
0 commit comments