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

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

Introduction

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

Prototype

public ResourceRecordSet() 

Source Link

Document

Default constructor for ResourceRecordSet object.

Usage

From source file:br.com.ingenieux.mojo.beanstalk.cmd.dns.BindDomainsCommand.java

License:Apache License

protected void assignDomain(BindDomainsContext ctx, String record, String zoneId) {
    ChangeBatch changeBatch = new ChangeBatch();

    changeBatch.setComment(format("Updated for env %s", ctx.getCurEnv().getCNAME()));

    /**/*w ww.  j a  v  a 2  s.c o  m*/
     * Look for Existing Resource Record Sets
     */
    {
        ResourceRecordSet resourceRecordSet = null;

        ListResourceRecordSetsResult listResourceRecordSets = r53
                .listResourceRecordSets(new ListResourceRecordSetsRequest(zoneId));

        for (ResourceRecordSet rrs : listResourceRecordSets.getResourceRecordSets()) {
            if (!rrs.getName().equals(record)) {
                continue;
            }

            boolean matchesTypes = "A".equals(rrs.getType()) || "CNAME".equals(rrs.getType());

            if (!matchesTypes) {
                continue;
            }

            if (isInfoEnabled()) {
                info("Excluding resourceRecordSet %s for domain %s", rrs, record);
            }

            changeBatch.getChanges().add(new Change(ChangeAction.DELETE, rrs));
        }
    }

    /**
     * Then Add Ours
     */
    ResourceRecordSet resourceRecordSet = new ResourceRecordSet();

    resourceRecordSet.setName(record);
    resourceRecordSet.setType(RRType.A);

    if (ctx.singleInstance) {
        final String address = ctx.getCurEnv().getEndpointURL();
        ResourceRecord resourceRecord = new ResourceRecord(address);

        resourceRecordSet.setTTL(60L);
        resourceRecordSet.setResourceRecords(asList(resourceRecord));

        if (isInfoEnabled()) {
            info("Adding resourceRecordSet %s for domain %s mapped to %s", resourceRecordSet, record, address);
        }
    } else {
        AliasTarget aliasTarget = new AliasTarget();

        aliasTarget.setHostedZoneId(ctx.getElbHostedZoneId());
        aliasTarget.setDNSName(ctx.getCurEnv().getEndpointURL());

        resourceRecordSet.setAliasTarget(aliasTarget);

        if (isInfoEnabled()) {
            info("Adding resourceRecordSet %s for domain %s mapped to %s", resourceRecordSet, record,
                    aliasTarget.getDNSName());
        }
    }

    changeBatch.getChanges().add(new Change(ChangeAction.CREATE, resourceRecordSet));

    if (isInfoEnabled()) {
        info("Changes to be sent: %s", changeBatch.getChanges());
    }

    ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(zoneId, changeBatch);

    r53.changeResourceRecordSets(req);
}

From source file:com.carrotgarden.maven.aws.dns.CarrotRoute53.java

License:BSD License

public ResourceRecordSet makeRecordCNAME(final String source, final String target) {

    final Collection<ResourceRecord> resourceList = new ArrayList<ResourceRecord>();
    resourceList.add(new ResourceRecord(target));

    final ResourceRecordSet record = new ResourceRecordSet();
    record.setName(source);/*from   w w  w. j a v a 2 s. co m*/
    record.setTTL(60L);
    record.setType("CNAME");
    record.setResourceRecords(resourceList);

    return record;
}

From source file:com.msi.dns53.client.DNS53Client.java

License:Apache License

