private void doBind() throws InterruptedException { List<ResourceRecordSetWithHostedZone> freeDomains = new ArrayList<>(); List<String> domains = getDeclaredDomains(); for(String domain : domains) { ResourceRecordSetWithHostedZone rrs = getResourceRecordSetWithHostedZone(domain); if (rrs != null) { if (rrs.getResourceRecordSet() == null) { ResourceRecordSet resourceRecordSet = new ResourceRecordSet(); resourceRecordSet.setName(domain); resourceRecordSet.setType(RRType.CNAME); resourceRecordSet.setTTL(serverConfig.getRoute53DomainTTL()); freeDomains.add(new ResourceRecordSetWithHostedZone(rrs.getHostedZone(), resourceRecordSet)); } else if (NULL_DOMAIN.equals(rrs.getResourceRecordSet().getResourceRecords().get(0).getValue())) { freeDomains.add(rrs); } // already registered if (hasValue(rrs, registrationHostname)) { return; } } } for(ResourceRecordSetWithHostedZone rrs : freeDomains) { if (createResourceRecordSet(rrs)) { logger.info("Bind {} to {}" , registrationHostname, rrs.getResourceRecordSet().getName()); return; } } logger.warn("Unable to find free domain in {}", domains); }
private boolean createResourceRecordSet(ResourceRecordSetWithHostedZone rrs) throws InterruptedException { rrs.getResourceRecordSet().setResourceRecords(Arrays.asList(new ResourceRecord(registrationHostname))); Change change = new Change(ChangeAction.UPSERT, rrs.getResourceRecordSet()); if (executeChangeWithRetry(change, rrs.getHostedZone())) { Thread.sleep(1000); // check change not overwritten ResourceRecordSet resourceRecordSet = getResourceRecordSet(rrs.getResourceRecordSet().getName(), rrs.getHostedZone()); return resourceRecordSet.getResourceRecords().equals(rrs.getResourceRecordSet().getResourceRecords()); } return false; }
@Override public int hashCode() { final int prime = 31; int hashCode = 1; hashCode = prime * hashCode + ((getName() == null) ? 0 : getName().hashCode()); hashCode = prime * hashCode + ((getType() == null) ? 0 : getType().hashCode()); hashCode = prime * hashCode + ((getSetIdentifier() == null) ? 0 : getSetIdentifier().hashCode()); hashCode = prime * hashCode + ((getWeight() == null) ? 0 : getWeight().hashCode()); hashCode = prime * hashCode + ((getRegion() == null) ? 0 : getRegion().hashCode()); hashCode = prime * hashCode + ((getGeoLocation() == null) ? 0 : getGeoLocation().hashCode()); hashCode = prime * hashCode + ((getFailover() == null) ? 0 : getFailover().hashCode()); hashCode = prime * hashCode + ((getMultiValueAnswer() == null) ? 0 : getMultiValueAnswer().hashCode()); hashCode = prime * hashCode + ((getTTL() == null) ? 0 : getTTL().hashCode()); hashCode = prime * hashCode + ((getResourceRecords() == null) ? 0 : getResourceRecords().hashCode()); hashCode = prime * hashCode + ((getAliasTarget() == null) ? 0 : getAliasTarget().hashCode()); hashCode = prime * hashCode + ((getHealthCheckId() == null) ? 0 : getHealthCheckId().hashCode()); hashCode = prime * hashCode + ((getTrafficPolicyInstanceId() == null) ? 0 : getTrafficPolicyInstanceId().hashCode()); return hashCode; }
ResourceRecordSet leafNode = new ResourceRecordSet(); leafNode.setType(type); leafNode.setTTL(ttl); leafNode.setResourceRecords(rrs); leafNode.setWeight(1L); leafNode.setSetIdentifier("leafnode"); leafNode.setName(name); leafNode.setHealthCheckId(healthchecksRemaining.remove(0)); ResourceRecordSet alias = new ResourceRecordSet(); AliasTarget aliasTarget = new AliasTarget(); alias.setName(entryNode.getName()); alias.setType(entryNode.getType()); alias.setWeight(entryNode.getWeight()); alias.setHealthCheckId(healthchecksRemaining.remove(0)); String targetName = checksum + "." + entryNode.getName(); entryNode.setName(targetName); aliasTarget.setDNSName(targetName); aliasTarget.setEvaluateTargetHealth(true); alias.setSetIdentifier("Alias to " + checksum); alias.setAliasTarget(aliasTarget);
ResourceRecord rr = new ResourceRecord(IPAdress); // IPAddress will be String variable that has IP value List<ResourceRecord> rrList = new ArrayList<ResourceRecord>(); rrList.add(rr); // Create a ResourceRecordSet ResourceRecordSet resourceRecordSet = new ResourceRecordSet(); resourceRecordSet.setName(domainName); //domainName is String value of your domain resourceRecordSet.setType(RRType.A); //type of ResourceRecordSet resourceRecordSet.setTTL(new Long(300)); resourceRecordSet.setWeight(new Long(0)); resourceRecordSet.setResourceRecords(rrList); // Create a change Change change = new Change(ChangeAction.CREATE, resourceRecordSet); List<Change> changesList = new ArrayList<Change>(); changesList.add(change); // Create a change batch ChangeBatch changeBatch = new ChangeBatch(changesList); // Create ChangeResourceRecordSetRequest. ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest(hostedZoneID, changeBatch); //hostedZoneId is variable that is the id of HostedZone // Send the request and get the response. ChangeResourceRecordSetsResult result = amazonRoute53Client.changeResourceRecordSets(request); // Print the result System.out.println(result.getChangeInfo());
public ResourceRecordSet unmarshall(StaxUnmarshallerContext context) throws Exception { ResourceRecordSet resourceRecordSet = new ResourceRecordSet(); int originalDepth = context.getCurrentDepth(); int targetDepth = originalDepth + 1; resourceRecordSet.setName(StringStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setType(StringStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setSetIdentifier(StringStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setWeight(LongStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setRegion(StringStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setGeoLocation(GeoLocationStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setFailover(StringStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setMultiValueAnswer(BooleanStaxUnmarshaller.getInstance().unmarshall(context)); continue; resourceRecordSet.setTTL(LongStaxUnmarshaller.getInstance().unmarshall(context));
if (!rrs.getName().equals(record)) { continue; boolean matchesTypes = "A".equals(rrs.getType()) || "CNAME".equals(rrs.getType()); ResourceRecordSet resourceRecordSet = new ResourceRecordSet(); resourceRecordSet.setName(record); resourceRecordSet.setType(RRType.A); ResourceRecord resourceRecord = new ResourceRecord(address); resourceRecordSet.setTTL(60L); resourceRecordSet.setResourceRecords(asList(resourceRecord)); aliasTarget.setDNSName(ctx.getCurEnv().getEndpointURL()); resourceRecordSet.setAliasTarget(aliasTarget);
if(sourceDomain.equals(recordSet.getName()) && strEquals(recordSet.getSetIdentifier(), setIdentifier) exists = true; for(ResourceRecord record : recordSet.getResourceRecords()) ResourceRecordSet resourceRecordSet = new ResourceRecordSet() .withName(source) .withType(RRType.CNAME) .withTTL(300L) .withResourceRecords(new ResourceRecord() .withValue(target) .withWeight(1L) .withSetIdentifier(setIdentifier)
if (rr.getWeight() == 0L) { rr.setName(secondaryName); rr.setWeight(1L); target.setEvaluateTargetHealth(true); target.setHostedZoneId(hostedZoneId); ResourceRecordSet rr = new ResourceRecordSet(); rr.setName(secondaryName); rr.setWeight(0L); rr.setType(type); rr.setAliasTarget(target); rr.setSetIdentifier(subTreePrefix); target.setEvaluateTargetHealth(true); target.setHostedZoneId(hostedZoneId); ResourceRecordSet rr = new ResourceRecordSet(); rr.setName(name); rr.setWeight(0L); rr.setType(type); rr.setAliasTarget(target); rr.setSetIdentifier("secondary for " + name);
ObjectNode toJson(ResourceRecordSet rs) { ObjectNode n = mapper.createObjectNode(); n.put("aws_ttl", rs.getTTL()); n.put("aws_type", rs.getType()); n.put("aws_name", rs.getName()); n.put("id", rs.getType() + "_" + rs.getName()); ArrayNode an = mapper.createArrayNode(); n.set("aws_resourceRecords", an); for (ResourceRecord rr : rs.getResourceRecords()) { an.add(rr.getValue()); } return n; }
try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(rr.getType().getBytes("UTF-8")); if (rr.getAliasTarget() != null) { digest.update(rr.getAliasTarget().getHostedZoneId().getBytes("UTF-8")); digest.update(rr.getAliasTarget().getDNSName().getBytes("UTF-8")); digest.update(rr.getAliasTarget().getEvaluateTargetHealth().toString().getBytes("UTF-8")); } else { digest.update(rr.getResourceRecords().toString().getBytes("UTF-8")); digest.update(rr.getTTL().toString().getBytes("UTF-8"));
private ResourceRecordSet getResourceRecordSet(String domain, HostedZone hostedZone) { ListResourceRecordSetsRequest request = new ListResourceRecordSetsRequest(); request.setMaxItems(String.valueOf(Integer.MAX_VALUE)); request.setHostedZoneId(hostedZone.getId()); ListResourceRecordSetsResult listResourceRecordSetsResult = amazonRoute53Client.listResourceRecordSets(request); for(ResourceRecordSet rrs : listResourceRecordSetsResult.getResourceRecordSets()) { if (rrs.getName().equals(domain)) { return rrs; } } return null; }
private boolean hasValue(ResourceRecordSetWithHostedZone resourceRecordSetWithHostedZone, String ip) { if (resourceRecordSetWithHostedZone != null && resourceRecordSetWithHostedZone.getResourceRecordSet() != null) { for (ResourceRecord rr : resourceRecordSetWithHostedZone.getResourceRecordSet().getResourceRecords()) { if (ip.equals(rr.getValue())) { return true; } } } return false; }
@TaskAction public void changeResourceRecordSets() { // to enable conventionMappings feature String hostedZoneId = getHostedZoneId(); String rrsName = getRrsName(); String resourceRecord = getResourceRecord(); AmazonRoute53PluginExtension ext = getProject().getExtensions().getByType(AmazonRoute53PluginExtension.class); AmazonRoute53 route53 = ext.getClient(); route53.changeResourceRecordSets(new ChangeResourceRecordSetsRequest() .withHostedZoneId(hostedZoneId) .withChangeBatch(new ChangeBatch() .withChanges(new Change(ChangeAction.CREATE, new ResourceRecordSet(rrsName, RRType.CNAME) .withResourceRecords(new ResourceRecord(resourceRecord)))))); getLogger().info("change {} requested", hostedZoneId); } }
/** * <p> * Information about the resource records to act upon. * </p> * <note> * <p> * If you're creating an alias resource record set, omit <code>ResourceRecords</code>. * </p> * </note> * * @param resourceRecords * Information about the resource records to act upon.</p> <note> * <p> * If you're creating an alias resource record set, omit <code>ResourceRecords</code>. * </p> * @return Returns a reference to this object so that method calls can be chained together. */ public ResourceRecordSet withResourceRecords(java.util.Collection<ResourceRecord> resourceRecords) { setResourceRecords(resourceRecords); return this; }
setTTL(tTL); return this;
setName(name); return this;
setType(type); return this;
setAliasTarget(aliasTarget); return this;