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("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 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("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": {
|
"GCLOUD": {
|
||||||
"domain": "$GCLOUD_DOMAIN",
|
"domain": "$GCLOUD_DOMAIN",
|
||||||
"project_id": "$GCLOUD_PROJECT",
|
"project_id": "$GCLOUD_PROJECT",
|
||||||
"private_key": "$GCLOUD_PRIVATEKEY",
|
"private_key": "$GCLOUD_PRIVATEKEY",
|
||||||
"client_email": "$GCLOUD_EMAIL"
|
"client_email": "$GCLOUD_EMAIL"
|
||||||
},
|
},
|
||||||
"DNSIMPLE":{
|
"ROUTE53": {
|
||||||
"knownFailures": "16,17",
|
"domain": "$R53_DOMAIN",
|
||||||
"domain": "$DNSIMPLE_DOMAIN",
|
"KeyId": "$R53_KEY_ID",
|
||||||
"token": "$DNSIMPLE_TOKEN",
|
"SecretKey": "$R53_KEY"
|
||||||
"baseurl": "https://api.sandbox.dnsimple.com"
|
|
||||||
},
|
|
||||||
"BIND":{
|
|
||||||
"domain": "example.com"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -106,6 +106,7 @@ func (r *route53Provider) GetNameservers(domain string) ([]*models.Nameserver, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
||||||
|
dc.Punycode()
|
||||||
if err := r.getZones(); err != nil {
|
if err := r.getZones(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -147,22 +148,18 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
|
|||||||
}
|
}
|
||||||
|
|
||||||
//diff
|
//diff
|
||||||
changeDesc := ""
|
|
||||||
differ := diff.New(dc)
|
differ := diff.New(dc)
|
||||||
_, create, delete, modify := differ.IncrementalDiff(existingRecords)
|
_, create, delete, modify := differ.IncrementalDiff(existingRecords)
|
||||||
|
|
||||||
namesToUpdate := map[key]bool{}
|
namesToUpdate := map[key][]string{}
|
||||||
for _, c := range create {
|
for _, c := range create {
|
||||||
namesToUpdate[getKey(c.Desired)] = true
|
namesToUpdate[getKey(c.Desired)] = append(namesToUpdate[getKey(c.Desired)], c.String())
|
||||||
changeDesc += fmt.Sprintln(c)
|
|
||||||
}
|
}
|
||||||
for _, d := range delete {
|
for _, d := range delete {
|
||||||
namesToUpdate[getKey(d.Existing)] = true
|
namesToUpdate[getKey(d.Existing)] = append(namesToUpdate[getKey(d.Existing)], d.String())
|
||||||
changeDesc += fmt.Sprintln(d)
|
|
||||||
}
|
}
|
||||||
for _, m := range modify {
|
for _, m := range modify {
|
||||||
namesToUpdate[getKey(m.Desired)] = true
|
namesToUpdate[getKey(m.Desired)] = append(namesToUpdate[getKey(m.Desired)], m.String())
|
||||||
changeDesc += fmt.Sprintln(m)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(namesToUpdate) == 0 {
|
if len(namesToUpdate) == 0 {
|
||||||
@ -180,13 +177,17 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dels := []*r53.Change{}
|
||||||
changes := []*r53.Change{}
|
changes := []*r53.Change{}
|
||||||
|
changeDesc := ""
|
||||||
|
delDesc := ""
|
||||||
for k, recs := range updates {
|
for k, recs := range updates {
|
||||||
chg := &r53.Change{}
|
chg := &r53.Change{}
|
||||||
changes = append(changes, chg)
|
|
||||||
var rrset *r53.ResourceRecordSet
|
var rrset *r53.ResourceRecordSet
|
||||||
if len(recs) == 0 {
|
if len(recs) == 0 {
|
||||||
|
dels = append(dels, chg)
|
||||||
chg.Action = sPtr("DELETE")
|
chg.Action = sPtr("DELETE")
|
||||||
|
delDesc += strings.Join(namesToUpdate[k], "\n") + "\n"
|
||||||
// on delete just submit the original resource set we got from r53.
|
// on delete just submit the original resource set we got from r53.
|
||||||
for _, r := range records {
|
for _, r := range records {
|
||||||
if *r.Name == k.Name+"." && *r.Type == k.Type {
|
if *r.Name == k.Name+"." && *r.Type == k.Type {
|
||||||
@ -195,6 +196,8 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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
|
//on change or create, just build a new record set from our desired state
|
||||||
chg.Action = sPtr("UPSERT")
|
chg.Action = sPtr("UPSERT")
|
||||||
rrset = &r53.ResourceRecordSet{
|
rrset = &r53.ResourceRecordSet{
|
||||||
@ -218,16 +221,28 @@ func (r *route53Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
|
|||||||
changeReq := &r53.ChangeResourceRecordSetsInput{
|
changeReq := &r53.ChangeResourceRecordSetsInput{
|
||||||
ChangeBatch: &r53.ChangeBatch{Changes: changes},
|
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
|
return corrections, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user