GO SDK of the GreenHost API. forked from github.com/digitalocean/godo
Go to file
Cheah Chu Yeow 5d63534b57 Use correct action names in test. 2014-11-12 09:09:13 +00:00
util initial commit 2014-09-03 10:20:10 -04:00
LICENSE.txt initial commit 2014-09-03 10:20:10 -04:00
Makefile initial commit 2014-09-03 10:20:10 -04:00
README.md Fix example in readme 2014-09-22 13:19:48 -07:00
action.go Update to current API spec 2014-09-08 20:36:11 -04:00
action_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
doc.go initial commit 2014-09-03 10:20:10 -04:00
domains.go Update to current API spec 2014-09-08 20:36:11 -04:00
domains_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
droplet_actions.go Flatten droplet actions params to match the current API spec. 2014-11-12 09:06:15 +00:00
droplet_actions_test.go Use correct action names in test. 2014-11-12 09:09:13 +00:00
droplets.go Add all options to droplet create request 2014-10-16 09:36:50 -04:00
droplets_test.go Links aren't added to droplet create response 2014-09-10 17:28:44 -04:00
godo.go Update to current API spec 2014-09-08 20:36:11 -04:00
godo_test.go Add all options to droplet create request 2014-10-16 09:36:50 -04:00
image_actions.go Services are interfaces 2014-09-04 16:22:37 -04:00
image_actions_test.go Services are interfaces 2014-09-04 16:22:37 -04:00
images.go Update to current API spec 2014-09-08 20:36:11 -04:00
images_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
keys.go Update to current API spec 2014-09-08 20:36:11 -04:00
keys_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
links.go If pages are empty, assume we are on last 2014-10-16 09:35:23 -04:00
links_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
regions.go Retrieve features for a region 2014-10-16 09:37:12 -04:00
regions_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
sizes.go Update to current API spec 2014-09-08 20:36:11 -04:00
sizes_test.go Update to current API spec 2014-09-08 20:36:11 -04:00
strings.go Update to current API spec 2014-09-08 20:36:11 -04:00
timestamp.go initial commit 2014-09-03 10:20:10 -04:00
timestamp_test.go initial commit 2014-09-03 10:20:10 -04:00

README.md

Godo

Godo is a Go client library for accessing the DigitalOcean V2 API.

You can view the client API docs here: http://godoc.org/github.com/digitalocean/godo

You can view Digital Ocean API docs here: https://developers.digitalocean.com/v2/

Usage

import "github.com/digitalocean/godo"

Create a new DigitalOcean client, then use the exposed services to access different parts of the DigitalOcean API.

Authentication

Currently, Personal Access Token (PAT) is the only method of authenticating with the API. You can manage your tokens at the Digital Ocean Control Panel Applications Page.

You can then use your token to create a new client:

import "code.google.com/p/goauth2/oauth"

pat := "mytoken"
t := &oauth.Transport{
	Token: &oauth.Token{AccessToken: pat},
}

client := godo.NewClient(t.Client())

Examples

To create a new Droplet:

dropletName := "super-cool-droplet"

createRequest := &godo.DropletCreateRequest{
    Name:   dropletName,
    Region: "nyc3",
    Size:   "512mb",
    Image:  "ubuntu-14-04-x64",
}

newDroplet, _, err := client.Droplets.Create(createRequest)

if err != nil {
    fmt.Printf("Something bad happened: %s\n\n", err)
    return err
}

Pagination

If a list of items is paginated by the API, you must request pages individually. For example, to fetch all Droplets:

func DropletList(client *godo.Client) ([]godo.Droplet, error) {
    // create a list to hold our droplets
    list := []godo.Droplet{}

    // create options. initially, these will be blank
    opt := &godo.ListOptions{}
    for {
        droplets, resp, err := client.Droplets.List(opt)
        if err != nil {
            return err
        }
        
        // append the current page's droplets to our list
        for _, d := range droplets {
            list = append(list, d)
        }

       // if we are at the last page, break out the for loop
       if resp.Links.IsLastPage() {
           break
       }

       page, err := resp.Links.CurrentPage()
       if err != nil {
           return err
        }

       // set the page we want for the next request
       opt.Page = page + 1
    }

    return nil
}