public ListResourceRecordSetsResult listResourceRecordSets(ListResourceRecordSetsRequest req)
        throws AmazonServiceException, AmazonClientException {
    Client c = Client.create();/*from  w  w  w .j ava2  s.com*/
    WebResource r = c.resource(this.serverURL);
    MultivaluedMap<String, String> paramMap = new MultivaluedMapImpl();
    if (req.getStartRecordName() != null) {
        paramMap.add("name", req.getStartRecordName());
    }
    if (req.getStartRecordType() != null) {
        paramMap.add("type", req.getStartRecordType());
    }
    if (req.getStartRecordIdentifier() != null) {
        paramMap.add("identifier", req.getStartRecordIdentifier());
    }
    if (req.getMaxItems() != null) {
        paramMap.add("maxitems", req.getMaxItems());
    }

    ClientResponse response = r.path(req.getHostedZoneId() + "/rrset").queryParams(paramMap)
            .type(MediaType.APPLICATION_XML_TYPE).accept(MediaType.TEXT_XML)
            .header("X-Amzn-Authorization",
                    "AWS3 AWSAccessKeyId=" + this.accessKey + "," + "Algorithm=HmacSHA256,"
                            + "SignedHeaders=Host;X-Amz-Date," + "Signature=THISISANEXAMPLESIGNATURE=")
            .get(ClientResponse.class);

    String resultXml = response.getEntity(String.class);
    if (response.getStatus() != 200) {
        exceptionMapper(response, resultXml);
    }

    ListResourceRecordSetsResponsePOJO interResult = null;
    try {
        StringReader reader = new StringReader(resultXml);
        JAXBContext context = JAXBContext.newInstance(ListResourceRecordSetsResponsePOJO.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        interResult = (ListResourceRecordSetsResponsePOJO) unmarshaller.unmarshal(reader);
    } catch (JAXBException e) {
        e.printStackTrace();
        return null;
    }
    if (interResult == null) {
        return null;
    }

    ListResourceRecordSetsResult result = new ListResourceRecordSetsResult();
    result.setMaxItems(interResult.getMaxItems());
    result.setIsTruncated(interResult.isTruncated());
    if (interResult.getResourceRecordSets() != null) {
        Collection<ResourceRecordSet> rrSets = new LinkedList<ResourceRecordSet>();
        for (ResourceRecordSetPOJO p : interResult.getResourceRecordSets()) {
            ResourceRecordSet temp = new ResourceRecordSet();
            temp.setName(p.getName());
            temp.setSetIdentifier(p.getSetIdentifier());
            temp.setTTL(p.getTTL());
            temp.setType(p.getType());
            temp.setWeight(p.getWeight());
            if (p.getResourceRecords() != null) {
                Collection<ResourceRecord> resourceRecords = new LinkedList<ResourceRecord>();
                for (ResourceRecordPOJO record : p.getResourceRecords()) {
                    ResourceRecord newRec = new ResourceRecord();
                    newRec.setValue(record.getValue());
                    resourceRecords.add(newRec);
                }
                temp.setResourceRecords(resourceRecords);
            }
            rrSets.add(temp);
        }
        result.setResourceRecordSets(rrSets);
    }

    return result;
}

From source file:com.msi.dns53.client.DNS53MetadataUtil.java

License:Apache License

public void populateServiceMetadata(final ServletConfig config, String serviceName) {
    logger.debug("init(): TXT record will be created for this service regarding its port and context path.");
    String contextPath = config.getServletContext().getContextPath();
    String port = Appctx.getBean("TOMCAT_PORT");
    String master_passwd = Appctx.getBean("DB_PASSWORD");

    final String fqdn = (String) ConfigurationUtil.getConfiguration(Arrays.asList(new String[] { "FQDN" }));
    final String domain = (String) ConfigurationUtil
            .getConfiguration(Arrays.asList(new String[] { "FQDN_DOMAIN" }));
    String txtRecordValue = ":" + port + contextPath;
    String baseDNSServerURL = "http://localhost:" + port + "/DNS53Server/2012-02-29/";

    logger.debug("Tomcat port = " + port + "; FQDN = " + fqdn + "; domain = " + domain + "; TXT Record Value = "
            + txtRecordValue + "; BaseDNSServerUrl = " + baseDNSServerURL);

    DNS53Client client = new DNS53Client(baseDNSServerURL + "hostedzone", baseDNSServerURL + "change", "admin",
            master_passwd);/*from  www.ja  v a2  s  .  com*/

    logger.debug("Service name = " + serviceName);
    String recordName = serviceName + "-" + fqdn;
    logger.debug("TXT Record Name: " + recordName);

    logger.debug("init(): Calling ListHostedZones to find the target zone!");
    ListHostedZonesRequest lhzReq = new ListHostedZonesRequest();
    lhzReq.setMaxItems("1");

    ListHostedZonesResult lhzResult = client.listHostedZones(lhzReq);

    HostedZone zone = null;
    List<HostedZone> zones = lhzResult.getHostedZones();
    if (zones != null && zones.size() > 0) {
        for (HostedZone hz : zones) {
            if (hz.getName().equals(domain + ".") || hz.getName().equals(domain)) {
                zone = hz;
            }
        }
    } else {
        logger.error(
                "BaseAsyncServlet encountered an error while it was trying to find the target hosted zone.");
        throw ErrorResponse.InternalFailure();
    }

    if (zone == null) {
        logger.error("BaseAsyncServlet could not find any zone for this TopStackWeb instance.");
        throw ErrorResponse.InternalFailure();
    }

    // TODO (optional) check for the CNAME record for this service before proceeding

    logger.debug("init(): Creating a new TXT record for " + recordName + " with \"" + txtRecordValue
            + "\" as its value!");
    String zoneId = zone.getId();
    ChangeResourceRecordSetsRequest crrsReq = new ChangeResourceRecordSetsRequest();
    crrsReq.setHostedZoneId(zoneId);
    ChangeBatch cb = new ChangeBatch();
    cb.setComment(
            "BaseAsyncServlet => init(): Registering " + serviceName + " service for Transcend TopStack.");
    Collection<Change> changes = new LinkedList<Change>();
    Change change = new Change();
    change.setAction(ChangeAction.CREATE);
    ResourceRecordSet rrSet = new ResourceRecordSet();
    rrSet.setName(recordName);
    rrSet.setTTL(900L);
    rrSet.setType(RRType.TXT);
    Collection<ResourceRecord> rr = new LinkedList<ResourceRecord>();
    ResourceRecord record = new ResourceRecord();
    record.setValue(txtRecordValue);
    rr.add(record);
    rrSet.setResourceRecords(rr);
    change.setResourceRecordSet(rrSet);
    changes.add(change);
    cb.setChanges(changes);
    crrsReq.setChangeBatch(cb);
    ChangeResourceRecordSetsResult result = client.changeResourceRecordSets(crrsReq);
    logger.debug("Result for the last ChangeResourceRecordSets request: " + result.toString());
}

From source file:com.msi.dns53.server.query.ChangeResourceRecordSets.java

License:Apache License

public ChangeResourceRecordSetsRequest unmarshall(HttpServletRequest req) throws IOException, SAXException {
    final ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest();
    SlashObject so = new SlashObject(req.getPathInfo());
    List<String> paths = so.getList();
    if (paths.size() != 4) {
        throw DNS53Faults.InternalError();
    }/*  ww w  .  j  av  a 2 s.co m*/
    String zoneId = paths.get(2);
    request.setHostedZoneId(zoneId);

    final ChangeBatch batch = new ChangeBatch();
    StringBuilder stringBuilder = new StringBuilder(1000);
    Scanner scanner = new Scanner(req.getInputStream());
    while (scanner.hasNextLine()) {
        stringBuilder.append(scanner.nextLine());
    }
    String body = stringBuilder.toString();
    logger.debug("XML Body Content: " + body);

    // TODO handler below parses basic syntax only; latency, weight, and alias record sets cannot be parsed at the moment
    DefaultHandler handler = new DefaultHandler() {
        private boolean changeResourceRecordSetsRequest = false;
        private boolean changeBatch = false;
        private boolean changes = false;
        private boolean change = false;
        private boolean resourceRecordSet = false;
        private boolean resourceRecords = false;
        private boolean resourceRecord = false;
        private CharArrayWriter contents = new CharArrayWriter();
        private List<Change> cList;
        private Change c;
        ResourceRecordSet rrSet;
        Collection<ResourceRecord> rrs;
        ResourceRecord record;

        public void startElement(String uri, String localName, String nodeName, Attributes attributes)
                throws SAXException {
            contents.reset();
            if (!uri.equals(DNS53Constants.XMLNS_VALUE)) {
                throw DNS53Faults.InvalidInput("The XML you provided did not have the correct namespace.");
            }
            if (nodeName.equals(DNS53Constants.CHANGERESOURCERECORDSETSREQUEST)) {
                changeResourceRecordSetsRequest = true;
            }
            if (nodeName.equals(DNS53Constants.CHANGEBATCH)) {
                changeBatch = true;
            }
            if (nodeName.equals(DNS53Constants.CHANGES)) {
                changes = true;
                cList = new LinkedList<Change>();
            }
            if (nodeName.equals(DNS53Constants.CHANGE)) {
                change = true;
                c = new Change();
            }
            if (nodeName.equals(DNS53Constants.RESOURCERECORDSET)) {
                resourceRecordSet = true;
                rrSet = new ResourceRecordSet();
            }
            if (nodeName.equals(DNS53Constants.RESOURCERECORDS)) {
                resourceRecords = true;
                rrs = new LinkedList<ResourceRecord>();
            }
            if (nodeName.equals(DNS53Constants.RESOURCERECORD)) {
                resourceRecord = true;
                record = new ResourceRecord();
            }
        }

        public void endElement(String uri, String localName, String nodeName) throws SAXException {
            // closing xml node
            if (changeResourceRecordSetsRequest && localName.equals(DNS53Constants.CREATEHOSTEDZONEREQUEST)) {
                changeResourceRecordSetsRequest = false;
            }
            if (changeResourceRecordSetsRequest && changeBatch
                    && localName.equals(DNS53Constants.CHANGEBATCH)) {
                changeBatch = false;
                request.setChangeBatch(batch);
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes
                    && localName.equals(DNS53Constants.CHANGES)) {
                changes = false;
                batch.setChanges(cList);
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change
                    && localName.equals(DNS53Constants.CHANGE)) {
                change = false;
                cList.add(c);
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change
                    && localName.equals(DNS53Constants.RESOURCERECORDSET)) {
                resourceRecordSet = false;
                c.setResourceRecordSet(rrSet);
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change
                    && localName.equals(DNS53Constants.RESOURCERECORDS)) {
                resourceRecords = false;
                rrSet.setResourceRecords(rrs);
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecords
                    && localName.equals(DNS53Constants.RESOURCERECORD)) {
                resourceRecord = false;
                rrs.add(record);
            }

            // pulling xml node value
            if (changeResourceRecordSetsRequest && changeBatch && localName.equals(DNS53Constants.COMMENT)) {
                batch.setComment(contents.toString());
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change
                    && localName.equals(DNS53Constants.ACTION)) {
                c.setAction(contents.toString());
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecordSet
                    && localName.equals(DNS53Constants.NAME)) {
                rrSet.setName(contents.toString());
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecordSet
                    && localName.equals(DNS53Constants.TYPE)) {
                rrSet.setType(contents.toString());
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecordSet
                    && localName.equals(DNS53Constants.SETIDENTIFIER)) {
                rrSet.setSetIdentifier(contents.toString());
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecordSet
                    && localName.equals(DNS53Constants.TTL)) {
                try {
                    rrSet.setTTL(Long.valueOf(contents.toString()));
                } catch (NumberFormatException e) {
                    logger.debug("Problem parsing TTL. It must be a numeric value!");
                    throw DNS53Faults.InvalidArgument("TTL must be a numeric value within range.");
                }
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecordSet
                    && localName.equals(DNS53Constants.WEIGHT)) {
                try {
                    rrSet.setWeight(Long.valueOf(contents.toString()));
                } catch (NumberFormatException e) {
                    logger.debug("Problem parsing Weight. It must be a numeric value!");
                    throw DNS53Faults.InvalidArgument("Weight must be a numeric value within range.");
                }
            }
            if (changeResourceRecordSetsRequest && changeBatch && changes && change && resourceRecordSet
                    && resourceRecords && resourceRecord && localName.equals(DNS53Constants.VALUE)) {
                record.setValue(contents.toString());
            }
        }

        public void characters(char ch[], int start, int length) throws SAXException {
            this.contents.write(ch, start, length);
        }
    };

    XMLReader xr = XMLReaderFactory.createXMLReader();
    xr.setContentHandler(handler);
    xr.parse(new InputSource(new StringReader(body)));
    return request;
}

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());
    }/* ww  w.ja v a  2s  .  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 boolean updateRecord(String ip) {

    String recordName = config.getRecordName();

    ChangeResourceRecordSetsRequest changeRequest = new ChangeResourceRecordSetsRequest();
    changeRequest.setHostedZoneId(config.getZoneId());
    ChangeBatch batch = new ChangeBatch();
    Change change = new Change();

    ResourceRecordSet set = getCurrentRecordSet();
    if (set != null) {
        if (!equalsIgnoreCase("A", set.getType())) {
            log.error("Record already exists but not as Type A. No actions were performed.");
            return false;
        }/*from   w ww. j  av  a 2s .  com*/
        change.setAction("UPSERT");
        log.info("Record [" + recordName + "] already present on AWS Route 53. Upating it..");
    } else {
        change.setAction("CREATE");
        log.info("Record [" + recordName + "] not present on AWS Route 53. Creating it..");
        set = new ResourceRecordSet().withName(recordName).withType("A");
    }

    set.setTTL(Long.parseLong(config.getTTL()));
    List<ResourceRecord> l = new ArrayList<ResourceRecord>();
    l.add(new ResourceRecord(ip));
    set.setResourceRecords(l);

    change.setResourceRecordSet(set);
    batch.withChanges(change);

    changeRequest.setChangeBatch(batch);

    log.info("Updating DNS " + recordName + " with IP " + ip);

    ChangeResourceRecordSetsResult result = config.getAmazonRoute53Client()
            .changeResourceRecordSets(changeRequest);
    log.info(result.toString());
    return true;
}

