Skip to content

Commit

Permalink
issue #87: implemented Weighted profile in route53 and removed weight…
Browse files Browse the repository at this point in the history
…ed results from its basic listing
  • Loading branch information
adriancole committed Jun 12, 2013
1 parent 866f31a commit d2dffc9
Show file tree
Hide file tree
Showing 11 changed files with 632 additions and 126 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
### Version 1.3.0
* Added `WeightedResourceRecordSetApi` to support reading and writing new `Weighted` (load balanced rrset) profile.
* Changed `Route53` to no longer return weighted record sets inside basic record set results.
* Added `ResourceRecordSet.getQualifier()`, `ReadOnlyResourceRecordSetApi.getByNameTypeAndQualifier()`
* Added `QualifiedResourceRecordSetApi` with `supportedTypes()`, `put()`, and `deleteByNameTypeAndQualifier()`
* Added `-t/--type` to list, and `-q/--qualifier` to get record cli commands.
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.net.URI;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.SortedSet;

import javax.inject.Inject;
import javax.inject.Singleton;
Expand All @@ -21,21 +23,25 @@
import org.jclouds.route53.Route53ApiMetadata;

import com.google.common.base.Supplier;
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.Range;

import dagger.Provides;
import denominator.BasicProvider;
import denominator.Credentials;
import denominator.Credentials.ListCredentials;
import denominator.DNSApiManager;
import denominator.Provider;
import denominator.QualifiedResourceRecordSetApi;
import denominator.ResourceRecordSetApi;
import denominator.ZoneApi;
import denominator.config.ConcatBasicAndQualifiedResourceRecordSets;
import denominator.config.GeoUnsupported;
import denominator.config.OnlyBasicResourceRecordSets;
import denominator.config.WeightedUnsupported;
import denominator.profile.WeightedResourceRecordSetApi;

