GleSYS provider: updating DomainClient for GleSYS api Beta v0.1.7 changes

This commit is contained in:
Adam Lowe 2012-01-31 12:29:47 +00:00
parent 131e61d9c2
commit fe6c37f9bf
12 changed files with 122 additions and 106 deletions

View File

@ -35,13 +35,13 @@ public class Domain implements Comparable<Domain> {
}
public static class Builder {
private String domain;
private String domainName;
private Date createTime;
private int recordCount;
private boolean glesysNameServer;
private boolean useGlesysNameServer;
public Builder domain(String domain) {
this.domain = domain;
public Builder domainName(String domainName) {
this.domainName = domainName;
return this;
}
@ -55,38 +55,39 @@ public class Domain implements Comparable<Domain> {
return this;
}
public Builder glesysNameServer(boolean glesysNameServer) {
this.glesysNameServer = glesysNameServer;
public Builder useGlesysNameServer(boolean useGlesysNameServer) {
this.useGlesysNameServer = useGlesysNameServer;
return this;
}
public Domain build() {
return new Domain(domain, createTime, recordCount, glesysNameServer);
return new Domain(domainName, createTime, recordCount, useGlesysNameServer);
}
public Builder fromDomain(Domain in) {
return new Builder();
return new Builder().domainName(in.getDomainName()).createTime(in.getCreateTime()).recordCount(in.getRecordCount()).useGlesysNameServer(in.isGlesysNameServer());
}
}
private final String domain;
@SerializedName("create_time")
@SerializedName("domainname")
private final String domainName;
@SerializedName("createtime")
private final Date createTime;
@SerializedName("count")
@SerializedName("recordcount")
private final int recordCount;
@SerializedName("glesysnameserver")
private final boolean glesysNameServer;
@SerializedName("usingglesysnameserver")
private final boolean useGlesysNameServer;
public Domain(String domain, Date createTime, int recordCount, boolean glesysNameServer) {
this.domain = domain;
public Domain(String domainName, Date createTime, int recordCount, boolean useGlesysNameServer) {
this.domainName = domainName;
this.createTime = createTime;
this.recordCount = recordCount;
this.glesysNameServer = glesysNameServer;
this.useGlesysNameServer = useGlesysNameServer;
}
/** @return the domain name, ex. "jclouds.org" */
public String getDomain() {
return domain;
public String getDomainName() {
return domainName;
}
/** @return the date the domain was registered with GleSYS */
@ -100,18 +101,18 @@ public class Domain implements Comparable<Domain> {
}
/** @return true if a GleSYS nameserver holds the records */
public boolean getGlesysNameServer() {
return glesysNameServer;
public boolean isGlesysNameServer() {
return useGlesysNameServer;
}
@Override
public int hashCode() {
return Objects.hashCode(domain);
return Objects.hashCode(domainName);
}
@Override
public int compareTo(Domain other) {
return domain.compareTo(other.getDomain());
return domainName.compareTo(other.getDomainName());
}
@Override
@ -120,7 +121,7 @@ public class Domain implements Comparable<Domain> {
return true;
}
if (object instanceof Domain) {
return Objects.equal(domain, ((Domain) object).domain);
return Objects.equal(domainName, ((Domain) object).domainName);
} else {
return false;
}
@ -128,7 +129,7 @@ public class Domain implements Comparable<Domain> {
@Override
public String toString() {
return String.format("[domain=%s, createTime=%s, count=%d, glesysnameserver=%b]", domain, createTime, recordCount, glesysNameServer);
return String.format("[domainname=%s, createtime=%s, count=%d, useglesysnameserver=%b]", domainName, createTime, recordCount, useGlesysNameServer);
}
}

View File

@ -33,7 +33,7 @@ public class DomainRecord implements Comparable<DomainRecord> {
public static class Builder {
private String id;
private String zone;
private String domainname;
private String host;
private String type;
private String data;
@ -44,9 +44,8 @@ public class DomainRecord implements Comparable<DomainRecord> {
return this;
}
public Builder zone(String zone) {
this.zone = zone;
public Builder domainname(String domainname) {
this.domainname = domainname;
return this;
}
@ -71,24 +70,24 @@ public class DomainRecord implements Comparable<DomainRecord> {
}
public DomainRecord build() {
return new DomainRecord(id, zone, host, type, data, ttl);
return new DomainRecord(id, domainname, host, type, data, ttl);
}
public Builder fromDomainRecord(DomainRecord in) {
return new Builder().id(in.getId()).zone(in.getZone()).host(in.getHost()).type(in.getType()).data(in.getData()).ttl(in.getTtl());
return new Builder().id(in.getId()).domainname(in.getDomainName()).host(in.getHost()).type(in.getType()).data(in.getData()).ttl(in.getTtl());
}
}
private final String id;
private final String zone;
private final String domainname;
private final String host;
private final String type;
private final String data;
private final int ttl;
public DomainRecord(String id, String zone, String host, String type, String data, int ttl) {
public DomainRecord(String id, String domainname, String host, String type, String data, int ttl) {
this.id = id;
this.zone = zone;
this.domainname = domainname;
this.host = host;
this.type = type;
this.data = data;
@ -106,8 +105,8 @@ public class DomainRecord implements Comparable<DomainRecord> {
/**
* @return the zone content of the record
*/
public String getZone() {
return zone;
public String getDomainName() {
return domainname;
}
/**
@ -163,7 +162,7 @@ public class DomainRecord implements Comparable<DomainRecord> {
@Override
public String toString() {
return String.format("[id=%s, zone=%s, host=%s, type=%s, data=%s, ttl=%d]", id, zone, host, type, data, ttl);
return String.format("[id=%s, domainname=%s, host=%s, type=%s, data=%s, ttl=%d]", id, domainname, host, type, data, ttl);
}
}

View File

@ -64,14 +64,14 @@ public interface DomainAsyncClient {
*/
@POST
@Path("/domain/add/format/json")
ListenableFuture<Void> addDomain(@FormParam("name") String name, AddDomainOptions... options);
ListenableFuture<Void> addDomain(@FormParam("domainname") String name, AddDomainOptions... options);
/**
* @see DomainClient#editDomain
*/
@POST
@Path("/domain/edit/format/json")
ListenableFuture<Void> editDomain(@FormParam("domain") String domain, DomainOptions... options);
ListenableFuture<Void> editDomain(@FormParam("domainname") String domain, DomainOptions... options);
/**
@ -79,23 +79,23 @@ public interface DomainAsyncClient {
*/
@POST
@Path("/domain/delete/format/json")
ListenableFuture<Void> deleteDomain(@FormParam("domain") String domain);
ListenableFuture<Void> deleteDomain(@FormParam("domainname") String domain);
/**
* @see DomainClient#listRecords
*/
@POST
@Path("/domain/list_records/format/json")
@Path("/domain/listrecords/format/json")
@SelectJson("records")
@Consumes(MediaType.APPLICATION_JSON)
ListenableFuture<Set<DomainRecord>> listRecords(@FormParam("domain") String domain);
ListenableFuture<Set<DomainRecord>> listRecords(@FormParam("domainname") String domain);
/**
* @see DomainClient#addRecord
*/
@POST
@Path("/domain/add_record/format/json")
ListenableFuture<Void> addRecord(@FormParam("domain") String domain, @FormParam("host") String host,
@Path("/domain/addrecord/format/json")
ListenableFuture<Void> addRecord(@FormParam("domainname") String domain, @FormParam("host") String host,
@FormParam("type") String type, @FormParam("data") String data,
AddRecordOptions... options);
@ -103,14 +103,14 @@ public interface DomainAsyncClient {
* @see DomainClient#editRecord
*/
@POST
@Path("/domain/update_record/format/json")
ListenableFuture<Void> editRecord(@FormParam("record_id") String record_id, EditRecordOptions... options);
@Path("/domain/updaterecord/format/json")
ListenableFuture<Void> editRecord(@FormParam("recordid") String record_id, EditRecordOptions... options);
/**
* @see DomainClient#deleteRecord
*/
@POST
@Path("/domain/delete_record/format/json")
ListenableFuture<Void> deleteRecord(@FormParam("record_id") String recordId);
@Path("/domain/deleterecord/format/json")
ListenableFuture<Void> deleteRecord(@FormParam("recordid") String recordId);
}

View File

@ -26,6 +26,8 @@ import java.util.Date;
import javax.inject.Singleton;
import com.google.inject.Inject;
import org.jclouds.date.DateService;
import org.jclouds.json.config.GsonModule;
import com.google.common.base.Throwables;
@ -34,27 +36,43 @@ import com.google.gson.stream.JsonWriter;
/**
* Parser for Glesys Date formats
*
*
* @deprecated this should be replaced by standard ISO8601 parser in the next week or so
*
* @author Adam Lowe
*/
@Singleton
public class GlesysDateAdapter extends GsonModule.DateAdapter {
private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final DateService standardDateService;
@Inject
public GlesysDateAdapter(DateService service) {
this.standardDateService = service;
}
public void write(JsonWriter writer, Date value) throws IOException {
synchronized (dateFormat) {
writer.value(dateFormat.format(value));
try {
writer.value(standardDateService.iso8601SecondsDateFormat(value));
} catch (Exception ex) {
synchronized (dateFormat) {
writer.value(dateFormat.format(value));
}
}
}
public Date read(JsonReader reader) throws IOException {
String toParse = reader.nextString();
try {
synchronized (dateFormat) {
return dateFormat.parse(toParse);
return standardDateService.iso8601SecondsDateParse(toParse);
} catch (Exception ex) {
try {
synchronized (dateFormat) {
return dateFormat.parse(toParse);
}
} catch (ParseException e) {
throw Throwables.propagate(e);
}
} catch (ParseException e) {
throw Throwables.propagate(e);
}
}
}

View File

@ -85,7 +85,7 @@ public class AddDomainOptions extends DomainOptions {
* Ensure only NS and SOA records will be created by default, when this option is not used a number of default records will be created on the domain.
*/
public DomainOptions minimalRecords() {
formParameters.put("create_records", "0");
formParameters.put("createrecords", "0");
return this;
}

View File

@ -33,14 +33,6 @@ public class AddRecordOptions extends BaseHttpRequestOptions {
AddRecordOptions options = new AddRecordOptions();
return options.ttl(ttl);
}
/**
* @see AddRecordOptions#mxPriority
*/
public static AddRecordOptions mxPriority(int mxPriority) {
AddRecordOptions options = new AddRecordOptions();
return options.mxPriority(mxPriority);
}
}
/** Configure TTL/Time-to-live for record */
@ -48,11 +40,4 @@ public class AddRecordOptions extends BaseHttpRequestOptions {
formParameters.put("ttl", Integer.toString(ttl));
return this;
}
/** Configure the priority of an MX record */
public AddRecordOptions mxPriority(int mxPriority) {
formParameters.put("mx_priority", Integer.toString(mxPriority));
return this;
}
}

View File

@ -86,7 +86,7 @@ public class DomainOptions extends BaseHttpRequestOptions {
* Configure the primary DNS server for this domain.
*/
public DomainOptions primaryNameServer(String primaryNameServer) {
formParameters.put("primary_ns", primaryNameServer);
formParameters.put("primarynameserver", primaryNameServer);
return this;
}
@ -98,7 +98,7 @@ public class DomainOptions extends BaseHttpRequestOptions {
if (!responsiblePerson.endsWith(".")) {
responsiblePerson = responsiblePerson + ".";
}
formParameters.put("resp_person", responsiblePerson);
formParameters.put("responsibleperson", responsiblePerson);
return this;
}

View File

@ -51,13 +51,6 @@ public class EditRecordOptions extends AddRecordOptions {
public static EditRecordOptions ttl(int ttl) {
return EditRecordOptions.class.cast(new EditRecordOptions().ttl(ttl));
}
/**
* @see EditRecordOptions#mxPriority
*/
public static EditRecordOptions mxPriority(int mxPriority) {
return EditRecordOptions.class.cast(new EditRecordOptions().mxPriority(mxPriority));
}
}

View File

@ -21,12 +21,18 @@ package org.jclouds.glesys.features;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import org.apache.log4j.helpers.ISO8601DateFormat;
import org.jclouds.date.DateService;
import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.glesys.GleSYSClient;
import org.jclouds.glesys.domain.Domain;
import org.jclouds.glesys.domain.DomainRecord;
import org.jclouds.glesys.options.AddDomainOptions;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.jclouds.json.config.GsonModule;
import org.jclouds.rest.BaseRestClientExpectTest;
import org.jclouds.rest.ResourceNotFoundException;
import org.testng.annotations.Test;
@ -46,6 +52,8 @@ import static org.testng.Assert.assertTrue;
*/
@Test(groups = "unit", testName = "DomainClientExpectTest")
public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClient> {
private DateService dateService = new SimpleDateFormatDateService();
public DomainClientExpectTest() {
provider = "glesys";
}
@ -59,10 +67,12 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/domain_list.json")).build()).getDomainClient();
Set<Domain> expected = ImmutableSet.of(
Domain.builder().domain("adamlowe.net").createTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2011-12-20 10:58:51")).build());
Domain expected =
Domain.builder().domainName("testglesys.jclouds.org").createTime(dateService.iso8601SecondsDateParse("2012-01-31T12:19:03+01:00")).build();
assertEquals(client.listDomains(), expected);
Domain actual = Iterables.getOnlyElement(client.listDomains());
assertEquals(expected.getDomainName(), actual.getDomainName());
assertEquals(expected.getCreateTime(), actual.getCreateTime());
}
public void testListDomainsWhenResponseIs4xxReturnsEmpty() throws Exception {
@ -79,28 +89,38 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
public void testListDomainRecordsWhenResponseIs2xx() throws Exception {
DomainClient client = requestSendsResponse(
HttpRequest.builder().method("POST").endpoint(URI.create("https://api.glesys.com/domain/list_records/format/json"))
HttpRequest.builder().method("POST").endpoint(URI.create("https://api.glesys.com/domain/listrecords/format/json"))
.headers(ImmutableMultimap.<String, String>builder()
.put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("domain", "adamlowe.net").build())).build(),
.put("domainname", "testglesys.jclouds.org").build())).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/domain_list_records.json")).build()).getDomainClient();
Set<DomainRecord> expected = ImmutableSortedSet.of(
DomainRecord.builder().id("213227").zone("adamlowe.net").host("@").type("NS").data("ns1.namesystem.se.").ttl(3600).build(),
DomainRecord.builder().id("213228").zone("adamlowe.net").host("@").type("NS").data("ns2.namesystem.se.").ttl(3600).build(),
DomainRecord.builder().id("213229").zone("adamlowe.net").host("@").type("NS").data("ns3.namesystem.se.").ttl(3600).build(),
DomainRecord.builder().id("213230").zone("adamlowe.net").host("@").type("A").data("127.0.0.1").ttl(3600).build(),
DomainRecord.builder().id("213231").zone("adamlowe.net").host("www").type("A").data("127.0.0.1").ttl(3600).build(),
DomainRecord.builder().id("213232").zone("adamlowe.net").host("mail").type("A").data("79.99.4.40").ttl(3600).build(),
DomainRecord.builder().id("213233").zone("adamlowe.net").host("@").type("MX").data("mx01.glesys.se.").ttl(3600).build(),
DomainRecord.builder().id("213234").zone("adamlowe.net").host("@").type("MX").data("mx02.glesys.se.").ttl(3600).build(),
DomainRecord.builder().id("213235").zone("adamlowe.net").host("@").type("TXT").data("v=spf1 include:spf.glesys.se -all").ttl(3600).build()
DomainRecord.builder().id("224538").domainname("testglesys.jclouds.org").host("@").type("NS").data("ns1.namesystem.se.").ttl(3600).build(),
DomainRecord.builder().id("224539").domainname("testglesys.jclouds.org").host("@").type("NS").data("ns2.namesystem.se.").ttl(3600).build(),
DomainRecord.builder().id("224540").domainname("testglesys.jclouds.org").host("@").type("NS").data("ns3.namesystem.se.").ttl(3600).build(),
DomainRecord.builder().id("224541").domainname("testglesys.jclouds.org").host("@").type("A").data("127.0.0.1").ttl(3600).build(),
DomainRecord.builder().id("224542").domainname("testglesys.jclouds.org").host("www").type("A").data("127.0.0.1").ttl(3600).build(),
DomainRecord.builder().id("224543").domainname("testglesys.jclouds.org").host("mail").type("A").data("79.99.4.40").ttl(3600).build(),
DomainRecord.builder().id("224544").domainname("testglesys.jclouds.org").host("@").type("MX").data("10 mx01.glesys.se.").ttl(3600).build(),
DomainRecord.builder().id("224545").domainname("testglesys.jclouds.org").host("@").type("MX").data("20 mx02.glesys.se.").ttl(3600).build(),
DomainRecord.builder().id("224546").domainname("testglesys.jclouds.org").host("@").type("TXT").data("v=spf1 include:spf.glesys.se -all").ttl(3600).build()
);
assertEquals(client.listRecords("adamlowe.net"), expected);
}
Set<DomainRecord> actual = client.listRecords("testglesys.jclouds.org");
assertEquals(actual, expected);
for(DomainRecord result : actual) {
for(DomainRecord expect : expected) {
if (result.equals(expect)) {
assertEquals(result.toString(), expect.toString(), "Deep comparison using toString() failed!");
}
}
}
}
public void testListDomainRecordsWhenResponseIs4xxReturnsEmpty() throws Exception {
DomainClient client = requestSendsResponse(
@ -120,7 +140,7 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.headers(ImmutableMultimap.<String, String>builder().put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("name", "cl66666_x").build())).build(),
.put("domainname", "cl66666_x").build())).build(),
HttpResponse.builder().statusCode(200).build()).getDomainClient();
client.addDomain("cl66666_x");
@ -133,12 +153,12 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.headers(ImmutableMultimap.<String, String>builder().put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("name", "cl66666_x")
.put("primary_ns", "ns1.somewhere.x")
.put("domainname", "cl66666_x")
.put("primarynameserver", "ns1.somewhere.x")
.put("expire", "1")
.put("minimum", "1")
.put("refresh", "1")
.put("resp_person", "Tester.")
.put("responsibleperson", "Tester.")
.put("retry", "1")
.put("ttl", "1")
.build())).build(),
@ -155,7 +175,7 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.headers(ImmutableMultimap.<String, String>builder().put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("domain", "x").build())).build(),
.put("domainname", "x").build())).build(),
HttpResponse.builder().statusCode(200).build()).getDomainClient();
client.editDomain("x");
@ -168,7 +188,7 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.headers(ImmutableMultimap.<String, String>builder().put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("domain", "x").build())).build(),
.put("domainname", "x").build())).build(),
HttpResponse.builder().statusCode(404).build()).getDomainClient();
client.editDomain("x");
@ -180,7 +200,7 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.headers(ImmutableMultimap.<String, String>builder().put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("domain", "x").build())).build(),
.put("domainname", "x").build())).build(),
HttpResponse.builder().statusCode(200).build()).getDomainClient();
client.deleteDomain("x");
@ -193,7 +213,7 @@ public class DomainClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.headers(ImmutableMultimap.<String, String>builder().put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("domain", "x").build())).build(),
.put("domainname", "x").build())).build(),
HttpResponse.builder().statusCode(404).build()).getDomainClient();
client.deleteDomain("x");

