@ -221,7 +221,13 @@ func (c *route53Client) computeChanges(name string, records map[string]string, e
}
}
records = lrecords
records = lrecords
var changes [ ] types . Change
var (
changes [ ] types . Change
inserts int
upserts int
skips int
)
for path , newValue := range records {
for path , newValue := range records {
prevRecords , exists := existing [ path ]
prevRecords , exists := existing [ path ]
prevValue := strings . Join ( prevRecords . values , "" )
prevValue := strings . Join ( prevRecords . values , "" )
@ -237,20 +243,30 @@ func (c *route53Client) computeChanges(name string, records map[string]string, e
if ! exists {
if ! exists {
// Entry is unknown, push a new one
// Entry is unknown, push a new one
log . Info ( fmt . Sprintf ( "Creating %s = %s" , path , newValue ) )
log . Debug ( fmt . Sprintf ( "Creating %s = %s" , path , newValue ) )
changes = append ( changes , newTXTChange ( "CREATE" , path , ttl , newValue ) )
changes = append ( changes , newTXTChange ( "CREATE" , path , ttl , newValue ) )
inserts ++
} else if prevValue != newValue || prevRecords . ttl != ttl {
} else if prevValue != newValue || prevRecords . ttl != ttl {
// Entry already exists, only change its content.
// Entry already exists, only change its content.
log . Info ( fmt . Sprintf ( "Updating %s from %s to %s" , path , prevValue , newValue ) )
log . Info ( fmt . Sprintf ( "Updating %s from %s to %s" , path , prevValue , newValue ) )
changes = append ( changes , newTXTChange ( "UPSERT" , path , ttl , newValue ) )
changes = append ( changes , newTXTChange ( "UPSERT" , path , ttl , newValue ) )
upserts ++
} else {
} else {
log . Debug ( fmt . Sprintf ( "Skipping %s = %s" , path , newValue ) )
log . Debug ( fmt . Sprintf ( "Skipping %s = %s" , path , newValue ) )
skips ++
}
}
}
}
// Iterate over the old records and delete anything stale.
// Iterate over the old records and delete anything stale.
changes = append ( changes , makeDeletionChanges ( existing , records ) ... )
deletions := makeDeletionChanges ( existing , records )
changes = append ( changes , deletions ... )
log . Info ( "Computed DNS changes" ,
"changes" , len ( changes ) ,
"inserts" , inserts ,
"skips" , skips ,
"deleted" , len ( deletions ) ,
"upserts" , upserts )
// Ensure changes are in the correct order.
// Ensure changes are in the correct order.
sortChanges ( changes )
sortChanges ( changes )
return changes
return changes
@ -263,7 +279,7 @@ func makeDeletionChanges(records map[string]recordSet, keep map[string]string) [
if _ , ok := keep [ path ] ; ok {
if _ , ok := keep [ path ] ; ok {
continue
continue
}
}
log . Info ( fmt . Sprintf ( "Deleting %s = %s" , path , strings . Join ( set . values , "" ) ) )
log . Debug ( fmt . Sprintf ( "Deleting %s = %s" , path , strings . Join ( set . values , "" ) ) )
changes = append ( changes , newTXTChange ( "DELETE" , path , set . ttl , set . values ... ) )
changes = append ( changes , newTXTChange ( "DELETE" , path , set . ttl , set . values ... ) )
}
}
return changes
return changes