From source file:edu.umass.cs.aws.support.Route53.java

License:Apache License

private static void createRecordSetFromHostedZone() {

    List<ResourceRecord> records = new ArrayList<>();
    ResourceRecord record = new ResourceRecord();
    record.setValue("http://www.marksdevserver.com");
    records.add(record);/* ww  w .j a va  2s . c o  m*/

    ResourceRecordSet recordSet = new ResourceRecordSet();
    recordSet.setName("markstest.domain.com.");
    recordSet.setType(RRType.CNAME);
    recordSet.setTTL(new Long(60));
    recordSet.setResourceRecords(records);

    // Create the Change
    List<Change> changes = new ArrayList<>();
    Change change = new Change();
    change.setAction(ChangeAction.CREATE);
    change.setResourceRecordSet(recordSet);
    changes.add(change);

    // Create a batch and add the change to it
    ChangeBatch batch = new ChangeBatch();
    batch.setChanges(changes);

    // Create a Request and add the batch to it.
    ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest();
    request.setHostedZoneId(HOSTED_ZONE_ID);
    request.setChangeBatch(batch);

    // send the request
    ChangeResourceRecordSetsResult result = route53.changeResourceRecordSets(request);
    System.out.println(result.toString());

}

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.ja va  2s . com
    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:fr.xebia.cloud.amazon.aws.tools.AmazonAwsUtils.java

License:Apache License

public static void createCnamesForInstances(Map<String, Instance> cnameToInstances, HostedZone hostedZone,
        AmazonRoute53 route53) {//from   w w w.  ja  v  a2 s. c o m
    Function<Map.Entry<String, Instance>, Change> cnameAndInstanceToChange = new Function<Map.Entry<String, Instance>, Change>() {
        @Override
        public Change apply(@Nullable Map.Entry<String, Instance> entry) {
            String cname = entry.getKey();
            Instance instance = entry.getValue();
            return new Change().withAction(ChangeAction.CREATE).withResourceRecordSet(
                    new ResourceRecordSet().withType(RRType.CNAME).withName(cname).withTTL(300L)
                            .withResourceRecords(new ResourceRecord(instance.getPublicDnsName())));
        }
    };
    List<Change> changes = Lists
            .newArrayList(Iterables.transform(cnameToInstances.entrySet(), cnameAndInstanceToChange));

    logger.debug("Create CNAME {}", changes);

    ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest()
            .withHostedZoneId(hostedZone.getId()).withChangeBatch(new ChangeBatch().withChanges(changes));
    route53.changeResourceRecordSets(changeResourceRecordSetsRequest);

}