Example usage for com.amazonaws.services.route53.model ResourceRecordSet getResourceRecords

List of usage examples for com.amazonaws.services.route53.model ResourceRecordSet getResourceRecords

Introduction

In this page you can find the example usage for com.amazonaws.services.route53.model ResourceRecordSet getResourceRecords.

Prototype


public java.util.List<ResourceRecord> getResourceRecords() 

Source Link

Document

Information about the resource records to act upon.

Usage

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 .java2  s .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.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());
            }/*  ww w.  jav a 2  s . com*/
            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.msi.dns53.server.query.ListResourceRecordSets.java

License:Apache License

private ListResourceRecordSetsResult listResourceRecordSets(Session sess, ListResourceRecordSetsRequest request)
        throws ErrorResponse {
    ListResourceRecordSetsResult result = new ListResourceRecordSetsResult();
    AccessMySQL sqlaccess = AccessMySQL.getInstance();

    String tableName = sqlaccess.getTableName(request.getHostedZoneId(), this.getAccountId());
    if (tableName.equals("FAILED")) {
        throw DNS53Faults.NoSuchHostedZone(request.getHostedZoneId());
    }/*from w  ww.  ja  va 2 s .  c o m*/
    if (request.getStartRecordType() != null && request.getStartRecordName() == null) {
        throw DNS53Faults.InvalidInput();
    }
    logger.debug(
            "Table " + tableName + " is found for hosted zone with id, " + request.getHostedZoneId() + ".");

    String zoneName = sqlaccess.getZoneName(request.getHostedZoneId());
    logger.debug("Target hosted zone: " + zoneName);

    RequestHandler.checkType(request.getStartRecordType());
    List<DNS53ResourceRecord> records = sqlaccess.listResourceRecords(sess, request.getHostedZoneId(),
            request.getStartRecordName(), null, request.getStartRecordType(), null, -1, -1);
    logger.debug("There are " + records.size() + " resource record sets in this hosted zone.");

    int maxItems = -1;
    if (request.getMaxItems() != null) {
        try {
            maxItems = Integer.valueOf(request.getMaxItems());
        } catch (NumberFormatException e) {
            throw DNS53Faults.InvalidArgument("maxitems parameter must be an integer between 1 and 100.");
        }
    }
    if (maxItems == -1) {
        maxItems = 100; // default
    }
    boolean truncated = false;
    if (maxItems < records.size()) {
        truncated = true;
    }

    Collection<ResourceRecordSet> resourceRecordSets = new LinkedList<ResourceRecordSet>();
    /*
     * ResourceRecordSet ns = new ResourceRecordSet(); ns.setName(zoneName);
     * ns.setType("NS"); Collection<ResourceRecord> nsRecords = new
     * LinkedList<ResourceRecord>();
     */

    int i = 0;
    while (i < records.size() && i < maxItems) {
        DNS53ResourceRecord rec = records.get(i);
        ResourceRecordSet temp = new ResourceRecordSet();
        temp.setName(rec.getName());
        temp.setType(rec.getRdtype());
        temp.setTTL(Long.valueOf(rec.getTtl()));
        if (rec.getSid() != null) {
            temp.setSetIdentifier(rec.getSid());
        }
        if (rec.getWeight() != -1) {
            temp.setWeight(rec.getWeight());
        }
        Collection<ResourceRecord> resourceRecords = new LinkedList<ResourceRecord>();
        resourceRecords.add(new ResourceRecord().withValue(rec.getRdata()));
        temp.setResourceRecords(resourceRecords);
        resourceRecordSets.add(temp);

        ++i;
    }

    // now reduce the duplicates
    TreeMap<String, ResourceRecordSet> map = new TreeMap<String, ResourceRecordSet>();
    for (ResourceRecordSet rs : resourceRecordSets) {
        String key = rs.getName() + "::" + rs.getType();
        ResourceRecordSet temp = map.get(key);
        if (temp == null) {
            map.put(key, rs);
        } else {
            temp.getResourceRecords().add(new ResourceRecord(rs.getResourceRecords().get(0).getValue()));
        }
    }

    resourceRecordSets = map.values();

    result.setResourceRecordSets(resourceRecordSets);
    result.setIsTruncated(truncated);
    if (truncated) {
        result.setNextRecordName("UNIMPLEMENTED");
        result.setNextRecordType("UNIMPLEMENTED");
    }
    result.setMaxItems(String.valueOf(maxItems));

    return result;
}

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  w w w .  j a  v a 2s.co m*/
    }
    return null;
}

From source file:fr.xebia.cloud.amazon.aws.tools.AmazonAwsUtils.java

License:Apache License

