1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

getting tests setup for r53. Not mixing deletes and other changes in same changeset.

This commit is contained in:
Craig Peterson
2017-03-22 13:08:23 -06:00
parent 6dea5e30cf
commit 7073b8f989
3 changed files with 48 additions and 26 deletions

View File

@ -270,4 +270,6 @@ var tests = []*TestCase{
tc("Delete one", mx("@", 5, "foo2.com."), mx("@", 15, "foo3.com.")),
tc("Change to other name", mx("@", 5, "foo2.com."), mx("mail", 15, "foo3.com.")),
tc("Change Priority", mx("@", 7, "foo2.com."), mx("mail", 15, "foo3.com.")),
tc("IDN pre-punycoded", cname("xn--o-0gab", "xn--o-0gab.xn--o-0gab.")),
}

View File

@ -1,17 +1,22 @@
{
"BIND": {
"domain": "example.com"
},
"DNSIMPLE": {
"knownFailures": "16,17",
"domain": "$DNSIMPLE_DOMAIN",
"token": "$DNSIMPLE_TOKEN",
"baseurl": "https://api.sandbox.dnsimple.com"
},
"GCLOUD": {
"domain": "$GCLOUD_DOMAIN",
"project_id": "$GCLOUD_PROJECT",
"private_key": "$GCLOUD_PRIVATEKEY",
"client_email": "$GCLOUD_EMAIL"
},
"DNSIMPLE":{
"knownFailures": "16,17",
"domain": "$DNSIMPLE_DOMAIN",
"token": "$DNSIMPLE_TOKEN",
"baseurl": "https://api.sandbox.dnsimple.com"
},
"BIND":{
"domain": "example.com"
"ROUTE53": {
"domain": "$R53_DOMAIN",
"KeyId": "$R53_KEY_ID",
"SecretKey": "$R53_KEY"
}
}

View File

@ -106,6 +106,7 @@ func (r *route53Provider) GetNameservers(domain string) ([]*models.Nameserver, e
}
func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
dc.Punycode()
if err := r.getZones(); err != nil {
return nil, err
}
@ -147,22 +148,18 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
}
//diff
changeDesc := ""
differ := diff.New(dc)
_, create, delete, modify := differ.IncrementalDiff(existingRecords)
namesToUpdate := map[key]bool{}
namesToUpdate := map[key][]string{}
for _, c := range create {
namesToUpdate[getKey(c.Desired)] = true
changeDesc += fmt.Sprintln(c)
namesToUpdate[getKey(c.Desired)] = append(namesToUpdate[getKey(c.Desired)], c.String())
}
for _, d := range delete {
namesToUpdate[getKey(d.Existing)] = true
changeDesc += fmt.Sprintln(d)
namesToUpdate[getKey(d.Existing)] = append(namesToUpdate[getKey(d.Existing)], d.String())
}
for _, m := range modify {
namesToUpdate[getKey(m.Desired)] = true
changeDesc += fmt.Sprintln(m)
namesToUpdate[getKey(m.Desired)] = append(namesToUpdate[getKey(m.Desired)], m.String())
}
if len(namesToUpdate) == 0 {
@ -180,13 +177,17 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
}
}
dels := []*r53.Change{}
changes := []*r53.Change{}
changeDesc := ""
delDesc := ""
for k, recs := range updates {
chg := &r53.Change{}
changes = append(changes, chg)
var rrset *r53.ResourceRecordSet
if len(recs) == 0 {
dels = append(dels, chg)
chg.Action = sPtr("DELETE")
delDesc += strings.Join(namesToUpdate[k], "\n") + "\n"
// on delete just submit the original resource set we got from r53.
for _, r := range records {
if *r.Name == k.Name+"." && *r.Type == k.Type {
@ -195,6 +196,8 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
}
}
} else {
changes = append(changes, chg)
changeDesc += strings.Join(namesToUpdate[k], "\n") + "\n"
//on change or create, just build a new record set from our desired state
chg.Action = sPtr("UPSERT")
rrset = &r53.ResourceRecordSet{
@ -218,16 +221,28 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
changeReq := &r53.ChangeResourceRecordSetsInput{
ChangeBatch: &r53.ChangeBatch{Changes: changes},
}
delReq := &r53.ChangeResourceRecordSetsInput{
ChangeBatch: &r53.ChangeBatch{Changes: dels},
}
addCorrection := func(req *r53.ChangeResourceRecordSetsInput) {
corrections = append(corrections,
&models.Correction{
Msg: changeDesc,
F: func() error {
req.HostedZoneId = zone.Id
_, err := r.client.ChangeResourceRecordSets(req)
return err
},
})
}
if len(dels) > 0 {
addCorrection(delReq)
}
if len(changes) > 0 {
addCorrection(changeReq)
}
corrections = append(corrections,
&models.Correction{
Msg: changeDesc,
F: func() error {
changeReq.HostedZoneId = zone.Id
_, err := r.client.ChangeResourceRecordSets(changeReq)
return err
},
})
return corrections, nil
}