Skip to content
This repository was archived by the owner on May 15, 2025. It is now read-only.

matschundbrei/cloudns-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ClouDNS-Go

DEPRECATION NOTE

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!

previous readme ...

This is an API-Client for the ClouDNS HTTP API written in Go

Usage

Structs

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"`
}

Examples for the structs

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,
}

Methods

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.

Apiaccess Methods

Listzones(): lists all zones (up to 100)

zonelist, zonelisterr := a.Listzones()
if zonelisterr == nil {
    spew.Println(zonelist)
} else {
    spew.Println(zonelisterr)
}

Zone Methods

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)
}

Record Methods

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)
}

Limitations

I did not yet touched any of the advanced features, that ClouDNS offers. For details please check the limitations

About

api-client for cloudns in go

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages