List of usage examples for com.amazonaws.services.route53.model ResourceRecord getValue
public String getValue()
The current or new DNS record value, not to exceed 4,000 characters.
From source file:com.github.blacklocus.rdsecho.EchoPromote.java
License:Open Source License
@Override boolean traverseStage(DBInstance instance) { LOG.info("Reading current DNS records"); String tld = EchoUtil.getTLD(cfg.promoteCname()) + '.'; HostedZone hostedZone = route53Find.hostedZone(nameEquals(tld)).get(); LOG.info(" Found corresponding HostedZone. name: {} id: {}", hostedZone.getName(), hostedZone.getId()); ResourceRecordSet resourceRecordSet = route53Find .resourceRecordSet(hostedZone.getId(), cnameEquals(cfg.promoteCname())).get(); ResourceRecord resourceRecord = getOnlyElement(resourceRecordSet.getResourceRecords()); LOG.info(" Found CNAME {} with current value {}", resourceRecordSet.getName(), resourceRecord.getValue()); Endpoint endpoint = instance.getEndpoint(); String tagEchoManaged = echo.getTagEchoManaged(); String dbInstanceId = instance.getDBInstanceIdentifier(); if (null == endpoint) { LOG.info("Echo DB instance {} (id: {}) has no address. Is it still initializing?", tagEchoManaged, dbInstanceId);//w w w . j a v a 2s. c o m return false; } String instanceAddr = endpoint.getAddress(); if (resourceRecord.getValue().equals(instanceAddr)) { LOG.info(" Echo DB instance {} ({}) lines up with CNAME {}. Nothing to do.", tagEchoManaged, instanceAddr, resourceRecordSet.getName()); return false; } else { LOG.info(" Echo DB instance {} ({}) differs from CNAME {}.", tagEchoManaged, instanceAddr, resourceRecordSet.getName()); } if (cfg.interactive()) { String format = "Are you sure you want to promote %s to be the new target of %s? Input %s to confirm."; if (!EchoUtil.prompt(dbInstanceId, format, dbInstanceId, cfg.promoteCname(), dbInstanceId)) { LOG.info("User declined to proceed. Exiting."); return false; } } LOG.info("Updating CNAME {} from {} to {}", cfg.name(), resourceRecord.getValue(), instanceAddr); ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest() .withHostedZoneId(hostedZone.getId()) .withChangeBatch(new ChangeBatch().withChanges( new Change(ChangeAction.UPSERT, new ResourceRecordSet(cfg.promoteCname(), RRType.CNAME) .withResourceRecords(new ResourceRecord(instanceAddr)).withTTL(cfg.promoteTtl())))); route53.changeResourceRecordSets(request); Optional<String[]> promoteTags = cfg.promoteTags(); if (promoteTags.isPresent()) { List<Tag> tags = EchoUtil.parseTags(promoteTags.get()); if (tags.size() > 0) { LOG.info("Applying tags on promote: {}", Arrays.asList(tags)); AddTagsToResourceRequest tagsRequest = new AddTagsToResourceRequest().withResourceName( RdsFind.instanceArn(cfg.region(), cfg.accountNumber(), instance.getDBInstanceIdentifier())); tagsRequest.setTags(tags); rds.addTagsToResource(tagsRequest); } } LOG.info("Searching for any existing promoted instance to demote."); return true; }
From source file:com.msi.dns53.client.DNS53Client.java
License:Apache License
public ChangeResourceRecordSetsResult changeResourceRecordSets(ChangeResourceRecordSetsRequest req) throws AmazonServiceException, AmazonClientException { Client c = Client.create();/* w ww . ja v a2 s .c o m*/ WebResource r = c.resource(this.serverURL); String entity = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<ChangeResourceRecordSetsRequest xmlns=\"https://route53.amazonaws.com/doc/2012-02-29/\">"; if (req.getChangeBatch() != null) { entity += "<ChangeBatch>"; if (req.getChangeBatch().getComment() != null) { entity += "<Comment>" + req.getChangeBatch().getComment() + "</Comment>"; } List<Change> changes = req.getChangeBatch().getChanges(); if (changes != null && changes.size() > 0) { entity += "<Changes>"; for (Change change : changes) { entity += "<Change>"; entity += "<Action>" + change.getAction() + "</Action>"; if (change.getResourceRecordSet() != null) { entity += "<ResourceRecordSet>"; entity += "<Name>" + change.getResourceRecordSet().getName() + "</Name>"; entity += "<Type>" + change.getResourceRecordSet().getType() + "</Type>"; entity += "<TTL>" + change.getResourceRecordSet().getTTL() + "</TTL>"; List<ResourceRecord> records = change.getResourceRecordSet().getResourceRecords(); if (records != null && records.size() > 0) { entity += "<ResourceRecords>"; for (ResourceRecord record : records) { entity += "<ResourceRecord><Value>" + record.getValue() + "</Value></ResourceRecord>"; } entity += "</ResourceRecords>"; } entity += "</ResourceRecordSet>"; } entity += "</Change>"; } entity += "</Changes>"; } entity += "</ChangeBatch>"; } entity += "</ChangeResourceRecordSetsRequest>"; ClientResponse response = r.path(req.getHostedZoneId() + "/rrset") .header("X-Amzn-Authorization", "AWS3 AWSAccessKeyId=" + this.accessKey + "," + "Algorithm=HmacSHA256," + "SignedHeaders=Host;X-Amz-Date," + "Signature=THISISANEXAMPLESIGNATURE=") .type(MediaType.APPLICATION_XML_TYPE).accept(MediaType.TEXT_XML).entity(entity) .post(ClientResponse.class); String resultXml = response.getEntity(String.class); if (response.getStatus() != 200) { exceptionMapper(response, resultXml); } ChangeResourceRecordSetsResponsePOJO interResult = null; try { StringReader reader = new StringReader(resultXml); JAXBContext context = JAXBContext.newInstance(ChangeResourceRecordSetsResponsePOJO.class); Unmarshaller unmarshaller = context.createUnmarshaller(); interResult = (ChangeResourceRecordSetsResponsePOJO) unmarshaller.unmarshal(reader); } catch (JAXBException e) { e.printStackTrace(); return null; } if (interResult == null) { return null; } ChangeResourceRecordSetsResult result = new ChangeResourceRecordSetsResult(); if (interResult.getChangeInfo() != null) { ChangeInfo ci = new ChangeInfo(); ci.setComment(interResult.getChangeInfo().getComment()); ci.setId(interResult.getChangeInfo().getId()); ci.setStatus(interResult.getChangeInfo().getStatus()); ci.setSubmittedAt(interResult.getChangeInfo().getSubmittedAt()); result.setChangeInfo(ci); } return result; }
From source file:com.msi.dns53.server.query.ChangeResourceRecordSets.java
License:Apache License
private ChangeResourceRecordSetsResult changeResourceRecordSets(Session s, ChangeResourceRecordSetsRequest request) throws ErrorResponse { Date submittedAt = new Date(); ChangeResourceRecordSetsResult result = new ChangeResourceRecordSetsResult(); AccessMySQL sqlaccess = AccessMySQL.getInstance(); String tableName = sqlaccess.getTableName(request.getHostedZoneId(), this.getAccountId()); if (tableName.equals("FAILED")) { throw DNS53Faults.NoSuchHostedZone(request.getHostedZoneId()); }//w ww. j av a 2 s . c o m String zoneName = sqlaccess.getZoneName(request.getHostedZoneId()); //LinkedList<RRRequest> rrrs = request.getRRRequests(); List<Change> changes = request.getChangeBatch().getChanges(); //check if the ChangeBatch is valid for (Change tmp : changes) { String name = tmp.getResourceRecordSet().getName(); String nameDot = name; if (name.charAt(name.length() - 1) != '.') { nameDot += "."; } else { name = name.substring(0, name.length() - 1); } long weight = -1; if (tmp.getResourceRecordSet().getWeight() != null) { weight = tmp.getResourceRecordSet().getWeight(); if (weight < 0 || weight > 225) { throw DNS53Faults.InvalidArgument("Weight of a resource record must be between 0 and 255."); } } if (tmp.getResourceRecordSet().getType() == null) { throw DNS53Faults.MissingRequiredParameter( "Type parameter is required for each resource record set change request."); } if (tmp.getResourceRecordSet().getTTL() == null) { throw DNS53Faults.MissingRequiredParameter( "TTL parameter is required for each resource record set change request " + "except for the change requests to modify alias resource record sets."); } if (tmp.getAction().equals("CREATE")) { for (ResourceRecord rr : tmp.getResourceRecordSet().getResourceRecords()) { boolean recordExists = sqlaccess.recordExists(s, request.getHostedZoneId(), nameDot, tmp.getResourceRecordSet().getType(), rr.getValue()); DNS53ResourceRecord newRecord = new DNS53ResourceRecord(); newRecord.setZoneId(request.getHostedZoneId()); newRecord.setZoneName(zoneName); newRecord.setName(nameDot); newRecord.setTtl(tmp.getResourceRecordSet().getTTL()); newRecord.setRdata(rr.getValue()); if (tmp.getResourceRecordSet().getWeight() != null) { logger.debug("Request to create a weighted resource record set: " + tmp.getResourceRecordSet().toString()); if (recordExists) { if (sqlaccess.recordExists(s, request.getHostedZoneId(), nameDot, tmp.getResourceRecordSet().getType(), rr.getValue())) { throw DNS53Faults .InvalidChangeBatch("Tried to create a weighted resource record set, " + nameDot + " " + tmp.getResourceRecordSet().getType() + ", but it already exists."); } } if (tmp.getResourceRecordSet().getSetIdentifier() == null) { throw DNS53Faults.MissingRequiredParameter( "SetIdentifier is required for weighted resource" + "record set."); } newRecord.setSid(tmp.getResourceRecordSet().getSetIdentifier()); if (!(tmp.getResourceRecordSet().getType().equals("A") || tmp.getResourceRecordSet().getType().equals("AAAA") || tmp.getResourceRecordSet().getType().equals("CNAME") || tmp.getResourceRecordSet().getType().equals("TXT"))) { throw DNS53Faults.InvalidArgument( "Weighted resource record set must be A, AAAA, CNAME, or TXT type."); } newRecord.setRdtype(tmp.getResourceRecordSet().getType()); newRecord.setWeight(weight); for (int i = 0; i < weight; ++i) { sqlaccess.addResourceRecord(request.getHostedZoneId(), name, tmp.getResourceRecordSet().getTTL(), tmp.getResourceRecordSet().getType(), rr.getValue(), this.getAccountId()); } } else { if (recordExists) { throw DNS53Faults.InvalidChangeBatch("Tried to create resource record set, " + name + " " + tmp.getResourceRecordSet().getType() + ", but it already exists."); } if (!DNS53Constants.RESOURCERECORDSETS_TYPES .contains(tmp.getResourceRecordSet().getType())) { throw DNS53Faults.InvalidArgument("Resource record type is not recognized."); } newRecord.setRdtype(tmp.getResourceRecordSet().getType()); sqlaccess.addResourceRecord(request.getHostedZoneId(), name, tmp.getResourceRecordSet().getTTL(), tmp.getResourceRecordSet().getType(), rr.getValue(), this.getAccountId()); } s.save(newRecord); } } else if (tmp.getAction().equals("DELETE")) { for (ResourceRecord rr : tmp.getResourceRecordSet().getResourceRecords()) { boolean recordExists = sqlaccess.recordExists(s, request.getHostedZoneId(), nameDot, tmp.getResourceRecordSet().getType(), rr.getValue()); if (!recordExists) { throw DNS53Faults.InvalidChangeBatch("Tried to delete resource record set " + name + " " + tmp.getResourceRecordSet().getType() + ", but it was not found."); } List<DNS53ResourceRecord> recordList = ResourceRecordEntity.selectResourceRecords(s, request.getHostedZoneId(), nameDot, rr.getValue(), tmp.getResourceRecordSet().getType(), tmp.getResourceRecordSet().getSetIdentifier(), tmp.getResourceRecordSet().getTTL(), weight); if (recordList == null || recordList.size() == 0) { throw DNS53Faults.InvalidChangeBatch("Tried to delete resource record set " + name + " " + tmp.getResourceRecordSet().getType() + ", but it was not found with " + "weight = " + tmp.getResourceRecordSet().getWeight() + " and " + "SetIdentifier = " + tmp.getResourceRecordSet().getSetIdentifier() + "."); } if (recordList.size() > 1) { logger.debug( "Too many results being returned for DELETE change request. Either duplicate entries exist, NS records are selected for deletion, or other issue. Throwing InternalError!"); throw DNS53Faults.InternalError(); } DNS53ResourceRecord currentRecord = recordList.get(0); if (tmp.getResourceRecordSet().getWeight() != null) { if (tmp.getResourceRecordSet().getSetIdentifier() == null) { throw DNS53Faults.MissingRequiredParameter( "SetIdentifier is required for weighted resource" + "record set."); } List<DNS53ResourceRecord> existing = sqlaccess.listResourceRecords(tableName, tmp.getResourceRecordSet().getType(), name, rr.getValue()); logger.debug("Existing weight of the record resource set is " + existing.size() + ". DELETE is requested" + " with weight, " + tmp.getResourceRecordSet().getWeight()); if (tmp.getResourceRecordSet().getWeight() != Integer.valueOf(existing.size()).longValue() || tmp.getResourceRecordSet().getWeight() != currentRecord.getWeight()) { throw DNS53Faults.InvalidArgument( "Weighted resource record set was found with matching name and value(s). " + "However, the value of weight is different. Existing resource record set has the weight of " + existing.size() + "."); } } else { if (tmp.getResourceRecordSet().getSetIdentifier() != null) { throw DNS53Faults .MissingRequiredParameter("SetIdentifier was received, however, weight was not " + "passed along. Both of these parameters are required for change request against weighted " + "resource record sets."); } if (currentRecord.getWeight() != -1) { throw DNS53Faults.InvalidArgument( "Weighted resource record set was found with matching name and value(s). " + "However, the request did not pass weight parameter."); } } s.delete(currentRecord); sqlaccess.deleteResourceRecord(request.getHostedZoneId(), name, tmp.getResourceRecordSet().getTTL(), tmp.getResourceRecordSet().getType(), rr.getValue(), this.getAccountId()); } } } String changeID = RequestHandler.writeChange(sqlaccess, "INSYNC", submittedAt.toString(), "RRSET", "RRSET"); ChangeInfo ci = new ChangeInfo(); ci.setId(changeID); ci.setStatus("INSYNC"); ci.setSubmittedAt(submittedAt); result.setChangeInfo(ci); return result; }
From source file:com.msi.dns53.server.query.ListResourceRecordSets.java
License:Apache License
@Override public String marshall(MarshallStruct<ListResourceRecordSetsResult> input, HttpServletResponse resp) throws Exception { ListResourceRecordSetsResult result = input.getMainObject(); XMLNode response = new XMLNode(DNS53Constants.LISTRESOURCERECORDSETSRESPONSE); response.addAttr(DNS53Constants.XMLNS, DNS53Constants.XMLNS_VALUE); if (result.getResourceRecordSets() != null) { XMLNode rrSet = QueryUtil.addNode(response, DNS53Constants.RESOURCERECORDSETS); for (ResourceRecordSet rrs : result.getResourceRecordSets()) { XMLNode rr = QueryUtil.addNode(rrSet, DNS53Constants.RESOURCERECORDSET); QueryUtil.addNode(rr, DNS53Constants.NAME, rrs.getName()); QueryUtil.addNode(rr, DNS53Constants.TYPE, rrs.getType()); QueryUtil.addNode(rr, DNS53Constants.TTL, rrs.getTTL()); if (rrs.getSetIdentifier() != null) { QueryUtil.addNode(rr, DNS53Constants.SETIDENTIFIER, rrs.getSetIdentifier()); }/* w w w . j a va 2 s . c om*/ if (rrs.getWeight() != null && rrs.getWeight() != -1) { QueryUtil.addNode(rr, DNS53Constants.WEIGHT, rrs.getWeight()); } if (rrs.getResourceRecords() != null && rrs.getResourceRecords().size() > 0) { XMLNode records = QueryUtil.addNode(rr, DNS53Constants.RESOURCERECORDS); for (ResourceRecord record : rrs.getResourceRecords()) { XMLNode r = QueryUtil.addNode(records, DNS53Constants.RESOURCERECORD); QueryUtil.addNode(r, DNS53Constants.VALUE, record.getValue()); } } } } QueryUtil.addNode(response, DNS53Constants.ISTRUNCATED, result.getIsTruncated()); QueryUtil.addNode(response, DNS53Constants.MAXITEMS, result.getMaxItems()); if (result.getIsTruncated() && result.getNextRecordName() != null) { QueryUtil.addNode(response, DNS53Constants.NEXTRECORDNAME, result.getNextRecordName()); } if (result.getIsTruncated() && result.getNextRecordType() != null) { QueryUtil.addNode(response, DNS53Constants.NEXTRECORDTYPE, result.getNextRecordType()); } if (result.getIsTruncated() && result.getNextRecordIdentifier() != null) { QueryUtil.addNode(response, DNS53Constants.NEXTRECORDIDENTIFIER, result.getNextRecordIdentifier()); } return response.toString(); }
From source file:com.renatodelgaudio.awsupdate.SimpleRecordService.java
License:Open Source License
@Override public String getCurrentIP() { ResourceRecordSet set = getCurrentRecordSet(); if (set != null && set.getResourceRecords() != null && set.getResourceRecords().size() > 0) { ResourceRecord rr = set.getResourceRecords().get(0); if (rr != null) { return rr.getValue(); }//from ww w . ja va 2 s. co m } return null; }
From source file:io.kodokojo.service.aws.Route53DnsManager.java
License:Open Source License
private boolean containEntry(DnsEntry dnsEntry, boolean stric) { if (dnsEntry == null) { throw new IllegalArgumentException("dnsEntry must be defined."); }//from ww w. j a v a 2s .c om HostedZone hostedZone = getHostedZone(); boolean found = false; if (hostedZone != null) { Iterator<ResourceRecordSet> iterator = getResourceRecordSet(hostedZone).iterator(); String dnsEntryName = valideDnsName(dnsEntry.getName()); while (!found && iterator.hasNext()) { ResourceRecordSet recordSet = iterator.next(); found = recordSet.getName().equals(dnsEntryName) && DnsEntry.Type.valueOf(recordSet.getType()).equals(dnsEntry.getType()); if (found && stric) { Iterator<ResourceRecord> recordIterator = recordSet.getResourceRecords().iterator(); boolean sameValue = false; while (!sameValue && recordIterator.hasNext()) { ResourceRecord record = recordIterator.next(); sameValue = dnsEntry.getValue().equals(record.getValue()); } found = sameValue; } } } return found; }
From source file:org.lendingclub.mercator.aws.Route53Scanner.java
License:Apache License
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()); }//from w w w . ja v a 2 s . co m return n; }