public static void deleteCnameIfExist(Iterable<String> cnames, HostedZone hostedZone, AmazonRoute53 route53) {
    // List all//from w  w  w  .j  a  v  a2s . c o  m
    ListResourceRecordSetsRequest listResourceRecordSetsRequest = new ListResourceRecordSetsRequest()
            // .withStartRecordType(RRType.CNAME)
            .withHostedZoneId(hostedZone.getId());
    ListResourceRecordSetsResult listResourceRecordSetsResult = route53
            .listResourceRecordSets(listResourceRecordSetsRequest);

    if (listResourceRecordSetsResult.isTruncated()) {
        logger.warn("truncated result");
    }

    Function<ResourceRecordSet, String> cnameExtractor = new Function<ResourceRecordSet, String>() {
        @Override
        public String apply(@Nullable ResourceRecordSet resourceRecordSet) {
            if (resourceRecordSet == null) {
                return null;
            }
            if (!RRType.CNAME.equals(RRType.fromValue(resourceRecordSet.getType()))) {
                return null;
            }
            return resourceRecordSet.getName();
        }
    };

    Iterable<ResourceRecordSet> existingCnamesAsResourceRecordSet = Iterables
            .filter(listResourceRecordSetsResult.getResourceRecordSets(), new Predicate<ResourceRecordSet>() {
                @Override
                public boolean apply(@Nullable ResourceRecordSet resourceRecordSet) {
                    return RRType.CNAME.equals(RRType.fromValue(resourceRecordSet.getType()));
                }
            });

    final ImmutableMap<String, ResourceRecordSet> existingCnames = Maps
            .uniqueIndex(existingCnamesAsResourceRecordSet, cnameExtractor);

    Sets.SetView<String> cnamesToDelete = Sets.intersection(Sets.newHashSet(cnames), existingCnames.keySet());

    Function<String, Change> cnameToDeleteCnameChange = new Function<String, Change>() {
        @Override
        public Change apply(@Nullable String cname) {
            ResourceRecordSet existingResourceRecordSet = existingCnames.get(cname);

            return new Change().withAction(ChangeAction.DELETE)
                    .withResourceRecordSet(new ResourceRecordSet().withType(RRType.CNAME).withName(cname)
                            .withTTL(existingResourceRecordSet.getTTL())
                            .withResourceRecords(existingResourceRecordSet.getResourceRecords()));
        }
    };

    List<Change> changes = Lists.newArrayList(Iterables.transform(cnamesToDelete, cnameToDeleteCnameChange));
    if (changes.isEmpty()) {
        logger.debug("No CNAME to delete");
        return;
    }

    logger.info("Delete CNAME changes {}", changes);
    ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest()
            .withHostedZoneId(hostedZone.getId()).withChangeBatch(new ChangeBatch().withChanges(changes));
    route53.changeResourceRecordSets(changeResourceRecordSetsRequest);
}

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 w w w.j  a  va2s. c o m
    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:io.kodokojo.service.aws.Route53DnsManager.java

License:Open Source License

private static DnsEntry convertDnsEnrty(ResourceRecordSet resourceRecordSet) {
    String dnsName = resourceRecordSet.getName();
    DnsEntry.Type dnsType = DnsEntry.Type.valueOf(resourceRecordSet.getType());
    String value = resourceRecordSet.getResourceRecords().get(0).getValue();
    return new DnsEntry(dnsName, dnsType, value);
}

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 .j  a v  a  2 s . co m
    }
    return n;
}

From source file:tech.greenfield.aws.route53.EventHandler.java

License:Open Source License

/**
 * Start an DNS registration for the launched instance
 * @param ec2InstanceId instance ID of instance that needs to be registered
 * @param ttl TTL in seconds to use when creating a new record
 */// w w w.  j  ava  2  s  . c  om
private void registerInstance(String ec2InstanceId) throws NoIpException {
    logger.info("Registering " + ec2InstanceId);
    ChangeBatch cb = message.getUpsertChanges(Collections.singletonList(getInstance(ec2InstanceId)));

    if (Route53Message.isDebug())
        logger.fine("Adding instance with addresses: " + cb);

    for (Change c : cb.getChanges()) {
        ResourceRecordSet rr = c.getResourceRecordSet();
        ResourceRecordSet oldrr = Tools.getRecordSet(rr.getName(), rr.getType());
        if (Objects.nonNull(oldrr))
            oldrr.getResourceRecords().forEach(r -> rr.withResourceRecords(r));
    }
    ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(Route53Message.getHostedZoneId(),
            cb);
    if (Route53Message.isDebug())
        logger.fine("Sending rr change request: " + req);
    Tools.waitFor(route53().changeResourceRecordSets(req));
}