This is an API-Client for the ClouDNS HTTP API written in Go
Currently this software is written by an absolute noob in go. Therefore, I am very happy about any pointers toward making the code simpler, faster or more lightweight.
Use at your own risk!
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