Skip to content

Commit 33e9add

Browse files
DNS: Route53 delete should patch the recordset where practical
1 parent c4874c8 commit 33e9add

File tree

1 file changed

+48
-5
lines changed

1 file changed

+48
-5
lines changed

src/Certify.Providers/DNS/AWSRoute53/DnsProviderAWSRoute53.cs

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)