provider/aws.go
func (p *AWSProvider) submitChanges(changes []*route53.Change, zones map[string]*route53.HostedZone) error {
	// return early if there is nothing to change
	if len(changes) == 0 {
		log.Info("All records are already up to date")
		return nil
	}

	// separate into per-zone change sets to be passed to the API.
	changesByZone := changesByZone(zones, changes)
	if len(changesByZone) == 0 {
		log.Info("All records are already up to date, there are no changes for the matching hosted zones")
	}

	var failedZones []string
	for z, cs := range changesByZone {
		var failedUpdate bool

		batchCs := batchChangeSet(cs, p.batchChangeSize)

		for i, b := range batchCs {
			for _, c := range b {
				log.Infof("Desired change: %s %s %s", *c.Action, *c.ResourceRecordSet.Name, *c.ResourceRecordSet.Type)
			}

			if !p.dryRun {
				params := &route53.ChangeResourceRecordSetsInput{
					HostedZoneId: aws.String(z),
					ChangeBatch: &route53.ChangeBatch{
						Changes: b,
					},
				}

				if _, err := p.client.ChangeResourceRecordSets(params); err != nil {
					log.Error(err) //TODO(ideahitme): consider changing the interface in cases when this error might be a concern for other components
					failedUpdate = true
				} else {
					log.Infof("%d record(s) in zone %s were successfully updated", len(b), aws.StringValue(zones[z].Name))
				}

				if i != len(batchCs)-1 {
					time.Sleep(p.batchChangeInterval)
				}
			}
		}

		if failedUpdate {
			failedZones = append(failedZones, z)
		}
	}

	if len(failedZones) > 0 {
		return fmt.Errorf("Failed to submit all changes for the following zones: %v", failedZones)
	}

	return nil
}
func (p *AWSProvider) submitChanges(changes []*route53.Change, zones map[string]*route53.HostedZone) error {
	// return early if there is nothing to change
	if len(changes) == 0 {
		log.Info("All records are already up to date")
		return nil
	}

	// separate into per-zone change sets to be passed to the API.
	changesByZone := changesByZone(zones, changes)
	if len(changesByZone) == 0 {
		log.Info("All records are already up to date, there are no changes for the matching hosted zones")
	}

	var failedZones []string
	for z, cs := range changesByZone {
		var failedUpdate bool

		batchCs := batchChangeSet(cs, p.batchChangeSize)

		for i, b := range batchCs {
			for _, c := range b {
				log.Infof("Desired change: %s %s %s", *c.Action, *c.ResourceRecordSet.Name, *c.ResourceRecordSet.Type)
			}

			if !p.dryRun {
				params := &route53.ChangeResourceRecordSetsInput{
					HostedZoneId: aws.String(z),
					ChangeBatch: &route53.ChangeBatch{
						Changes: b,
					},
				}

				if _, err := p.client.ChangeResourceRecordSets(params); err != nil {
					log.Error(err) //TODO(ideahitme): consider changing the interface in cases when this error might be a concern for other components
					failedUpdate = true
				} else {
					log.Infof("%d record(s) in zone %s were successfully updated", len(b), aws.StringValue(zones[z].Name))
				}

				if i != len(batchCs)-1 {
					time.Sleep(p.batchChangeInterval)
				}
			}
		}

		if failedUpdate {
			failedZones = append(failedZones, z)
		}
	}

	if len(failedZones) > 0 {
		return fmt.Errorf("Failed to submit all changes for the following zones: %v", failedZones)
	}

	return nil
}
func ( p * AWSProvider ) submitChanges ( changes [ ] * route53 . Change , zones map [ string ] * route53 . HostedZone ) error { // return early if there is nothing to change if len ( changes ) == 0 { log . Info ( " " ) return nil } // separate into per-zone change sets to be passed to the API. changesByZone := changesByZone ( zones , changes ) if len ( changesByZone ) == 0 { log . Info ( " " ) } var failedZones [ ] string for z , cs := range changesByZone { var failedUpdate bool batchCs := batchChangeSet ( cs , p . batchChangeSize ) for i , b := range batchCs { for _ , c := range b { log . Infof ( " " , * c . Action , * c . ResourceRecordSet . Name , * c . ResourceRecordSet . Type ) } if ! p . dryRun { params := & route53 . ChangeResourceRecordSetsInput { HostedZoneId : aws . String ( z ) , ChangeBatch : & route53 . ChangeBatch { Changes : b , } , } if _ , err := p . client . ChangeResourceRecordSets ( params ) ; err != nil { log . Error ( err ) //TODO(ideahitme): consider changing the interface in cases when this error might be a concern for other components failedUpdate = true } else { log . Infof ( " " , len ( b ) , aws . StringValue ( zones [ z ] . Name ) ) } if i != len ( batchCs ) - 1 { time . Sleep ( p . batchChangeInterval ) } } } if failedUpdate { failedZones = append ( failedZones , z ) } } if len ( failedZones ) > 0 { return fmt . Errorf ( " " , failedZones ) } return nil }
// submitChanges takes a zone and a collection of Changes and sends them as a single transaction.
submitChanges takes a zone and a collection of Changes and sends them as a single transaction .