View File

@ -88,7 +88,7 @@ public class DomainClientLiveTest extends BaseGleSYSClientLiveTest {
@Test
public void testEditDomain() throws Exception {
client.editDomain(testDomain, DomainOptions.Builder.responsiblePerson("tester.jclouds.org"));
assertTrue(client.listDomains().contains(Domain.builder().domain(testDomain).build()));
assertTrue(client.listDomains().contains(Domain.builder().domainName(testDomain).build()));
}
@Test

View File

@ -1 +1 @@
{"response":{"status":{"code":"200","text":"OK"},"domains":[{"domain":"adamlowe.net","create_time":"2011-12-20 10:58:51","count":"9","glesysnameserver":false}],"debug":{"input":[]}}}
{"response":{"status":{"code":200,"text":"OK"},"domains":[{"domainname":"testglesys.jclouds.org","createtime":"2012-01-31T12:19:03+01:00","recordcount":9,"usingglesysnameserver":"no"}],"debug":{"input":[]}}}

View File

@ -1 +1 @@
{"response":{"status":{"code":"200","text":"OK"},"records":[{"id":"213227","zone":"adamlowe.net","host":"@","type":"NS","data":"ns1.namesystem.se.","ttl":"3600"},{"id":"213228","zone":"adamlowe.net","host":"@","type":"NS","data":"ns2.namesystem.se.","ttl":"3600"},{"id":"213229","zone":"adamlowe.net","host":"@","type":"NS","data":"ns3.namesystem.se.","ttl":"3600"},{"id":"213230","zone":"adamlowe.net","host":"@","type":"A","data":"127.0.0.1","ttl":"3600"},{"id":"213231","zone":"adamlowe.net","host":"www","type":"A","data":"127.0.0.1","ttl":"3600"},{"id":"213232","zone":"adamlowe.net","host":"mail","type":"A","data":"79.99.4.40","ttl":"3600"},{"id":"213233","zone":"adamlowe.net","host":"@","type":"MX","data":"mx01.glesys.se.","ttl":"3600"},{"id":"213234","zone":"adamlowe.net","host":"@","type":"MX","data":"mx02.glesys.se.","ttl":"3600"},{"id":"213235","zone":"adamlowe.net","host":"@","type":"TXT","data":"v=spf1 include:spf.glesys.se -all","ttl":"3600"}],"debug":{"input":{"domain":"adamlowe.net"}}}}
{"response":{"status":{"code":200,"text":"OK"},"records":[{"id":224546,"domainname":"testglesys.jclouds.org","host":"@","type":"TXT","data":"v=spf1 include:spf.glesys.se -all","ttl":3600},{"id":224545,"domainname":"testglesys.jclouds.org","host":"@","type":"MX","data":"20 mx02.glesys.se.","ttl":3600},{"id":224543,"domainname":"testglesys.jclouds.org","host":"mail","type":"A","data":"79.99.4.40","ttl":3600},{"id":224544,"domainname":"testglesys.jclouds.org","host":"@","type":"MX","data":"10 mx01.glesys.se.","ttl":3600},{"id":224542,"domainname":"testglesys.jclouds.org","host":"www","type":"A","data":"127.0.0.1","ttl":3600},{"id":224541,"domainname":"testglesys.jclouds.org","host":"@","type":"A","data":"127.0.0.1","ttl":3600},{"id":224540,"domainname":"testglesys.jclouds.org","host":"@","type":"NS","data":"ns3.namesystem.se.","ttl":3600},{"id":224539,"domainname":"testglesys.jclouds.org","host":"@","type":"NS","data":"ns2.namesystem.se.","ttl":3600},{"id":224538,"domainname":"testglesys.jclouds.org","host":"@","type":"NS","data":"ns1.namesystem.se.","ttl":3600}],"debug":{"input":{"domainname":"testglesys.jclouds.org"}}}}