Unbeknownst to me ClouDNS (the best DNS provider on the planet, according to me) actually bumped this code quite a bit. They included tests and everything. Also, they will very likely take much better care of it than me.
Please use their ClouDNS Go API Client instead.
Thank you!
This is an API-Client for the ClouDNS HTTP API written in Go
There are three structs that you need to know:
- Apiaccess: Holds your authentication parameters (auth-id/sub-auth-id, auth-password)
// Apiaccess ClouDNS API Credentials, see https://www.cloudns.net/wiki/article/42/
type Apiaccess struct {
Authid int `json:"auth-id,omitempty"`
Subauthid int `json:"sub-auth-id,omitempty"`
Authpassword string `json:"auth-password"`
}- Zone: Holds information about a zone
// Zone is the external representation of a zone
// check the ...zone types in api.go for details
type Zone struct {
Domain string `json:"domain-name"`
Ztype string `json:"zone-type"`
Ns []string `json:"ns,omitempty"`
}- Record: Holds information about a record
// Record is the external representation of a record
// check the ...record types in api.go for details
type Record struct {
ID string `json:"id"`
Domain string `json:"domain-name"`
Host string `json:"host"`
Rtype string `json:"record-type"`
TTL int `json:"ttl"`
Record string `json:"record"`
}a := cloudns.Apiaccess{
Authid: 1234,
Authpassword: "super-secret-password",
}
z := cloudns.Zone{
Domain: "testdomain.xxx",
Ztype: "master",
}
r := cloudns.Record{
Domain: "testdomain.xxx",
ID: "",
Host: "foo",
Rtype: "TXT",
Record: "bar",
TTL: 3600,
}These structs have methods, that call the API, most of them return either an Array of the other ones or the updated input struct and an error.
Listzones(): lists all zones (up to 100)
zonelist, zonelisterr := a.Listzones()
if zonelisterr == nil {
spew.Println(zonelist)
} else {
spew.Println(zonelisterr)
}List(*auth): lists all records from a zone
fmt.Println("reading zone")
zr, zrerr := z.Read(&a)
if zrerr == nil {
spew.Println(zr)
} else {
spew.Println(zrerr)
}Create(*auth): create a zone
fmt.Println("create zone testdomain.xxx")
zc, zcerr := z.Create(&a)
if zcerr == nil {
spew.Println(zc)
z = zc
} else {
spew.Println(zcerr)
}Destroy(*auth): destroy a zone
fmt.Println("destroying zone testdomain.xxx ...")
zd, zderr := z.Destroy(&a)
if zderr == nil {
spew.Println(zd)
} else {
spew.Println(zderr)
}Create(*auth): Create a record
fmt.Println("creating record foo TXT bar 3600")
rc, rcerr := r.Create(&a)
if rcerr == nil {
spew.Println(rc)
} else {
spew.Println(rcerr)
}Update(*auth): Update a record
rc.Record = "foobar"
fmt.Println("Updating record to foo TXT foobar 3600")
ru, ruerr := rc.Update(&a)
if ruerr == nil {
spew.Println(ru)
} else {
spew.Println(ruerr)
}Read(*auth): Read a record
fmt.Println("Reading Record back")
rr, rrerr := ru.Read(&a)
if rrerr == nil {
spew.Println(rr)
} else {
spew.Println(rrerr)
}Destroy(*auth): Destroy a record
fmt.Println("Destroying record")
rd, rderr := rr.Destroy(&a)
if rderr == nil {
spew.Println(rd)
} else {
spew.Println(rderr)
}I did not yet touched any of the advanced features, that ClouDNS offers. For details please check the limitations