public class Route53Provider extends BasicProvider {
private final String url;
Expand Down Expand Up @@ -73,8 +79,7 @@ public Multimap<String, String> credentialTypeToParameterNames() {
@dagger.Module(injects = DNSApiManager.class,
complete = false, // denominator.Provider
includes = { GeoUnsupported.class,
WeightedUnsupported.class,
OnlyBasicResourceRecordSets.class,
ConcatBasicAndQualifiedResourceRecordSets.class,
InstanceProfileCredentialsProvider.class })
public static final class Module {

Expand Down Expand Up @@ -132,6 +137,42 @@ ResourceRecordSetApi.Factory provideResourceRecordSetApiFactory(Route53Api api)
Closeable provideCloser(Route53Api api) {
return api;
}

@Provides
WeightedResourceRecordSetApi.Factory provideWeightedResourceRecordSetApiFactory(
Route53WeightedResourceRecordSetApi.Factory in) {
return in;
}

@Provides(type = Provides.Type.SET)
QualifiedResourceRecordSetApi.Factory provideWeightedResourceRecordSetApiFactory(
WeightedResourceRecordSetApi.Factory in) {
return in;
}

/**
* @see <a
* href="http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html">valid
* types</a>
*/
@Provides
@Singleton
@denominator.config.profile.Weighted
Set<String> provideSupportedWeightedRecordTypes() {
return ImmutableSet.of("A", "AAAA", "CNAME", "MX", "PTR", "SPF", "SRV", "TXT");
}

/**
* @see <a
* href="http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html">valid
* weights</a>
*/
@Provides
@Singleton
@denominator.config.profile.Weighted
SortedSet<Integer> provideSupportedWeights() {
return ContiguousSet.create(Range.closed(0, 255), DiscreteDomain.integers());
}
}

static final class ConvertToJcloudsCredentials implements Supplier<org.jclouds.domain.Credentials> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.in;
import static com.google.common.base.Predicates.not;
import static com.google.common.base.Predicates.or;
import static com.google.common.collect.Iterables.filter;
import static denominator.route53.ToDenominatorResourceRecordSet.isAlias;
import static denominator.route53.ToDenominatorResourceRecordSet.isSubset;
import static denominator.route53.ToRoute53ResourceRecordSet.toTextFormat;

import java.util.Iterator;
Expand Down Expand Up @@ -44,11 +46,10 @@ public Iterator<ResourceRecordSet<?>> list() {
*/
@Override
public Iterator<ResourceRecordSet<?>> iterator() {
Iterator<ResourceRecordSet<?>> iterator = route53RRsetApi.list().concat()
.filter(not(isAlias()))
.transform(ToDenominatorResourceRecordSet.INSTANCE)
.iterator();
return new GroupByRecordNameAndTypeIterator(iterator);
return route53RRsetApi.list().concat()
.filter(not(or(isAlias(), isSubset())))
.transform(ToDenominatorResourceRecordSet.INSTANCE)
.iterator();
}

@Override
Expand All @@ -63,24 +64,16 @@ public Iterator<ResourceRecordSet<?>> listByName(String name) {
*/
@Override
public Iterator<ResourceRecordSet<?>> iterateByName(String name) {
Iterator<ResourceRecordSet<?>> iterator = route53RRsetApi.listAt(NextRecord.name(name))
.filter(and(not(isAlias()), nameEqualTo(name)))
.transform(ToDenominatorResourceRecordSet.INSTANCE)
.iterator();
return new GroupByRecordNameAndTypeIterator(iterator);
return route53RRsetApi.listAt(NextRecord.name(name))
.filter(and(not(or(isAlias(), isSubset())), nameEqualTo(name)))
.transform(ToDenominatorResourceRecordSet.INSTANCE)
.iterator();
}

@Override
public Optional<ResourceRecordSet<?>> getByNameAndType(String name, String type) {
List<ResourceRecordSet<?>> matches = filterRoute53RRSByNameAndType(name, type).transform(
ToDenominatorResourceRecordSet.INSTANCE).toList();
switch (matches.size()) {
case 0:
return Optional.absent();
case 1:
return Optional.<ResourceRecordSet<?>> of(matches.get(0));
}
return Optional.<ResourceRecordSet<?>> of(new GroupByRecordNameAndTypeIterator(matches.iterator()).next());
return filterRoute53RRSByNameAndType(name, type)
.transform(ToDenominatorResourceRecordSet.INSTANCE).first();
}

/**
Expand All @@ -89,8 +82,8 @@ public Optional<ResourceRecordSet<?>> getByNameAndType(String name, String type)
*/
@SuppressWarnings("unchecked")
FluentIterable<org.jclouds.route53.domain.ResourceRecordSet> filterRoute53RRSByNameAndType(String name, String type) {
return route53RRsetApi.listAt(NextRecord.nameAndType(name, type)).filter(
and(not(isAlias()), nameEqualTo(name), typeEqualTo(type)));
return route53RRsetApi.listAt(NextRecord.nameAndType(name, type))
.filter(and(not(or(isAlias(), isSubset())), nameEqualTo(name), typeEqualTo(type)));
}

/**
Expand Down Expand Up @@ -218,7 +211,7 @@ public ResourceRecordSetApi create(String id) {
}
}

public static Predicate<org.jclouds.route53.domain.ResourceRecordSet> nameEqualTo(String name) {
static Predicate<org.jclouds.route53.domain.ResourceRecordSet> nameEqualTo(String name) {
return new Route53NameEqualToPredicate(name);
}

Expand All @@ -240,7 +233,7 @@ public String toString() {
}
}

public static Predicate<org.jclouds.route53.domain.ResourceRecordSet> typeEqualTo(String type) {
static Predicate<org.jclouds.route53.domain.ResourceRecordSet> typeEqualTo(String type) {
return new Route53TypeEqualToPredicate(type);
}

Expand Down
Loading

0 comments on commit d2dffc9

Please sign in to comment.