2014/12/02 18:11:04 Request failed, got status code: 400. Response: <?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><Error><Type>Sender</Type><Code>InvalidInput</Code><Message>Invalid XML ; cvc-complex-type.2.4.a: Invalid content was found starting with element 'Name'. One of '{"https://route53.amazonaws.com/doc/2013-04-01/":SetIdentifier, "https://route53.amazonaws.com/doc/2013-04-01/":Weight, "https://route53.amazonaws.com/doc/2013-04-01/":GeoLocation, "https://route53.amazonaws.com/doc/2013-04-01/":Region, "https://route53.amazonaws.com/doc/2013-04-01/":Failover, "https://route53.amazonaws.com/doc/2013-04-01/":AliasTarget, "https://route53.amazonaws.com/doc/2013-04-01/":HealthCheckId}' is expected.</Message></Error><RequestId>~~~~~~~~</RequestId></ErrorResponse>
func changeRecordSets(
client *route53.Route53,
hostedzoneID string,
comment string,
changes []route53.Change,
) (*route53.ChangeResourceRecordSetsResponse, error) {
req := route53.ChangeResourceRecordSetsRequest{
Comment: comment,
Changes: changes,
}
return client.ChangeResourceRecordSets(hostedzoneID, &req)
}
func ForceDelete(
client *route53.Route53,
id string,
domain string,
) (changeID string, deleteID string, ERR error) {
listOpt := route53.ListOpts{
Name: domain,
}
resp0, err := client.ListResourceRecordSets(id, &listOpt)
if err != nil {
changeID = ""
deleteID = ""
ERR = err
return
}
changes := []route53.Change{}
for _, record := range resp0.Records {
change := route53.Change{
Action: "DELETE",
Record: route53.ResourceRecordSet{
Name: strings.Replace(record.Name, ".com.", ".com", -1),
Type: record.Type,
TTL: record.TTL,
Records: record.Records,
RecordsXML: strings.Replace(record.RecordsXML, ".</Name>", "</Name>", -1),
},
}
changes = append(changes, change)
}
fmt.Printf("%+v\n", changes)
resp1, err := changeRecordSets(client, id, "Delete", changes)
if err != nil {
changeID = ""
deleteID = ""
ERR = err
return
}
resp2, err := client.DeleteHostedZone(id)
changeID = route53.CleanChangeID(resp1.ChangeInfo.ID)
deleteID = route53.CleanChangeID(resp2.ChangeInfo.ID)
ERR = err
return
}