@@ -236,15 +236,58 @@ public async Task<ActionResult> DeleteRecord(DnsRecord request)
236236 {
237237 _log ? . Information ( $ "Route53 :: Delete Record : Fetched TXT record set OK { targetRecordSet . Name } ") ;
238238
239- try
239+ // within reason, patch the record set to remove the record we want to remove instead of deleting all entries with the same name
240+ // we limit this approach because other things can update the same recordset and cause it to grow beyond reasonable limits
241+
242+ var snapshot = targetRecordSet . ResourceRecords . ToList ( ) ;
243+
244+ if ( targetRecordSet . ResourceRecords . Count > 0 && targetRecordSet . ResourceRecords . Count < 10 )
240245 {
241- var result = await ApplyDnsChange ( zone , targetRecordSet , ChangeAction . DELETE ) ;
242246
243- return new ActionResult { IsSuccess = true , Message = $ "Dns Record Delete completed: { request . RecordName } " } ;
247+ // reduce record set ones we want to keep
248+ var preservedResourceRecords = targetRecordSet . ResourceRecords . Where ( r => r . Value != "\" " + request . RecordValue + "\" " ) . ToList ( ) ;
249+
250+ if ( preservedResourceRecords . Count == 0 )
251+ {
252+ // no records left, delete the record set
253+ try
254+ {
255+ targetRecordSet . ResourceRecords = snapshot ;
256+ var result = await ApplyDnsChange ( zone , targetRecordSet , ChangeAction . DELETE ) ;
257+ return new ActionResult { IsSuccess = true , Message = $ "Dns Record Delete completed: { request . RecordName } " } ;
258+ }
259+ catch ( AmazonRoute53Exception exp )
260+ {
261+ return new ActionResult { IsSuccess = false , Message = $ "Dns Record Delete failed: { request . RecordName } - { exp . Message } " } ;
262+ }
263+ }
264+ else
265+ {
266+ targetRecordSet . ResourceRecords = preservedResourceRecords ;
267+
268+ try
269+ {
270+ var result = await ApplyDnsChange ( zone , targetRecordSet , ChangeAction . UPSERT ) ;
271+ return new ActionResult { IsSuccess = true , Message = $ "Dns Record Removed: { request . RecordName } " } ;
272+ }
273+ catch ( AmazonRoute53Exception exp )
274+ {
275+ return new ActionResult { IsSuccess = false , Message = $ "Dns Record Remove failed: { request . RecordName } - { exp . Message } " } ;
276+ }
277+ }
244278 }
245- catch ( AmazonRoute53Exception exp )
279+ else
246280 {
247- return new ActionResult { IsSuccess = false , Message = $ "Dns Record Delete failed: { request . RecordName } - { exp . Message } " } ;
281+ try
282+ {
283+ var result = await ApplyDnsChange ( zone , targetRecordSet , ChangeAction . DELETE ) ;
284+
285+ return new ActionResult { IsSuccess = true , Message = $ "Dns Record Delete completed: { request . RecordName } " } ;
286+ }
287+ catch ( AmazonRoute53Exception exp )
288+ {
289+ return new ActionResult { IsSuccess = false , Message = $ "Dns Record Delete failed: { request . RecordName } - { exp . Message } " } ;
290+ }
248291 }
249292 }
250293 else
0 commit comments