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:
@ -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.")),
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user