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