DigitalOcean Go API client
Go
Latest commit dfde623 Jan 12, 2017 @aybabtme aybabtme committed on GitHub Merge pull request #120 from eguevara/add-setbaseurl-tests
adding tests for godo.SetBaseURL()
Permalink
Failed to load latest commit information.
util Refactor to use static tokens Jul 31, 2015
.travis.yml hooking up travis Jan 22, 2015
CONTRIBUTING.md Add docs for contributing, versioning and docs. Mar 12, 2015
LICENSE.txt Update copyright notice to 2016 [ci skip] Jan 3, 2016
README.md It's DigitalOcean Sep 18, 2015
account.go Add FloatingIPLimit to Account type. Nov 24, 2015
account_test.go Add FloatingIPLimit to Account type. Nov 24, 2015
action.go Object roots should use a pointer to be consistent. Nov 18, 2016
action_test.go Remove testing Implements Mar 21, 2015
doc.go initial commit Sep 3, 2014
domains.go Add checks for arguments Sep 25, 2015
domains_test.go Standardize on returning objects, not the json roots. Jun 1, 2015
droplet_actions.go make linters happy Dec 21, 2016
droplet_actions_test.go Update droplet and actions endpoints with tagging support Mar 17, 2016
droplets.go Merge pull request #119 from term1nal/refactor/make-linters-happy Dec 22, 2016
droplets_test.go Adds support for creating droplets with monitoring (#117) Dec 22, 2016
errors.go Add checks for arguments Sep 25, 2015
errors_test.go Add checks for arguments Sep 25, 2015
floating_ips.go add support for floating IPs Sep 25, 2015
floating_ips_actions.go Object roots should use a pointer to be consistent. Nov 18, 2016
floating_ips_actions_test.go gofmt -s May 12, 2016
floating_ips_test.go add support for floating IPs Sep 25, 2015
godo.go make linters happy Dec 21, 2016
godo_test.go adding tests for godo.SetBaseURL() to check BaseURL field and handle … Jan 12, 2017
image_actions.go Object roots should use a pointer to be consistent. Nov 18, 2016
image_actions_test.go Merge pull request #33 from digitalocean/remove-implements-check Mar 23, 2015
images.go Object roots should use a pointer to be consistent. Nov 18, 2016
images_test.go Add Created attribute to Image Jun 17, 2015
keys.go Object roots should use a pointer to be consistent. Nov 18, 2016
keys_test.go Add support for key updates: Apr 21, 2015
links.go make linters happy Dec 21, 2016
links_test.go Fix a few issues identified by go vet Dec 16, 2014
regions.go Delete deadcode instead of comment it. Dec 22, 2016
regions_test.go Remove testing Implements Mar 21, 2015
sizes.go It's DigitalOcean Sep 18, 2015
sizes_test.go Added transfer to size May 3, 2015
snapshots.go make linters happy Dec 21, 2016
snapshots_test.go SizeGigaBytes is an floating-point number. Nov 30, 2016
storage.go Merge pull request #114 from digitalocean/update/storage-beta Dec 3, 2016
storage_actions.go make linters happy Dec 21, 2016
storage_actions_test.go Missed one! Dec 21, 2016
storage_test.go Merge pull request #114 from digitalocean/update/storage-beta Dec 3, 2016
strings.go make linters happy Dec 21, 2016
tags.go make linters happy Dec 21, 2016
tags_test.go make linters happy Dec 21, 2016
timestamp.go removed named return Jul 16, 2015
timestamp_test.go make linters happy Dec 21, 2016

README.md

Build Status

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 DigitalOcean API docs here: https://developers.digitalocean.com/documentation/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 DigitalOcean Control Panel Applications Page.

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

import "golang.org/x/oauth2"

pat := "mytoken"
type TokenSource struct {
    AccessToken string
}

func (t *TokenSource) Token() (*oauth2.Token, error) {
    token := &oauth2.Token{
        AccessToken: t.AccessToken,
    }
    return token, nil
}

tokenSource := &TokenSource{
    AccessToken: pat,
}
oauthClient := oauth2.NewClient(oauth2.NoContext, tokenSource)
client := godo.NewClient(oauthClient)

Examples

To create a new Droplet:

dropletName := "super-cool-droplet"

createRequest := &godo.DropletCreateRequest{
    Name:   dropletName,
    Region: "nyc3",
    Size:   "512mb",
    Image: godo.DropletCreateImage{
        Slug: "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 nil, 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 == nil || resp.Links.IsLastPage() {
            break
        }

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

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

    return list, nil
}

Versioning

Each version of the client is tagged and the version is updated accordingly.

Since Go does not have a built-in versioning, a package management tool is recommended - a good one that works with git tags is gopkg.in.

To see the list of past versions, run git tag.

Documentation

For a comprehensive list of examples, check out the API documentation.

For details on all the functionality in this library, see the GoDoc documentation.

Contributing

We love pull requests! Please see the contribution guidelines.